负载均衡服务器(Haproxy、Nginx和LVS等)能够实现后端服务器集群的负载均衡和高可用性,但本身也存在着单点故障的问题。通过Keepalived搭建负载均衡集群,可以实现负载均衡服务器的高可用,并且集群作为一个整体对外提供唯一的访问入口。
一、架构
系统由高可用负载均衡集群、Web应用服务器集群组成:
- 高可用负载均衡集群:包括一台主节点和至少一台备用节点,主节点和备用节点安装的软件一致(Haproxy和Keepalived)。Haproxy实现负载均衡和可用性;Keepalived实现集群中各节点的高可用并提供唯一的Web访问入口。
- Web应用服务器集群:由多台Web服务器组成,每台服务器都部署了Web服务(httpd+php)、数据库服务(MariaDB)和应用系统(Discuz社区平台)。
二、软硬件环境
节点 | 功能 | 操作系统 | IP | 软件 |
haproxy1 keepalived master | 负载均衡、高可用 | CentOS7.9 | VIP:10.0.80.10 外网:10.0.80.11/24 内网:192.168.80.11/24 | CentOS7.9安装光盘自带的haproxy(1.5.18) CentOS7.9安装光盘自带的keepalived(1.3.5) |
haproxy2 keepalived backup | 负载均衡、高可用 | CentOS7.9 | VIP:10.0.80.10 外网:10.0.80.12/24 内网:192.168.80.12/24 | 同上 |
web001 | web服务器(LAMP架构) | CentOS7.9 | 192.168.80.21/24 | CentOS7.9安装光盘自带的Apache(httpd 2.4.6)、mariadb(5.5.68)和PHP(5.4.16);Discuz_X3.4_SC_UTF8_20220518 |
web002 | web服务器(LAMP架构) | CentOS7.9 | 192.168.80.22/24 | 同上 |
Client | 客户端浏览器 | 任意 | 10.0.80.200/24 | 浏览器 |
三、实施
1、各台服务器环境配置
- 主备节点要双网卡
- 配置IP、修改计算机名
- 关闭防火墙
- 关闭selinux
- 配置本地yum源
2、Web服务器群集部署
- 参考“LAMP架构+Discuz应用部署”完成各台web服务器搭建(各台服务器除了ip不一样,其他配置一样)。
- web001服务器
[root@web001 ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:49:b6:e6 brd ff:ff:ff:ff:ff:ff inet 192.168.80.21/24 brd 192.168.80.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet6 fe80::4683:ecd5:224:574f/64 scope link noprefixroute valid_lft forever preferred_lft forever |
- web002服务器
[root@web002 ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:e6:d8:32 brd ff:ff:ff:ff:ff:ff inet 192.168.80.22/24 brd 192.168.80.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet6 fe80::4683:ecd5:224:574f/64 scope link noprefixroute valid_lft forever preferred_lft forever |
3、Haproxy负载均衡群集部署
- 参考“Haproxy负载均衡部署”完成各台Haproxy服务器搭建(各台服务器除了ip不一样,其他配置一样)。
- Haproxy1服务器
[root@haproxy1 ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:d4:70:71 brd ff:ff:ff:ff:ff:ff inet 192.168.80.11/24 brd 192.168.80.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet6 fe80::2e31:800b:3fff:57f/64 scope link tentative noprefixroute dadfailed valid_lft forever preferred_lft forever inet6 fe80::e7b0:65ff:ba8e:3764/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:d4:70:7b brd ff:ff:ff:ff:ff:ff inet 10.0.80.11/24 brd 10.0.80.255 scope global noprefixroute ens37 valid_lft forever preferred_lft forever inet6 fe80::9fc6:5ef7:735e:964b/64 scope link tentative noprefixroute dadfailed valid_lft forever preferred_lft forever inet6 fe80::e2e1:605d:ebfb:f457/64 scope link noprefixroute valid_lft forever preferred_lft forever |
- Haproxy2服务器
[root@haproxy2 ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:74:67:3c brd ff:ff:ff:ff:ff:ff inet 192.168.80.12/24 brd 192.168.80.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet6 fe80::2e31:800b:3fff:57f/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:74:67:46 brd ff:ff:ff:ff:ff:ff inet 10.0.80.12/24 brd 10.0.80.255 scope global noprefixroute ens37 valid_lft forever preferred_lft forever inet6 fe80::9fc6:5ef7:735e:964b/64 scope link noprefixroute valid_lft forever preferred_lft forever |
4、Keepalived部署
- 在Haproxy1上部署keepalived master;在Haproxy2上部署keepalived backup。
- keepalived master部署
[root@haproxy1 ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:d4:70:71 brd ff:ff:ff:ff:ff:ff inet 192.168.80.11/24 brd 192.168.80.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet6 fe80::2e31:800b:3fff:57f/64 scope link tentative noprefixroute dadfailed valid_lft forever preferred_lft forever inet6 fe80::e7b0:65ff:ba8e:3764/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:d4:70:7b brd ff:ff:ff:ff:ff:ff inet 10.0.80.11/24 brd 10.0.80.255 scope global noprefixroute ens37 valid_lft forever preferred_lft forever inet6 fe80::9fc6:5ef7:735e:964b/64 scope link tentative noprefixroute dadfailed valid_lft forever preferred_lft forever inet6 fe80::e2e1:605d:ebfb:f457/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@haproxy1 ~]# mount /dev/sr0 /opt/centos/ mount: /dev/sr0 is write-protected, mounting read-only [root@haproxy1 ~]# yum install -y keepalived Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile centos | 3.6 kB 00:00:00 Resolving Dependencies --> Running transaction check ---> Package keepalived.x86_64 0:1.3.5-19.el7 will be installed --> Processing Dependency: libnetsnmpmibs.so.31()(64bit) for package: keepalived-1.3.5-19.el7.x86_64 。。。。。。 keepalived.x86_64 0:1.3.5-19.el7 Dependency Installed: lm_sensors-libs.x86_64 0:3.4.0-8.20160601gitf9185e5.el7 net-snmp-agent-libs.x86_64 1:5.7.2-49.el7 net-snmp-libs.x86_64 1:5.7.2-49.el7 perl.x86_64 4:5.16.3-297.el7 perl-Carp.noarch 0:1.26-244.el7 perl-Encode.x86_64 0:2.51-7.el7 perl-Exporter.noarch 0:5.68-3.el7 perl-File-Path.noarch 0:2.09-2.el7 perl-File-Temp.noarch 0:0.23.01-3.el7 perl-Filter.x86_64 0:1.49-3.el7 perl-Getopt-Long.noarch 0:2.40-3.el7 perl-HTTP-Tiny.noarch 0:0.033-3.el7 perl-PathTools.x86_64 0:3.40-5.el7 perl-Pod-Escapes.noarch 1:1.04-297.el7 perl-Pod-Perldoc.noarch 0:3.20-4.el7 perl-Pod-Simple.noarch 1:3.28-4.el7 perl-Pod-Usage.noarch 0:1.63-3.el7 perl-Scalar-List-Utils.x86_64 0:1.27-248.el7 perl-Socket.x86_64 0:2.010-5.el7 perl-Storable.x86_64 0:2.45-3.el7 perl-Text-ParseWords.noarch 0:3.29-4.el7 perl-Time-HiRes.x86_64 4:1.9725-3.el7 perl-Time-Local.noarch 0:1.2300-2.el7 perl-constant.noarch 0:1.27-2.el7 perl-libs.x86_64 4:5.16.3-297.el7 perl-macros.x86_64 4:5.16.3-297.el7 perl-parent.noarch 1:0.225-244.el7 perl-podlators.noarch 0:2.5.1-3.el7 perl-threads.x86_64 0:1.87-4.el7 perl-threads-shared.x86_64 0:1.43-6.el7 Complete! [root@haproxy1 ~]# rpm -qi keepalived Name : keepalived Version : 1.3.5 Release : 19.el7 Architecture: x86_64 Install Date: Thu 25 Aug 2022 10:19:54 PM CST Group : System Environment/Daemons Size : 1023403 License : GPLv2+ Signature : RSA/SHA256, Thu 15 Oct 2020 02:52:16 AM CST, Key ID 24c6a8a7f4a80eb5 Source RPM : keepalived-1.3.5-19.el7.src.rpm Build Date : Thu 01 Oct 2020 12:40:03 AM CST Build Host : x86-02.bsys.centos.org Relocations : (not relocatable) Packager : CentOS BuildSystem <http://bugs.centos.org> Vendor : CentOS URL : Keepalived for Linux Summary : Load balancer and high availability service Description : Keepalived provides simple and robust facilities for load balancing and high availability. The load balancing framework relies on the well-known and widely used Linux Virtual Server (IPVS) kernel module providing layer-4 (transport layer) load balancing. Keepalived implements a set of checkers to dynamically and adaptively maintain and manage a load balanced server pool according their health. Keepalived also implements the Virtual Router Redundancy Protocol (VRRPv2) to achieve high availability with director failover. #修改keepalived配置文件 [root@haproxy1 ~]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL vrrp_skip_check_adv_addr #vrrp_strict #严格遵守VRRP协议 vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_instance VI_1 { state MASTER interface ens37 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.80.10 } } [root@haproxy1 ~]# systemctl start keepalived && systemctl enable keepalived Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service. [root@haproxy1 ~]# systemctl status keepalived ● keepalived.service - LVS and VRRP High Availability Monitor Loaded: loaded (/usr/lib/systemd/system/keepalived.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2022-08-25 22:24:02 CST; 14s ago Main PID: 1861 (keepalived) CGroup: /system.slice/keepalived.service ├─1861 /usr/sbin/keepalived -D ├─1862 /usr/sbin/keepalived -D └─1863 /usr/sbin/keepalived -D Aug 25 22:24:04 haproxy1 Keepalived_vrrp[1863]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:24:04 haproxy1 Keepalived_vrrp[1863]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:24:04 haproxy1 Keepalived_vrrp[1863]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:24:04 haproxy1 Keepalived_vrrp[1863]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:24:09 haproxy1 Keepalived_vrrp[1863]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:24:09 haproxy1 Keepalived_vrrp[1863]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens37 for 10.0.80.10 Aug 25 22:24:09 haproxy1 Keepalived_vrrp[1863]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:24:09 haproxy1 Keepalived_vrrp[1863]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:24:09 haproxy1 Keepalived_vrrp[1863]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:24:09 haproxy1 Keepalived_vrrp[1863]: Sending gratuitous ARP on ens37 for 10.0.80.10 [root@haproxy1 ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:d4:70:71 brd ff:ff:ff:ff:ff:ff inet 192.168.80.11/24 brd 192.168.80.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet6 fe80::2e31:800b:3fff:57f/64 scope link tentative noprefixroute dadfailed valid_lft forever preferred_lft forever inet6 fe80::e7b0:65ff:ba8e:3764/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:d4:70:7b brd ff:ff:ff:ff:ff:ff inet 10.0.80.11/24 brd 10.0.80.255 scope global noprefixroute ens37 valid_lft forever preferred_lft forever inet 10.0.80.10/32 scope global ens37 valid_lft forever preferred_lft forever inet6 fe80::9fc6:5ef7:735e:964b/64 scope link tentative noprefixroute dadfailed valid_lft forever preferred_lft forever inet6 fe80::e2e1:605d:ebfb:f457/64 scope link noprefixroute valid_lft forever preferred_lft forever |
- keepalived backup部署
[root@haproxy2 ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:74:67:3c brd ff:ff:ff:ff:ff:ff inet 192.168.80.12/24 brd 192.168.80.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet6 fe80::2e31:800b:3fff:57f/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:74:67:46 brd ff:ff:ff:ff:ff:ff inet 10.0.80.12/24 brd 10.0.80.255 scope global noprefixroute ens37 valid_lft forever preferred_lft forever inet6 fe80::9fc6:5ef7:735e:964b/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@haproxy2 ~]# mount /dev/sr0 /opt/centos/ mount: /dev/sr0 is write-protected, mounting read-only [root@haproxy2 ~]# yum install -y keepalived Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile centos | 3.6 kB 00:00:00 Resolving Dependencies --> Running transaction check ---> Package keepalived.x86_64 0:1.3.5-19.el7 will be installed --> Processing Dependency: libnetsnmpmibs.so.31()(64bit) for package: keepalived-1.3.5-19.el7.x86_64 。。。。。。 Installed: keepalived.x86_64 0:1.3.5-19.el7 Dependency Installed: lm_sensors-libs.x86_64 0:3.4.0-8.20160601gitf9185e5.el7 net-snmp-agent-libs.x86_64 1:5.7.2-49.el7 net-snmp-libs.x86_64 1:5.7.2-49.el7 perl.x86_64 4:5.16.3-297.el7 perl-Carp.noarch 0:1.26-244.el7 perl-Encode.x86_64 0:2.51-7.el7 perl-Exporter.noarch 0:5.68-3.el7 perl-File-Path.noarch 0:2.09-2.el7 perl-File-Temp.noarch 0:0.23.01-3.el7 perl-Filter.x86_64 0:1.49-3.el7 perl-Getopt-Long.noarch 0:2.40-3.el7 perl-HTTP-Tiny.noarch 0:0.033-3.el7 perl-PathTools.x86_64 0:3.40-5.el7 perl-Pod-Escapes.noarch 1:1.04-297.el7 perl-Pod-Perldoc.noarch 0:3.20-4.el7 perl-Pod-Simple.noarch 1:3.28-4.el7 perl-Pod-Usage.noarch 0:1.63-3.el7 perl-Scalar-List-Utils.x86_64 0:1.27-248.el7 perl-Socket.x86_64 0:2.010-5.el7 perl-Storable.x86_64 0:2.45-3.el7 perl-Text-ParseWords.noarch 0:3.29-4.el7 perl-Time-HiRes.x86_64 4:1.9725-3.el7 perl-Time-Local.noarch 0:1.2300-2.el7 perl-constant.noarch 0:1.27-2.el7 perl-libs.x86_64 4:5.16.3-297.el7 perl-macros.x86_64 4:5.16.3-297.el7 perl-parent.noarch 1:0.225-244.el7 perl-podlators.noarch 0:2.5.1-3.el7 perl-threads.x86_64 0:1.87-4.el7 perl-threads-shared.x86_64 0:1.43-6.el7 Complete! #备用节点keepalived配置 [root@haproxy2 ~]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL vrrp_skip_check_adv_addr #vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_instance VI_1 { state BACKUP interface ens37 virtual_router_id 51 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.80.10 } } [root@haproxy2 ~]# systemctl start keepalived && systemctl enable keepalived Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service. [root@haproxy2 ~]# systemctl status keepalived ● keepalived.service - LVS and VRRP High Availability Monitor Loaded: loaded (/usr/lib/systemd/system/keepalived.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2022-08-25 22:37:28 CST; 10s ago Main PID: 1740 (keepalived) CGroup: /system.slice/keepalived.service ├─1740 /usr/sbin/keepalived -D ├─1741 /usr/sbin/keepalived -D └─1742 /usr/sbin/keepalived -D Aug 25 22:37:28 haproxy2 Keepalived[1740]: Starting VRRP child process, pid=1742 Aug 25 22:37:28 haproxy2 Keepalived_vrrp[1742]: Registering Kernel netlink reflector Aug 25 22:37:28 haproxy2 Keepalived_vrrp[1742]: Registering Kernel netlink command channel Aug 25 22:37:28 haproxy2 Keepalived_vrrp[1742]: Registering gratuitous ARP shared channel Aug 25 22:37:28 haproxy2 Keepalived_vrrp[1742]: Opening file '/etc/keepalived/keepalived.conf'. Aug 25 22:37:28 haproxy2 Keepalived_vrrp[1742]: VRRP_Instance(VI_1) removing protocol VIPs. Aug 25 22:37:28 haproxy2 Keepalived_vrrp[1742]: Using LinkWatch kernel netlink reflector... Aug 25 22:37:28 haproxy2 Keepalived_vrrp[1742]: VRRP_Instance(VI_1) Entering BACKUP STATE Aug 25 22:37:28 haproxy2 Keepalived_vrrp[1742]: VRRP sockpool: [ifindex(3), proto(112), unicast(0), fd(10,11)] Aug 25 22:37:28 haproxy2 Keepalived_healthcheckers[1741]: Opening file '/etc/keepalived/keepalived.conf'. [root@haproxy2 ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:74:67:3c brd ff:ff:ff:ff:ff:ff inet 192.168.80.12/24 brd 192.168.80.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet6 fe80::2e31:800b:3fff:57f/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:74:67:46 brd ff:ff:ff:ff:ff:ff inet 10.0.80.12/24 brd 10.0.80.255 scope global noprefixroute ens37 valid_lft forever preferred_lft forever inet6 fe80::9fc6:5ef7:735e:964b/64 scope link noprefixroute valid_lft forever preferred_lft forever |
5、运行测试
#高可用测试:把haproxy1的网卡ens37设置为故障! #haproxy1 [root@haproxy1 ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:d4:70:71 brd ff:ff:ff:ff:ff:ff inet 192.168.80.11/24 brd 192.168.80.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet6 fe80::2e31:800b:3fff:57f/64 scope link tentative noprefixroute dadfailed valid_lft forever preferred_lft forever inet6 fe80::e7b0:65ff:ba8e:3764/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: ens37: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000 link/ether 00:0c:29:d4:70:7b brd ff:ff:ff:ff:ff:ff inet 10.0.80.11/24 brd 10.0.80.255 scope global noprefixroute ens37 valid_lft forever preferred_lft forever inet6 fe80::9fc6:5ef7:735e:964b/64 scope link tentative noprefixroute dadfailed valid_lft forever preferred_lft forever inet6 fe80::e2e1:605d:ebfb:f457/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@haproxy1 ~]# systemctl status keepalived ● keepalived.service - LVS and VRRP High Availability Monitor Loaded: loaded (/usr/lib/systemd/system/keepalived.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2022-08-25 22:24:02 CST; 16min ago Main PID: 1861 (keepalived) CGroup: /system.slice/keepalived.service ├─1861 /usr/sbin/keepalived -D ├─1862 /usr/sbin/keepalived -D └─1863 /usr/sbin/keepalived -D Aug 25 22:24:09 haproxy1 Keepalived_vrrp[1863]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:24:09 haproxy1 Keepalived_vrrp[1863]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens37 for 10.0.80.10 Aug 25 22:24:09 haproxy1 Keepalived_vrrp[1863]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:24:09 haproxy1 Keepalived_vrrp[1863]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:24:09 haproxy1 Keepalived_vrrp[1863]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:24:09 haproxy1 Keepalived_vrrp[1863]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:40:01 haproxy1 Keepalived_vrrp[1863]: Kernel is reporting: interface ens37 DOWN Aug 25 22:40:01 haproxy1 Keepalived_vrrp[1863]: VRRP_Instance(VI_1) Entering FAULT STATE Aug 25 22:40:01 haproxy1 Keepalived_vrrp[1863]: VRRP_Instance(VI_1) removing protocol VIPs. Aug 25 22:40:01 haproxy1 Keepalived_vrrp[1863]: VRRP_Instance(VI_1) Now in FAULT state #Haproxy2 [root@haproxy2 ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:74:67:3c brd ff:ff:ff:ff:ff:ff inet 192.168.80.12/24 brd 192.168.80.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet6 fe80::2e31:800b:3fff:57f/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:74:67:46 brd ff:ff:ff:ff:ff:ff inet 10.0.80.12/24 brd 10.0.80.255 scope global noprefixroute ens37 valid_lft forever preferred_lft forever inet 10.0.80.10/32 scope global ens37 valid_lft forever preferred_lft forever inet6 fe80::9fc6:5ef7:735e:964b/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@haproxy2 ~]# systemctl status keepalived ● keepalived.service - LVS and VRRP High Availability Monitor Loaded: loaded (/usr/lib/systemd/system/keepalived.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2022-08-25 22:37:28 CST; 2min 59s ago Main PID: 1740 (keepalived) CGroup: /system.slice/keepalived.service ├─1740 /usr/sbin/keepalived -D ├─1741 /usr/sbin/keepalived -D └─1742 /usr/sbin/keepalived -D Aug 25 22:40:04 haproxy2 Keepalived_vrrp[1742]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:40:04 haproxy2 Keepalived_vrrp[1742]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:40:04 haproxy2 Keepalived_vrrp[1742]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:40:04 haproxy2 Keepalived_vrrp[1742]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:40:09 haproxy2 Keepalived_vrrp[1742]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:40:09 haproxy2 Keepalived_vrrp[1742]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens37 for 10.0.80.10 Aug 25 22:40:09 haproxy2 Keepalived_vrrp[1742]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:40:09 haproxy2 Keepalived_vrrp[1742]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:40:09 haproxy2 Keepalived_vrrp[1742]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:40:09 haproxy2 Keepalived_vrrp[1742]: Sending gratuitous ARP on ens37 for 10.0.80.10 #网站正常访问 #Haproxy1网卡ens37故障修复 #Haproxy1 [root@haproxy1 ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:d4:70:71 brd ff:ff:ff:ff:ff:ff inet 192.168.80.11/24 brd 192.168.80.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet6 fe80::2e31:800b:3fff:57f/64 scope link tentative noprefixroute dadfailed valid_lft forever preferred_lft forever inet6 fe80::e7b0:65ff:ba8e:3764/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:d4:70:7b brd ff:ff:ff:ff:ff:ff inet 10.0.80.11/24 brd 10.0.80.255 scope global noprefixroute ens37 valid_lft forever preferred_lft forever inet 10.0.80.10/32 scope global ens37 valid_lft forever preferred_lft forever inet6 fe80::9fc6:5ef7:735e:964b/64 scope link tentative noprefixroute dadfailed valid_lft forever preferred_lft forever inet6 fe80::e2e1:605d:ebfb:f457/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@haproxy1 ~]# systemctl status keepalived ● keepalived.service - LVS and VRRP High Availability Monitor Loaded: loaded (/usr/lib/systemd/system/keepalived.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2022-08-25 22:24:02 CST; 21min ago Main PID: 1861 (keepalived) CGroup: /system.slice/keepalived.service ├─1861 /usr/sbin/keepalived -D ├─1862 /usr/sbin/keepalived -D └─1863 /usr/sbin/keepalived -D Aug 25 22:45:42 haproxy1 Keepalived_vrrp[1863]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:45:42 haproxy1 Keepalived_vrrp[1863]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:45:42 haproxy1 Keepalived_vrrp[1863]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:45:42 haproxy1 Keepalived_vrrp[1863]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:45:47 haproxy1 Keepalived_vrrp[1863]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:45:47 haproxy1 Keepalived_vrrp[1863]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens37 for 10.0.80.10 Aug 25 22:45:47 haproxy1 Keepalived_vrrp[1863]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:45:47 haproxy1 Keepalived_vrrp[1863]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:45:47 haproxy1 Keepalived_vrrp[1863]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:45:47 haproxy1 Keepalived_vrrp[1863]: Sending gratuitous ARP on ens37 for 10.0.80.10 #Haproxy2 [root@haproxy2 ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:74:67:3c brd ff:ff:ff:ff:ff:ff inet 192.168.80.12/24 brd 192.168.80.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet6 fe80::2e31:800b:3fff:57f/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:74:67:46 brd ff:ff:ff:ff:ff:ff inet 10.0.80.12/24 brd 10.0.80.255 scope global noprefixroute ens37 valid_lft forever preferred_lft forever inet6 fe80::9fc6:5ef7:735e:964b/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@haproxy2 ~]# systemctl status keepalived ● keepalived.service - LVS and VRRP High Availability Monitor Loaded: loaded (/usr/lib/systemd/system/keepalived.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2022-08-25 22:37:28 CST; 8min ago Main PID: 1740 (keepalived) CGroup: /system.slice/keepalived.service ├─1740 /usr/sbin/keepalived -D ├─1741 /usr/sbin/keepalived -D └─1742 /usr/sbin/keepalived -D Aug 25 22:40:04 haproxy2 Keepalived_vrrp[1742]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:40:09 haproxy2 Keepalived_vrrp[1742]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:40:09 haproxy2 Keepalived_vrrp[1742]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens37 for 10.0.80.10 Aug 25 22:40:09 haproxy2 Keepalived_vrrp[1742]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:40:09 haproxy2 Keepalived_vrrp[1742]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:40:09 haproxy2 Keepalived_vrrp[1742]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:40:09 haproxy2 Keepalived_vrrp[1742]: Sending gratuitous ARP on ens37 for 10.0.80.10 Aug 25 22:45:41 haproxy2 Keepalived_vrrp[1742]: VRRP_Instance(VI_1) Received advert with higher priority 100, ours 90 Aug 25 22:45:41 haproxy2 Keepalived_vrrp[1742]: VRRP_Instance(VI_1) Entering BACKUP STATE Aug 25 22:45:41 haproxy2 Keepalived_vrrp[1742]: VRRP_Instance(VI_1) removing protocol VIPs. |