HaProxy
HaProxy基础讲解
作者:Danbo 时间:2015-7-23
Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一,支持双机备份、虚拟主机、基于TCP和HTTP应用代理、具备图形界面等功能。等自动将后端故障服务器剔除,并在故障恢复后自动加入。
Haproxy特别适合那些访问量大,但又需要会话保持或七层应用的业务。它的运行模式使得他可以很简单安全的整合进各种网站的构建中,同时web服务器不被暴露到网络上。(NAT模式。)
frontend可以允许运维人员根据任意HTTP请求头内容做规则匹配,然后把请求定向到相关的backend(Server pools 等待前端把请求转过来的服务器组)。很容易实现七层的代理功能。
HaProxy支持两种代理模式:4层TCP代理(邮件、Mysql等)和七层(Http代理)。在四层TCP代理模式下,HaProxy仅客户端和服务器之间书安详转发流量,在7层代理模式先,HaProxy会分析应用层协议来做相应的控制。
Haproxy L4负载均衡不需要在RS端执行脚本,与F5等硬件负载均衡设备的使用方法在构架中的位置几乎一样。
其在网站构架图的位置如下图所示:
说明:由于HaProxy采用的是NAT模式,数据包来去都会经过HaProxy,因此在流量特别大的情况下,其性能不如LVS(VS-DR)。在一般的中小型公司,建议使用HaProxy做负载均衡。
HaProxy L7负载均衡应用构架拓扑
HaProxy的最大优点在于其7层的根据URL请求头应用过滤的功能,在生产环境中的高并发环境中HaProxy一般用在LVS软件的下一层,或者像官方推荐的那样可以挂载在硬件负载均衡NS、F5下使用。
其所在网站构架图中的位置如下图:
注意:这里7层的HaProxy仅仅是四层的LVS的一个RS,所以七层的HaProxy可以横向扩展,这样就避免了HaProxy相对于LVS的瓶颈问题。
1.安装HaProxy
tar -zxvf haproxy-1.4.24
cd haproxy-1.4.24
make TARGET=linux2632 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy
2.配置
安装完毕后,进入安装目录的/uestc/tools/haproxy-1.5.14/examples将haproxy.cfg拷贝到/usr/local/haproxy目录下
这个配置文件内容如下:
[root@localhost haproxy]# cat -n haproxy.cfg
1 # this config needs haproxy-1.1.28 or haproxy-1.2.1
2
3 global #全局配置
4 log 127.0.0.1 local0 #日志输出配置,所有日志都记录在本机,通过local0输出
5 log 127.0.0.1 local1 notice #记录notice信息
6 #log loghost local0 info #记录info信息,当本机访问量很到的时候本机别开info,占用大量空间
7 maxconn 4096 #最大连接数
8 chroot /usr/share/haproxy
9 uid 99 #所述运行的用户uid
10 gid 99 #所述运行的用户组
11 daemon #以后台形式运行haproxy
12 #debug #调试模式,输出启动信息到标准输出
13 #quiet #安静模式,启动时无输出
14 nbproc 2 #通过nbproc多设置几个haproxy并发进程,这样每个进程的task_queue相对就会减少很多,性能自然就能提高不少。
15 defaults
16 log global
17 mode http #所处理的类型,默认采用http模式,七层;可以配置成TCP模式,四层。
18 option httplog #日志类型,采用httpdlog
19 option dontlognull
20 retries 3 #3此链接失败就认为服务器不可用,主要通过后面的check检查。
21 redispatch #当serverid对应的服务器挂掉后,强制定向到其他健康服务器。
22 maxconn 2000
23 contimeout 5000 #连接超时时间
24 clitimeout 50000 #客户端连接超时时间
25 srvtimeout 50000 #服务器端连接超时时间
26
27 listen appli1-rewrite 0.0.0.0:10001 40分钟。。ZL5-004-L4-7层负载均衡应用-haproxy应用实战讲解02
28 cookie SERVERID rewrite
29 balance roundrobin #算法轮训调度
30 server app1_1 192.168.34.23:8080 cookie app1inst1 check inter 2000 rise 2 fall 5
31 server app1_2 192.168.34.32:8080 cookie app1inst2 check inter 2000 rise 2 fall 5
32 server app1_3 192.168.34.27:8080 cookie app1inst3 check inter 2000 rise 2 fall 5
33 server app1_4 192.168.34.42:8080 cookie app1inst4 check inter 2000 rise 2 fall 5
34
35 listen appli2-insert 0.0.0.0:10002
36 option httpchk
37 balance roundrobin
38 cookie SERVERID insert indirect nocache
39 server inst1 192.168.114.56:80 cookie server01 check inter 2000 fall 3
40 server inst2 192.168.114.56:81 cookie server02 check inter 2000 fall 3
41 capture cookie vgnvisitor= len 32
42
43 option httpclose # disable keep-alive
44 rspidel ^Set-cookie:\ IP= # do not let this cookie tell our internal IP address
45
46 listen appli3-relais 0.0.0.0:10003
47 dispatch 192.168.135.17:80
48
49 listen appli4-backup 0.0.0.0:10004
50 option httpchk /index.html #健康检查
51 option persist
52 balance roundrobin
53 server inst1 192.168.114.56:80 check inter 2000 fall 3
54 server inst2 192.168.114.56:81 check inter 2000 fall 3 backup
55
56 listen ssl-relay 0.0.0.0:8443
57 option ssl-hello-chk
58 balance source
59 server inst1 192.168.110.56:443 check inter 2000 fall 3
60 server inst2 192.168.110.57:443 check inter 2000 fall 3
61 server back1 192.168.120.58:443 backup
62
63 listen appli5-backup 0.0.0.0:10005
64 option httpchk *
65 balance roundrobin
66 cookie SERVERID insert indirect nocache
67 server inst1 192.168.114.56:80 cookie server01 check inter 2000 fall 3
68 server inst2 192.168.114.56:81 cookie server02 check inter 2000 fall 3
69 server inst3 192.168.114.57:80 backup check inter 2000 fall 3
70 capture cookie ASPSESSION len 32
71 srvtimeout 20000
72
73 option httpclose # disable keep-alive
74 option checkcache # block response if set-cookie & cacheable
75
76 rspidel ^Set-cookie:\ IP= # do not let this cookie tell our internal IP address
77
78 errorloc 502 http://192.168.114.58/error502.html
79 errorfile 503 /etc/haproxy/errors/503.http
80