高性能负载均衡器HAProxy安装记录
2015-01-04
Haproxy是一款支持4层和7层应用的高性能负载均衡器。 使用Haproxy可以实现基于TCP和Http应用代理的解决方案。
编译安装 #
1wget http://www.haproxy.org/download/1.7/src/haproxy-<version>.tar.gz
2tar -zxvf haproxy-<version>.tar.gz
3cd haproxy-<version>
4make TARGET=linux2628 ARCH=x86_64
5make 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配置文件
1global
2 log 127.0.0.1 local2 #使用系统的syslog记录日志
3 pidfile /var/run/haproxy.pid
4 maxconn 4000 #限制单个进程的最大连接数
5 user haproxy #用户和用户组,需手动添加
6 group haproxy
7 daemon #进程在后台作为守护进程运行
8
9defaults
10 mode http
11 log global
12 option httplog
13 option dontlognull
14 option http-server-close
15 option forwardfor except 127.0.0.0/8 #在http请求头中添加X-Forwarded-For,把客户端IP发送给服务器
16 option redispatch #当客户端连接到出现故障的服务器时,将请求转发给其他机器
17 retries 3
18 timeout http-request 10s
19 timeout queue 1m
20 timeout connect 10s #连接server超时时间
21 timeout client 1m #客户端相应超时时间
22 timeout server 1m #server端响应超时时间
23 timeout http-keep-alive 10s
24 timeout check 10s
25 maxconn 3000
26
27frontend main #接收请求的前端虚拟节点
28 bind 0.0.0.0:5000
29 acl url_static path_beg -i /static /images /javascript /stylesheets
30 acl url_static path_end -i .jpg .gif .png .css .js
31 use_backend static if url_static
32 default_backend app
33
34backend static
35 balance roundrobin
36 server static 127.0.0.1:4331 check
37
38backend app #后端服务集群配置,一个backend对应一个或者多个实体服务器
39 balance roundrobin
40 server app1 127.0.0.1:5001 check
41 server app2 127.0.0.1:5002 check
42 server app3 127.0.0.1:5003 check
43 server app4 127.0.0.1:5004 check
启动 #
命令行启动:
1./haproxy -D -f /usr/local/haproxy/etc/haproxy.cfg
/usr/lib/systemd/system/haproxy.service
1[Unit]
2Description=HAProxy Load Balancer
3After=syslog.target network.target
4
5[Service]
6EnvironmentFile=-/etc/sysconfig/haproxy
7ExecStart=/usr/local/haproxy/sbin/haproxy-systemd-wrapper -f /usr/local/haproxy/etc/haproxy.cfg -p /run/haproxy.pid $OPTIONS
8ExecReload=/bin/kill -USR2 $MAINPID
9
10[Install]
11WantedBy=multi-user.target
日志 #
Haproxy默认不会直接输出文件日志,需要借助Linux的rsyslog输出日志。
在haproxy.cfg配置文件中global和defaults域中添加如下字段:
1global
2 ......
3 log 127.0.0.1 local0 info
4 log 127.0.0.1 local1 warning
5 ......
6
7defaults
8 ......
9 log global
10 ......
global中的配置,是将info级别及以上的日志输出到rsyslog的local0接口,将warn级别及以上的日志输出到rsyslog。 info会打印每个请求的日志,生产环境中建议将日志级别设置为notice
为ryslog添加haproxy日志的配置/etc/rsyslog.d/haproxy.cfg
1$ModLoad imudp
2$UDPServerRun 514
3$FileCreateMode 0644 #日志文件的权限
4$FileOwner root #日志文件的owner
5local0.* /var/log/haproxy.log #local0接口对应的日志输出文件
6local1.* /var/log/haproxy_warn.log #local1接口对应的日志输出文件
修改ryslog的启动参数/etc/sysconfig/rsyslog:
1SYSLOGD_OPTIONS="-c 2 -r -m 0"
重启rsyslog:
1systemctl restart rsyslog
重启haproxy后日志生效。
关键参数 #
- maxconn 设置每个进程并发连接的最大数量,当连接到达此数量时,代理服务器将停止接受请求。建议
ulimit -n
大于maxconn*2
,设置较大的maxconn时,需要修改ulimit -n参数。 - noepoll 在linux上禁止epoll