HAProxy + Keepalive 实现网站高可用
1、相关博客链接
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>