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@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

 

posted @ 2018-01-29 16:48  血与火的洗礼  阅读(684)  评论(0编辑  收藏  举报