HAProxy + Keepalive 实现网站高可用

1、相关博客链接

keepalived — 配置虚拟路由器示例

HAProxy 简单示例及 HAProxy_Log 的简单配置

2、组网拓扑

在这里插入图片描述

3、后端 HTTPD 服务器配置

3.1 HTTPD Server-1

[root@Tang-5 html]# ipinfo 
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.12  netmask 255.255.255.0  broadcast 192.168.10.255
--
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
[root@Tang-5 html]# ss -tnl
State       Recv-Q Send-Q                  Local Address:Port                                 Peer Address:Port              
LISTEN      0      128                                 *:22                                              *:*                  
LISTEN      0      100                         127.0.0.1:25                                              *:*                  
LISTEN      0      128                                :::80                                             :::*                  
LISTEN      0      128                                :::22                                             :::*                  
LISTEN      0      100                               ::1:25                                             :::*                  
[root@Tang-5 html]# curl http://192.168.10.12
<h1>The web server 192.168.10.12</h1>
[root@Tang-5 html]# curl http://192.168.10.13:8080
<h1>The web server 192.168.10.13</h1>

3.1 HTTPD Server-2

[root@Tang-11 ~]# ipinfo 
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.13  netmask 255.255.255.0  broadcast 192.168.10.255
--
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
[root@Tang-11 ~]# ss -tnl
State       Recv-Q Send-Q                  Local Address:Port                                 Peer Address:Port              
LISTEN      0      128                                 *:22                                              *:*                  
LISTEN      0      100                         127.0.0.1:25                                              *:*                  
LISTEN      0      128                                :::8080                                           :::*                  
LISTEN      0      128                                :::80                                             :::*                  
LISTEN      0      128                                :::22                                             :::*                  
LISTEN      0      100                               ::1:25                                             :::*                  
[root@Tang-11 ~]# curl http://192.168.10.13:8080
<h1>The web server 192.168.10.13</h1>
[root@Tang-11 ~]# curl http://192.168.10.12:80
<h1>The web server 192.168.10.12</h1>

4、keepalived 设置

4.1 主节点 配置

[root@Tang-7 ~]# ipinfo 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.10  netmask 255.255.255.0  broadcast 192.168.1.255
--
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.10  netmask 255.255.255.0  broadcast 192.168.10.255
--
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
[root@Tang-7 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
	root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id Neo_Tang
   vrrp_mcast_group4 224.0.0.58
}

vrrp_instance VI_1 {                            
    state MASTER
    interface ens33
    virtual_router_id 33
    priority 96
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass JIAOTANG
    }
    virtual_ipaddress {
	192.168.1.99/24 dev ens33 label ens33:0      
    }
}

4.2 备节点 配置

[root@Tang-6 ~]# ipinfo 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.11  netmask 255.255.255.0  broadcast 192.168.1.255
--
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.11  netmask 255.255.255.0  broadcast 192.168.10.255
--
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
[root@Tang-6 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
	root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id Neo_Tang
   vrrp_mcast_group4 224.0.0.58
}

vrrp_instance VI_1 {                            
    state BACKUP
    interface ens33
    virtual_router_id 33
    priority 95
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass JIAOTANG
    }
    virtual_ipaddress {
	192.168.1.99/24 dev ens33 label ens33:0
    }
}

4.3 启动 keepalived 服务,并查看 浮动地址

[root@Tang-7 ~]# systemctl start keepalived
[root@Tang-7 ~]# ipinfo 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.10  netmask 255.255.255.0  broadcast 192.168.1.255
--
ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.99  netmask 255.255.255.0  broadcast 0.0.0.0
--
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.10  netmask 255.255.255.0  broadcast 192.168.10.255
--
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
[root@Tang-6 ~]# systemctl start keepalived
[root@Tang-6 ~]# ipinfo 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.11  netmask 255.255.255.0  broadcast 192.168.1.255
--
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.11  netmask 255.255.255.0  broadcast 192.168.10.255
--
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0

5、HAProxy 设置(两个 HAProxy 主机的配置一样,在此只显示一台主机的配置)

5.1 HAProxy cfg 文件配置

[root@Tang-7 ~]# cat /etc/haproxy/haproxy.cfg 
frontend web
    bind *:80
    default_backend     websrvs

backend websrvs
    balance roundrobin
    server srv1 192.168.10.12:80 weight 1 check
    server srv2 192.168.10.13:8080 weight 1 check

5.2 HAProxy 程序启动

[root@Tang-7 ~]# systemctl start haproxy
[root@Tang-7 ~]# ss -tnl
State       Recv-Q Send-Q                  Local Address:Port                                 Peer Address:Port              
LISTEN      0      128                                 *:80                                              *:*                  
LISTEN      0      128                                 *:22                                              *:*                  
LISTEN      0      100                         127.0.0.1:25                                              *:*                  
LISTEN      0      128                                :::22                                             :::*                  
LISTEN      0      100                               ::1:25                                             :::*                  

6、用户进行访问

6.1 正常状态下进行页面访问

[root@Tang-8 ~]# ipinfo 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.9  netmask 255.255.255.0  broadcast 192.168.1.255
--
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
[root@Tang-8 ~]# for i in {1..6}; do curl http://192.168.1.99; done
<h1>The web server 192.168.10.12</h1>
<h1>The web server 192.168.10.13</h1>
<h1>The web server 192.168.10.12</h1>
<h1>The web server 192.168.10.13</h1>
<h1>The web server 192.168.10.12</h1>
<h1>The web server 192.168.10.13</h1>

6.2 HAProxy-1 的 Keepalive 故障,此时进行页面访问

6.2.1 HAProxy-1

[root@Tang-7 ~]# ipinfo 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.10  netmask 255.255.255.0  broadcast 192.168.1.255
--
ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.99  netmask 255.255.255.0  broadcast 0.0.0.0
--
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.10  netmask 255.255.255.0  broadcast 192.168.10.255
--
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
[root@Tang-7 ~]# systemctl status keepalived
● keepalived.service - LVS and VRRP High Availability Monitor
   Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
   Active: active (running) since Sun 2019-11-10 18:09:11 CST; 57min ago
[root@Tang-7 ~]# systemctl stop keepalived
[root@Tang-7 ~]# systemctl status keepalived
● keepalived.service - LVS and VRRP High Availability Monitor
   Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
[root@Tang-7 ~]# ipinfo 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.10  netmask 255.255.255.0  broadcast 192.168.1.255
--
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.10  netmask 255.255.255.0  broadcast 192.168.10.255
--
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0

6.2.2 HAProxy-2

[root@Tang-6 ~]# ipinfo 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.11  netmask 255.255.255.0  broadcast 192.168.1.255
--
ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.99  netmask 255.255.255.0  broadcast 0.0.0.0
--
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.11  netmask 255.255.255.0  broadcast 192.168.10.255
--
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0

6.2.3 进行访问

[root@Tang-8 ~]# ipinfo 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.9  netmask 255.255.255.0  broadcast 192.168.1.255
--
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
[root@Tang-8 ~]# for i in {1..6}; do curl http://192.168.1.99; done
<h1>The web server 192.168.10.12</h1>
<h1>The web server 192.168.10.13</h1>
<h1>The web server 192.168.10.12</h1>
<h1>The web server 192.168.10.13</h1>
<h1>The web server 192.168.10.12</h1>
<h1>The web server 192.168.10.13</h1>
发布了158 篇原创文章 · 获赞 7 · 访问量 9750

猜你喜欢

转载自blog.csdn.net/weixin_44983653/article/details/103000837