实验环境:
- 主机A:操作系统CentOS 7.6.1810,IP地址192.168.0.88,Keepalived版本2.0.12
- 主机B:操作系统CentOS 7.6.1810,IP地址192.168.0.110,Keepalived版本2.0.12
两台主机均运行Apache提供Web服务;VIP为192.168.0.5。
首先确认两台主机的Apache服务是否正常:
访问http://192.168.0.88
1、不设置不抢占模式
配置两台主机上的Keepalived,配置文件如下:
主机A
! Configuration File for keepalived global_defs { notification_email { 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_script check_httpd { script "/usr/bin/killall -0 httpd" interval 2 fall 2 rise 2 } vrrp_instance HTTPD { state MASTER interface ens160 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass aaaa } virtual_ipaddress { 192.168.0.5/24 } track_script { check_httpd } }
这里没有设置不抢占模式,且没有配置邮件发送功能。
主机B
主机B的配置文件大部分同主机A,仅有其中的state和priority与主机A不同
! Configuration File for keepalived global_defs { notification_email { 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_script check_httpd { script "/usr/bin/killall -0 httpd" interval 2 fall 2 rise 2 } vrrp_instance HTTPD { state BACKUP interface ens160 virtual_router_id 51 priority 80 advert_int 1 authentication { auth_type PASS auth_pass aaaa } virtual_ipaddress { 192.168.0.5/24 } track_script { check_httpd } }
配置完成Keepalived后启动Keepalived,在主机A上通过ip addr命令可以查看到VIP已经绑定到主机A上:
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:c0:e8:97 brd ff:ff:ff:ff:ff:ff inet 192.168.0.88/24 brd 192.168.0.255 scope global noprefixroute dynamic ens160 valid_lft 54444sec preferred_lft 54444sec inet 192.168.0.5/24 scope global secondary ens160 valid_lft forever preferred_lft forever inet6 fe80::ec4e:853a:570d:bf79/64 scope link noprefixroute valid_lft forever preferred_lft forever
此时访问http://192.168.0.5
实际访问的是主机A提供的Web服务。
停止主机A的Apache服务,查看是否发生主备切换:
主机A上执行ip addr命令
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:c0:e8:97 brd ff:ff:ff:ff:ff:ff inet 192.168.0.88/24 brd 192.168.0.255 scope global noprefixroute dynamic ens160 valid_lft 54183sec preferred_lft 54183sec inet6 fe80::ec4e:853a:570d:bf79/64 scope link noprefixroute valid_lft forever preferred_lft forever
可以看到VIP已经在主机A上解绑。在主机B上执行ip addr命令
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:80:6a:31 brd ff:ff:ff:ff:ff:ff inet 192.168.0.110/24 brd 192.168.0.255 scope global noprefixroute dynamic ens160 valid_lft 76521sec preferred_lft 76521sec inet 192.168.0.5/24 scope global secondary ens160 valid_lft forever preferred_lft forever inet6 fe80::91ad:f9d8:5386:ba92/64 scope link noprefixroute valid_lft forever preferred_lft forever
可以看到VIP已经绑定到了主机B上,此时访问http://192.168.0.5
已经是主机B在提供Web服务了。
因为这里没有配置不抢占模式,所以此时恢复主机A的Apache服务,查看是否会再次进行主备切换:
在主机A上执行ip addr命令
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:c0:e8:97 brd ff:ff:ff:ff:ff:ff inet 192.168.0.88/24 brd 192.168.0.255 scope global noprefixroute dynamic ens160 valid_lft 53899sec preferred_lft 53899sec inet 192.168.0.5/24 scope global secondary ens160 valid_lft forever preferred_lft forever inet6 fe80::ec4e:853a:570d:bf79/64 scope link noprefixroute valid_lft forever preferred_lft forever
此时VIP又重新绑定到主机A上了,访问http://192.168.0.5
2、设置不抢占模式
不抢占模式仅在优先级高的主机上进行设置,所以主机B上的Keepalived不用进行配置。修改主机A的Keepalived配置文件(仅展示主要部分):
vrrp_instance HTTPD { state BACKUP interface ens160 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass aaaa } virtual_ipaddress { 192.168.0.5/24 } track_script { check_httpd } nopreempt
此时停止主机A上的Apache:
主机A的IP信息
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:c0:e8:97 brd ff:ff:ff:ff:ff:ff inet 192.168.0.88/24 brd 192.168.0.255 scope global noprefixroute dynamic ens160 valid_lft 53418sec preferred_lft 53418sec inet6 fe80::ec4e:853a:570d:bf79/64 scope link noprefixroute valid_lft forever preferred_lft forever
主机B的IP信息
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:80:6a:31 brd ff:ff:ff:ff:ff:ff inet 192.168.0.110/24 brd 192.168.0.255 scope global noprefixroute dynamic ens160 valid_lft 75784sec preferred_lft 75784sec inet 192.168.0.5/24 scope global secondary ens160 valid_lft forever preferred_lft forever inet6 fe80::91ad:f9d8:5386:ba92/64 scope link noprefixroute valid_lft forever preferred_lft forever
访问http://192.168.0.5
从以上信息可以看出,发生了一次主备切换。此时恢复主机A的Apache服务,查看是否会再次发生主备切换:
主机A的IP信息
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:c0:e8:97 brd ff:ff:ff:ff:ff:ff inet 192.168.0.88/24 brd 192.168.0.255 scope global noprefixroute dynamic ens160 valid_lft 53224sec preferred_lft 53224sec inet6 fe80::ec4e:853a:570d:bf79/64 scope link noprefixroute valid_lft forever preferred_lft forever
主机B的IP信息
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:80:6a:31 brd ff:ff:ff:ff:ff:ff inet 192.168.0.110/24 brd 192.168.0.255 scope global noprefixroute dynamic ens160 valid_lft 75618sec preferred_lft 75618sec inet 192.168.0.5/24 scope global secondary ens160 valid_lft forever preferred_lft forever inet6 fe80::91ad:f9d8:5386:ba92/64 scope link noprefixroute valid_lft forever preferred_lft forever
访问http://192.168.0.5
从以上信息可见,在配置了不抢占模式后,在主机A的Apache恢复正常之后主机A并不会再次成为Master,不会再次发生主备切换。