haprox + keepalive 實現 高可用+ 四層負載均衡
目前,比較流行開源集群管理工具是haproxy + keepalived 是比較簡單易學的組合;
主機環境:
Cent OS 6.8x64
軟件版本:
haproxy-1.5.18-6.el7.x86_64.rpm
keepalived-1.3.5-1.el7.x86_64.rpm
網絡配置:
web1-eth0:192.168.134.137
web1-eth0:192.168.134.139
VIP:192.168.134.200
後端web應用IP: 192.168.134.10
192.168.134.20
192.168.134.30
安裝、配置、啟動keepalived:
web1節點:
# yum -y install keepalived
# vim /etc/keepalived/keepalived.conf
1 ! Configuration File for keepalived 2 vrrp_script chk_http_port { 3 script "/etc/keepalived/check_haproxy.sh" 4 interval 2 5 weight 2 6 7 global_defs { 8 notification_email { 9 xsl@localhost10 } 11 notification_email_from root@localhost 12 smtp_server 127.0.0.1 13 smtp_connect_timeout 120 14 router_id haproxy1 15 } 16 17 vrrp_instance web { 18 state MASTER 19 interface eth0 20 virtual_router_id 200 21 priority 100 22 advert_int 1 23 authentication { 24 auth_type PASS25 auth_pass 1111 26 } 27 track_script { 28 chk_http_port 29 } 30 virtual_ipaddress { 31 192.168.134.200 32 } 33 } 34 }
# /etc/init.d/keepalived start
# chkconfig keepalived on
# chkconfig --list keepalived
keepalived 0:off 1:off 2:on 3:on 4:on 5:on 6:off
# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:1d:0c:d2 brd ff:ff:ff:ff:ff:ff
inet 192.168.134.137/24 brd 192.168.134.255 scope global eth0
inet 192.168.134.200/32 scope global eth0
可以看到,浮動IP配置成功!!!
web2節點:
# yum -y install keepalived
# vim /etc/keepalived/keepalived.conf
1 ! Configuration File for keepalived 2 vrrp_script chk_http_port { 3 script "/etc/keepalived/check_haproxy.sh" 4 interval 2 5 weight 2 6 } 7 8 global_defs { 9 notification_email { 10 xsl@localhost 11 } 12 notification_email_from root@localhost 13 smtp_server 127.0.0.1 14 smtp_connect_timeout 120 15 router_id haproxy1 16 } 17 18 vrrp_instance web { 19 state BACKUP 20 interface eth0 21 virtual_router_id 200 22 priority 50 23 advert_int 1 24 authentication { 25 auth_type PASS 26 auth_pass 1111 27 } 28 29 track_script { 30 chk_http_port 31 } 32 33 virtual_ipaddress { 34 192.168.134.200 35 } 36 }
編寫狀態檢查腳本:
# vim /etc/keepalived/check_haproxy.sh
1 #!/bin/bash 2 B=`ip addr show |grep 192.168.134.200|wc -l` 3 if [ $B -eq 1 ];then 4 A=`ps -C haproxy --no-header |wc -l` 5 if [ $A -eq 0 ];then 6 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg 7 sleep 3 8 if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then 9 /etc/init.d/keepalived stop 10 fi 11 fi 12 fi
# /etc/init.d/keepalived start
# chkconfig keepalived on
# chkconfig --list keepalived
keepalived 0:off 1:off 2:on 3:on 4:on 5:on 6:off
# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:1d:0c:d2 brd ff:ff:ff:ff:ff:ff inet 192.168.134.137/24 brd 192.168.134.255 scope global eth0
可以看到,備機節點上浮動IP配置成功!!!
測試VIP是否會漂移漂移:
首先關掉web1節點的keepalived:
# /etc/init.d/keepalived stop
檢查web2節點是否已經拿到VIP地址
# ip addr show eth0
安裝、配置、啟動haproxy:web1節點和web2節點配置相同
# yum -y install haproxy
#vim /etc/haproxy/haproxy.cfg
1 global 2 log 127.0.0.1 local2 3 chroot /var/lib/haproxy 4 pidfile /var/run/haproxy.pid 5 maxconn 4000 6 user haproxy 7 group haproxy 8 daemon 9 # turn on stats unix socket 10 stats socket /var/lib/haproxy/stats 11 12 defaults 13 mode http 14 log global 15 option httplog 16 option dontlognull 17 option http-server-close 18 option forwardfor except 127.0.0.0/8 19 option redispatch 20 retries 3 21 timeout http-request 10s 22 timeout queue 1m 23 timeout connect 10s 24 timeout client 1m 25 timeout server 1m 26 timeout http-keep-alive 10s 27 timeout check 10s 28 maxconn 3000 29 30 listen stats 31 mode http 32 bind 0.0.0.0:8888 33 stats enable 34 stats uri /haproxy-status 35 stats auth haproxy:yum 36 37 frontend healthcheck 38 bind 192.168.134.200:80 39 mode http 40 option httpclose 41 log global 42 default_backend webserver 43 44 backend webserver 45 option forwardfor header X-REAL-IP 46 option httpchk HEAD / HTTP/1.0 47 balance source 48 server web1 192.168.134.10:80 inter 2000 rise 15 fall 30 check maxconn 2000 49 server web3 192.168.134.20:80 inter 2000 rise 15 fall 30 check maxconn 2000 50 server web3 192.168.134.30:80 inter 2000 rise 15 fall 30 check maxconn 2000
# /etc/init.d/haproxy start
# chkconfig haproxy on
# chkconfig --list haproxy
測試故障自愈:
停掉web1節點的haproxy;
# /etc/init.d/haproxy stop
檢查服務是否自愈;
# /etc/init.d/haproxy status
停掉web1節點的keepalive的服務
# /etc/init.d/keepalived stop
檢查web1節點的VIP是否漂移;
# ip addr show eth0
檢查web2節點的VIP是否存在;
# ip addr show eth0
haprox + keepalive 實現 高可用+ 四層負載均衡