1. 程式人生 > >haprox + keepalive 實現 高可用+ 四層負載均衡

haprox + keepalive 實現 高可用+ 四層負載均衡

cfg stat 負載均衡 pass 編寫 vip ddr arp host

目前,比較流行開源集群管理工具是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@localhost
10 } 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 PASS
25 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 實現 高可用+ 四層負載均衡