高性能负载均衡器HAProxy安装记录

2015-01-04 阅读: HAProxy

Haproxy是一款支持4层和7层应用的高性能负载均衡器。 使用Haproxy可以实现基于TCP和Http应用代理的解决方案。

编译安装

wget http://www.haproxy.org/download/1.7/src/haproxy-<version>.tar.gz
tar -zxvf haproxy-<version>.tar.gz
cd haproxy-<version>
make TARGET=linux2628 ARCH=x86_64
make install PREFIX=/usr/local/haproxy

查看make install的输出如果没有安装haproxy-systemd-wrapper的话,从源码路径下将其手动拷贝到/usr/local/haproxy/sbin下。

  • PREFIX 为指定的安装路径
  • TARGET则根据当前操作系统内核版本指定
    • linux26 for Linux 2.6 and above
    • linux2628 for Linux 2.6.28, 3.x, and above (enables splice and tproxy)

配置文件

创建/usr/local/haproxy/etc/haproxy.cfg配置文件

global
    log         127.0.0.1 local2 #使用系统的syslog记录日志
    pidfile     /var/run/haproxy.pid
    maxconn     4000 #限制单个进程的最大连接数
    user        haproxy #用户和用户组,需手动添加
    group       haproxy
    daemon #进程在后台作为守护进程运行

defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8  #在http请求头中添加X-Forwarded-For,把客户端IP发送给服务器
    option                  redispatch  #当客户端连接到出现故障的服务器时,将请求转发给其他机器
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s #连接server超时时间
    timeout client          1m  #客户端相应超时时间
    timeout server          1m  #server端响应超时时间
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

frontend  main #接收请求的前端虚拟节点
    bind 0.0.0.0:5000
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
    acl url_static       path_end       -i .jpg .gif .png .css .js
    use_backend static          if url_static
    default_backend             app

backend static
    balance     roundrobin
    server      static 127.0.0.1:4331 check

backend app #后端服务集群配置,一个backend对应一个或者多个实体服务器
    balance     roundrobin
    server  app1 127.0.0.1:5001 check
    server  app2 127.0.0.1:5002 check
    server  app3 127.0.0.1:5003 check
    server  app4 127.0.0.1:5004 check

启动

命令行启动:

./haproxy -D -f /usr/local/haproxy/etc/haproxy.cfg

/usr/lib/systemd/system/haproxy.service

[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target

[Service]
EnvironmentFile=-/etc/sysconfig/haproxy
ExecStart=/usr/local/haproxy/sbin/haproxy-systemd-wrapper -f /usr/local/haproxy/etc/haproxy.cfg -p /run/haproxy.pid $OPTIONS
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

日志

Haproxy默认不会直接输出文件日志,需要借助Linux的rsyslog输出日志。

在haproxy.cfg配置文件中global和defaults域中添加如下字段:

global
    ......
    log 127.0.0.1 local0 info
    log 127.0.0.1 local1 warning
    ......

defaults
    ......
    log global
    ......

global中的配置,是将info级别及以上的日志输出到rsyslog的local0接口,将warn级别及以上的日志输出到rsyslog。 info会打印每个请求的日志,生产环境中建议将日志级别设置为notice

为ryslog添加haproxy日志的配置/etc/rsyslog.d/haproxy.cfg

$ModLoad imudp
$UDPServerRun 514
$FileCreateMode 0644  #日志文件的权限
$FileOwner root  #日志文件的owner
local0.*     /var/log/haproxy.log  #local0接口对应的日志输出文件
local1.*     /var/log/haproxy_warn.log  #local1接口对应的日志输出文件

修改ryslog的启动参数/etc/sysconfig/rsyslog:

SYSLOGD_OPTIONS="-c 2 -r -m 0"

重启rsyslog:

systemctl restart rsyslog

重启haproxy后日志生效。

关键参数

  • maxconn 设置每个进程并发连接的最大数量,当连接到达此数量时,代理服务器将停止接受请求。建议`ulimit -n`大于`maxconn*2`,设置较大的maxconn时,需要修改ulimit -n参数。
  • noepoll 在linux上禁止epoll

参考

标题:高性能负载均衡器HAProxy安装记录
本文链接:https://blog.frognew.com/2015/01/install-haproxy.html
转载请注明出处。

目录