Centos环境下负载均衡软件Haproxy安装、配置+keepalive实现高可用
首先看下百度百科给的介绍:
HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
haproxy是一款免费、开源的负载均衡软件,一些大型网站用的还是比较多比如京东,淘宝等,特点也比较突出:支持Session的保持,Cookie的引导,同时支持通过获取指定的url来检测后端服务器的状态;出色的负载均衡速度,而且并发处理上一定程度上高于nginx并发;支持TCP协议的负载均衡转发,对于各种基于tcp的软件进行负载均衡比如mysql;负载均衡算法策略比较多,设置更具体。
云海天教程原创内容,转载请注明出处。
下边正式开始安装、配置、测试以及高可用配置使用。
haproxy 配置中分成五部分内容,分别如下:
1、global:参数是进程级的,通常是和操作系统相关。这些参数一般只设置一次,如果配置无误,就不需要再次进行修改
2、defaults:配置默认参数,这些参数可以被用到frontend,backend,Listen组件
3、frontend:接收请求的前端虚拟节点,Frontend可以更加规则直接指定具体使用后端的backend
4、backend:后端服务集群的配置,是真实服务器,一个Backend对应一个或者多个实体服务器
5、Listen Fronted和backend的组合体。
通过网上haproxy的了解以及学习、安装实践以及使用,这里本博客简单记录下haproxy的基础部分,包括安装、配置、使用以及配合keepalive的高可用。
硬件:kvm虚拟机
平台:centos 6.8 x86_64
4台机器如下:
VIP:192.168.1.120
DIP:192.168.1.102(keepalive_master)
Dip :192.168.1.104 (keepalive_backup)
RIP :192.168.1.122
RIP :192.168.1.123
一,haproxy的基本安装、配置和使用。
1,haproxy安装
我们这里首先安装192.168.1.102机器,先单台测试。
官网下载地址: haproxy软件官网下载地址:http://www.haproxy.org/#down 可以根据自己的系统内核版本进行版本
选择安装。
这里以官网提供的1.5.19稳定版进行下载安装。可以直接yum install haproxy -y安装,这里源码编译安装,具体安装步骤如下:
cd /usr/local/src/ wget http://www.haproxy.org/download/1.5/src/haproxy-1.5.19.tar.gz tar zxvf haproxy-1.5.19.tar.gz cd haproxy-1.5.19 uname -a #查看系统内核信息 make TARGET=linux26 ARCH=x86_64 PREFIX=/usr/local/haproxy #根据内核配置参数和设置安装路径 make install PREFIX=/usr/local/haproxy
安装配置,设置配置文件以及haproxy服务、自启动。
mkdir /etc/haproxy -p cp examples/haproxy.cfg /etc/haproxy cp examples/haproxy.init /etc/init.d/haproxy chmod +x /etc/init.d/haproxy chkconfig haproxy on
2,配置haproxy
配置说明:
(1),haproxy在1.5版本以后没有haproxy.cfg配置文件,1.5之前在examples中是存在haproxy.cfg的配置文件的。从官网下载了高于1.5,比如1.6或者1.7,则需要自己配置一个配置文件。 1.5之前的版本可以直接复制examples/haproxy.cfg到配置目录/etc/haproxy并根据自己的环境进行修改。
(2)由于服务器读取的配置文件是/etc/haproxy/haproxy.cfg,所以我们新建了目录/etc/haproxy/并将配置文件放于这个目录。如果不创建而放到其他目录,请修改服务脚本中的配置文件路径或者采用后台-f指定配置文件运行,或者screen进行虚拟终端运行。建议设置haproxy服务方式,便于后期管理。
这里我们以默认自带的配置文件haproxy.cfg为基础进行了简单修改,修改后的内容如下:
当前简单配置如下:
global log 127.0.0.1 local2 chroot /usr/share/haproxy 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 option redispatch retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout http-keep-alive 10s timeout check 10s maxconn 3000 frontend http_default_80 bind 0.0.0.0:80 mode http log global option httplog option httpclose option forwardfor acl 21yunwei_site hdr(host) -i 21yunwei.21yunwei.com acl 21yunwei_site hdr(host) -i 21yunwei.21yunwei.cn acl lvs_site hdr(host) -i lvs.21yunwei.com acl lvs_site hdr(host) -i lvs.21yunwei.cn use_backend web_21yunwei if 21yunwei_site use_backend web_lvs if lvs_site #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 web_21yunwei frontend www bind :81 monitor-uri /haproxy backend web_21yunwei mode http balance roundrobin cookie SERVERID option httpchk GET /index.html server 21web1 192.168.1.123:80 check inter 2000 fall 3 weight 1 server 21web2 192.168.1.122:80 check inter 2000 fall 3 weight 1 backend web_lvs mode http balance roundrobin cookie SERVERID option httpchk GET /index.html server lvsweb1 192.168.1.123:80 check inter 2000 fall 3 weight 1 server lvsweb2 192.168.1.122:80 check inter 2000 fall 3 weight 3 listen admin_stats 0.0.0.0:88 option httplog stats refresh 30s stats uri /admin stats realm Haproxy Manager stats auth admin:admin
3,启动服务。
/etc/init.d/haproxy restart
报错1:Starting haproxy: [ALERT] 233/172027 (21384) : [/usr/sbin/haproxy.main()] Cannot chroot(/usr/share/haproxy).
解决办法:mkdir /usr/share/haproxy
常见报错2:/etc/init.d/haproxy: line 40: /usr/sbin/haproxy: No such file or directory
Errors found in configuration file, check it with ‘haproxy check’
解决办法:ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/haproxy
直接浏览器访问http://192.168.1.102/test.php效果:
访问到了web1的测试页:
刷新,可见web2访问测试页:
通过刚才设置的listen,查看haproxy监控页面信息,地址http://192.168.1.104:88/admin:
二,haproxy+keepalive的高可用方案。
由于haproxy部署于一个机器,存在单点故障风险,这里配置keepalive加以高可用,其中一个haprox死掉以后,通过keepa实现另外一个haproxy机器接管做高可用。
VIP:192.168.1.120
DIP:192.168.1.102(keepalive_master)
Dip :192.168.1.104 (keepalive_backup)
1,配置keepalive。
首先备机配置一个haproxy:之前192.168.1.102也就是keepalive_master配置了一个haproxy,如果做高可用,那么备用机器keepalive_backup也需要安装这个haproxy。按照上边的方法也配置一个haproxy,只要访问192.168.1.104/test.php 跟之前的效果一样即可。
安装keepalive很简单,keepalive_master,keepalive_backup都要安装,就如下几个小步骤:
(1)开启转发
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p可以查看是否开启。
(2)安装keepalived
首先安装依赖包:
yum -y install gcc make openssl-devel openssl net-snmp net-snmp-devel popt popt-devel
安装ipvs和keepalived:
yum install keepalived -y
chkconfig keepalived on
(3)编辑配置文件
! Configuration File for keepalived global_defs { router_id 21yunwei_haproxy_master } vrrp_instance 21yunwei { state MASTER #备机这里改成BACKUP interface eth0 lvs_sync_daemon_inteface eth0 virtual_router_id 51 priority 100 #备机这里改成优先级99,低于100即可。数值越大,优先级越高。 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.120 } }
两个机器都启动keepalive服务:/etc/init.d/keepalived start 正常启动,通过ip addr 查看到192.168.1.120这个VIP即可。
2,高可用测试。
首先测试VIP 192.168.1.120 访问:
http://192.168.1.120/test.php 效果和之前的一样:
停掉keepalive_master 的keepalive,查看keepalive_backup的/var/log/messages日志:
[[email protected]_backup haproxy]# tail -f /var/log/messages Aug 22 18:06:34 localhost Keepalived_vrrp[22946]: VRRP_Instance(21yunwei) Transition to MASTER STATE Aug 22 18:06:35 localhost Keepalived_vrrp[22946]: VRRP_Instance(21yunwei) Entering MASTER STATE Aug 22 18:06:35 localhost Keepalived_vrrp[22946]: VRRP_Instance(21yunwei) setting protocol VIPs. Aug 22 18:06:35 localhost Keepalived_vrrp[22946]: VRRP_Instance(21yunwei) Sending gratuitous ARPs on eth0 for 192.168.1.120 Aug 22 18:06:35 localhost Keepalived_healthcheckers[22945]: Netlink reflector reports IP 192.168.1.120 added Aug 22 18:06:35 localhost kernel: IPVS: stopping backup sync thread 22144 ... Aug 22 18:06:35 localhost kernel: IPVS: sync thread started: state = MASTER, mcast_ifn = eth0, syncid = 51 Aug 22 18:06:40 localhost Keepalived_vrrp[22946]: VRRP_Instance(21yunwei) Sending gratuitous ARPs on eth0 for 192.168.1.120
可见停掉keepalive_master 的keepalived以后,keepalive_backup接管了工作,此时测试http://192.168.1.120/test.php 访问没有受影响。
恢复keepalive_master 的keepalived,查看keepalive_backup的/var/log/messages日志:
Aug 22 18:08:29 localhost Keepalived_vrrp[22946]: VRRP_Instance(21yunwei) Received higher prio advert Aug 22 18:08:29 localhost kernel: IPVS: stopping master sync thread 24617 ... Aug 22 18:08:29 localhost Keepalived_vrrp[22946]: VRRP_Instance(21yunwei) Entering BACKUP STATE Aug 22 18:08:29 localhost Keepalived_vrrp[22946]: VRRP_Instance(21yunwei) removing protocol VIPs. Aug 22 18:08:29 localhost kernel: IPVS: sync thread started: state = BACKUP, mcast_ifn = eth0, syncid = 51 Aug 22 18:08:29 localhost Keepalived_healthcheckers[22945]: Netlink reflector reports IP 192.168.1.120 removed
高可用已经实现,这样就不用担心haproxy的单点故障了。
参考文档:
haproxy 配置详解 http://freehat.blog.51cto.com/1239536/1347882
haproxy配置文件详解 http://itnihao.blog.51cto.com/1741976/915537
负载均衡之Haproxy配置详解(及httpd配置) http://blog.csdn.net/tantexian/article/details/50056199 附带常用负载均衡的对比。
Haproxy+keepalived负载均衡配置 http://blog.csdn.net/aa168b/article/details/50372649