HaProxy介绍
haproxy的官网:http://www.haproxy.org/
一.环境准备
1 操作系统
Ubuntu 15.10 (GNU/Linux 4.2.0-42-generic x86_64)
2 Haproxy版本
截至haproxy稳定版本是1.7.8: http://www.haproxy.org/download/1.7/src/haproxy-1.7.8.tar.gz
3. 拓扑图
1.Haproxy安装
#下载
wget http://www.haproxy.org/download/1.7/src/haproxy-1.7.8.tar.gz
#解压
tar -zxvf haproxy-1.7.8.tar.gz
cd haproxy-1.7.8
#安装
make TARGET=linux2628 ARCH=x86_64 PREFIX=/home/duanxz/haproxy178
make install PREFIX=/home/duanxz/haproxy178
#参数说明
TARGET=linux26 #内核版本,使用uname -r查看内核,如:2.6.18-371.el5,此时该参数就为linux26;kernel 大于2.6.28的用:TARGET=linux2628
ARCH=x86_64 #系统位数
PREFIX=/usr/local/haprpxy #/usr/local/haprpxy为haprpxy安装路径
2. 配置文件
1)配置文件详解
默认安装目录下没有配置文件,只有doc,sbin,share三个目录,可手工创建目录及配置文件。
haproxy的配置文件主要是以下5部分:
global全局配置、defaults默认配置、监控页面配置、frontend配置、backend配置。
haproxy.cfg配置文件内容如下:
duanxz@tong6:~$ cat haproxy178/etc/haproxy.cfg global maxconn 20000 ulimit-n 16384 log 127.0.0.1 local0 user duanxz group duanxz #chroot /opt/haproxy nbproc 2 daemon frontend test-proxy bind *:9123 mode tcp log global #option httplog option dontlognull option nolinger #option http_proxy maxconn 8000 #timeout client 30s stats uri /stats default_backend test-proxy-srv backend test-proxy-srv mode tcp #timeout connect 5s #timeout server 5s #retries 2 balance roundrobin option nolinger #option http_proxy #option forwardfor header X-Forwarded-For server pos1 192.168.5.22:9124 check server pos2 192.168.5.22:9123 check duanxz@tong6:~$
启动:
./haproxy -f /home/duanxz/haproxy178/etc/haproxy.cfg
3 增加监控:
配置文件后面加:
########统计页面配置######## listen admin_stats bind 10.1.210.111:8099 #监听端口 mode http #http的7层模式 option httplog #采用http日志格式 #log 127.0.0.1 local0 err maxconn 10 stats refresh 30s #统计页面自动刷新时间 stats uri /stats [test@iZwz9e1dh1nweaex8ob5b7Z ~]$
重启后,访问页面:http://119.23.216.11:8099/stats
4Haproxy与tcp应用的心跳检测
HAProxy可以提供到对后端服务器的心跳检查(即端口监测),默认情况下没有,需要手动在配置文件中配置,例如:
backend new_server
server first 10.1.1.1:1080 check inter 1000
server second 10.1.1.2:1080 check inter 1000
check inter 心跳检查配置项,1000以毫秒为单位,总体意思为:每隔1000ms检查一次10.1.1.1:1080和10.1.1.2:1080进程是否存活。检查方式为:使用tcp连接后台服务器端口,如果能建立连接,就认为存活且马上关闭连接。
然而,在使用中发现一个问题:
1.4.23版本的haproxy在进行心跳检查后,关闭为了进行心跳时建立的tcp连接会发送一个RST分组。这个本身不会影响后端服务器的正常功能,但是绝大多数服务器收到这个分组后,会抛出异常,如果你的日志打印这种异常就会导致日志量很大(因为心跳很频繁,且每次心跳就会查收这个异常),且这种异常不容易定位,导致你”人心惶惶“!!!
1.4.24版本中修复了这个问题,它在心跳检查tcp连接时,没有达成三次握手,不向服务器发送最后一个ack分组,就马上发送RST分组,这样服务器认为连接没有建立,不会抛出异常。
如果大家要使用HAProxy建议使用1.4.24版本或更高版本。