一、切換原理
由於 網絡不穩定造成的切換,主要存在以下網絡變化場景:
(1) 主機網口上的網線松動掉了;
(2) 主機上重啟了網卡服務;
(3) 網絡通信慢,或帶寬被占滿,導致 vrrp 包沒有被備機收到;
(4) 主機的 keepalived 服務被重啟;
(5) 主機服務器被重啟(正常重啟);
(6) 主機服務器被斷電重啟(非正常重啟);
主備機的 keepalived 在網絡不穩定場景下的包交互流程如下圖:

(1) 網卡松動場景下(以下所有示例的 advert_int 均設置為了 30s)
此時 主機的 keepalived 日志為:
Jun 21 15:22:21 ha-slave Keepalived_vrrp[1093]: Netlink reports eno1 down Jun 21 15:22:21 ha-slave Keepalived_vrrp[1093]: (product) Entering FAULT STATE Jun 21 15:22:21 ha-slave Keepalived_vrrp[1093]: (product) sent 0 priority Jun 21 15:22:21 ha-slave Keepalived_vrrp[1093]: (product) removing VIPs. Jun 21 15:22:26 ha-slave Keepalived_vrrp[1093]: Netlink reports eno1 up Jun 21 15:22:26 ha-slave Keepalived_vrrp[1093]: (product) Entering BACKUP STATE
備機的 keepalived 日志為:
Jun 21 15:22:51 ha-master Keepalived_vrrp[126758]: (product) Receive advertisement timeout Jun 21 15:22:51 ha-master Keepalived_vrrp[126758]: (product) Entering MASTER STATE Jun 21 15:22:51 ha-master Keepalived_vrrp[126758]: (product) setting VIPs. Jun 21 15:22:51 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 15:22:51 ha-master Keepalived_vrrp[126758]: (product) Sending/queueing gratuitous ARPs on eno1 for 10.19.125.172 Jun 21 15:22:51 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 15:22:51 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 15:22:51 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 15:22:51 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 15:22:56 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 15:22:56 ha-master Keepalived_vrrp[126758]: (product) Sending/queueing gratuitous ARPs on eno1 for 10.19.125.172 Jun 21 15:22:56 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 15:22:56 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 15:22:56 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 15:22:56 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.172
可以看到流程如下:
a) 主機上 keepalived 服務檢測到服務網卡 down;
b) keepalived vrrp 實例 自主進入 FAULT 狀態;
c) keepalived 發送 優先級為 0 的 vrrp包 (但實際網卡上的網線已經松動了,連不上網,所以此時其實這個包發不出去)
d) keepalived 移除 vip;
e) 網線插好之后, keepalived 會自動進入 backup 狀態;
f) 備機的 keepalived 在 主機 a) 流程開始其實已經接收不到 vrrp包了,只要接收不到 vrrp 包的時間超過 3倍的 advert_int 就會自主轉為 master ,這里是超過 30s ,在 keepalived 日志中可以看到 “Receive advertisement timeout”
以上的轉變過程了,為了准確看 f) 流程,可以在主備機上 抓 vrrp 包查看,命令為 :tcpdump -i 網卡 vrrp -vvv -n
(2) 重啟網卡服務的場景下
此時主機上的 keepalived 日志為:
Jun 21 15:24:58 ha-master Keepalived_vrrp[126758]: Netlink reflector reports IP 10.19.125.172 removed from eno1 Jun 21 15:24:58 ha-master Keepalived_vrrp[126758]: (product) Entering BACKUP STATE Jun 21 15:24:58 ha-master Keepalived_vrrp[126758]: (product) sent 0 priority Jun 21 15:24:58 ha-master Keepalived_vrrp[126758]: (product) removing VIPs. Jun 21 15:24:58 ha-master Keepalived_vrrp[126758]: Netlink reports eno1 down Jun 21 15:24:58 ha-master Keepalived_vrrp[126758]: (product) Entering FAULT STATE Jun 21 15:24:58 ha-master Keepalived_vrrp[126758]: Deassigned address fe80::ea61:ff:fe00:ca1 from interface eno1 Jun 21 15:24:58 ha-master Keepalived_vrrp[126758]: Netlink reports eno1 up Jun 21 15:24:58 ha-master Keepalived_vrrp[126758]: (product) Entering BACKUP STATE Jun 21 15:24:58 ha-master Keepalived_vrrp[126758]: product: sending gratuitous ARP for 10.19.125.28 Jun 21 15:24:58 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.28 Jun 21 15:25:00 ha-master Keepalived_vrrp[126758]: Assigned address fe80::ea61:ff:fe00:ca1 for interface eno1
備機上的 keepalived 日志為:
Jun 21 15:24:58 ha-slave Keepalived_vrrp[1093]: (product) Backup received priority 0 advertisement Jun 21 15:24:59 ha-slave Keepalived_vrrp[1093]: (product) Receive advertisement timeout Jun 21 15:24:59 ha-slave Keepalived_vrrp[1093]: (product) Entering MASTER STATE Jun 21 15:24:59 ha-slave Keepalived_vrrp[1093]: (product) setting VIPs. Jun 21 15:24:59 ha-slave Keepalived_vrrp[1093]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 15:24:59 ha-slave Keepalived_vrrp[1093]: (product) Sending/queueing gratuitous ARPs on eno1 for 10.19.125.172 Jun 21 15:24:59 ha-slave Keepalived_vrrp[1093]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 15:24:59 ha-slave Keepalived_vrrp[1093]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 15:24:59 ha-slave Keepalived_vrrp[1093]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 15:24:59 ha-slave Keepalived_vrrp[1093]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 15:25:04 ha-slave Keepalived_vrrp[1093]: Sending gratuitous ARP on eno1 for 10.19.125.172
可以看到流程如下:
a) 主機 keepalived 首先將 172 這個 VIP 從網卡上移除;
b) 主機 進入 backup 狀態,並發送優先級為 0 的 vrrp 包;
c) 備機 keepalived 可以收到這個優先級為 0 的 vrrp 包(此時主機的網卡還沒有 down,所以這個包還是可以發送出去的); 並立刻進入 master 狀態;
d) 原先主機 網卡 down狀態,keepalived 進入 FAULT 狀態,網卡服務啟動好之后,網卡 up 狀態,keepalived 進入 BACKUP 狀態;接收來自 新 主機的 vrrp 包;
在這里有個極端例子,若是網卡重啟網卡服務,網卡恢復慢,會造成 重啟網卡的 keepalived 從 MASTER --> BACKUP ---> FAULT --> BACKUP ---> MASTER --> BACKUP 的狀態不斷變化,而原先的備機狀態會從 BACKUP ---> MASTER,可以看出原先主機頻繁變化,本案例產生這樣的效果的配置是: 主備均是物理機非虛擬機,且 advert_int 為 1s,小IP是主機,大IP是備機
主機(28)上的 keepalived 日志為:
Jun 21 15:11:29 ha-master Keepalived_vrrp[126758]: Netlink reflector reports IP 10.19.125.172 removed from eno1
Jun 21 15:11:29 ha-master Keepalived_vrrp[126758]: (product) Entering BACKUP STATE
Jun 21 15:11:29 ha-master Keepalived_vrrp[126758]: (product) sent 0 priority
Jun 21 15:11:29 ha-master Keepalived_vrrp[126758]: (product) removing VIPs.
Jun 21 15:11:29 ha-master Keepalived_vrrp[126758]: Netlink reports eno1 down
Jun 21 15:11:29 ha-master Keepalived_vrrp[126758]: (product) Entering FAULT STATE
Jun 21 15:11:29 ha-master Keepalived_vrrp[126758]: Deassigned address fe80::ea61:ff:fe00:ca1 from interface eno1
Jun 21 15:11:30 ha-master Keepalived_vrrp[126758]: Netlink reports eno1 up
Jun 21 15:11:30 ha-master Keepalived_vrrp[126758]: (product) Entering BACKUP STATE
Jun 21 15:11:30 ha-master Keepalived_vrrp[126758]: product: sending gratuitous ARP for 10.19.125.28
Jun 21 15:11:30 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.28
Jun 21 15:11:31 ha-master Keepalived_vrrp[126758]: Assigned address fe80::ea61:ff:fe00:ca1 for interface eno1
Jun 21 15:11:33 ha-master Keepalived_vrrp[126758]: (product) Receive advertisement timeout
Jun 21 15:11:33 ha-master Keepalived_vrrp[126758]: (product) Entering MASTER STATE
Jun 21 15:11:33 ha-master Keepalived_vrrp[126758]: (product) setting VIPs.
Jun 21 15:11:33 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.172
Jun 21 15:11:33 ha-master Keepalived_vrrp[126758]: (product) Sending/queueing gratuitous ARPs on eno1 for 10.19.125.172
Jun 21 15:11:33 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.172
Jun 21 15:11:33 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.172
Jun 21 15:11:33 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.172
Jun 21 15:11:33 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.172
Jun 21 15:11:34 ha-master Keepalived_vrrp[126758]: (product) Master received advert from 10.19.125.173 with same priority 100 but higher IP address than ours
Jun 21 15:11:34 ha-master Keepalived_vrrp[126758]: (product) Entering BACKUP STATE
Jun 21 15:11:34 ha-master Keepalived_vrrp[126758]: (product) removing VIPs.
備機(173)上的 keepalived 日志為:
Jun 21 15:11:29 ha-slave Keepalived_vrrp[1093]: (product) Backup received priority 0 advertisement Jun 21 15:11:30 ha-slave Keepalived_vrrp[1093]: (product) Receive advertisement timeout Jun 21 15:11:30 ha-slave Keepalived_vrrp[1093]: (product) Entering MASTER STATE Jun 21 15:11:30 ha-slave Keepalived_vrrp[1093]: (product) setting VIPs. Jun 21 15:11:30 ha-slave Keepalived_vrrp[1093]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 15:11:30 ha-slave Keepalived_vrrp[1093]: (product) Sending/queueing gratuitous ARPs on eno1 for 10.19.125.172 Jun 21 15:11:30 ha-slave Keepalived_vrrp[1093]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 15:11:30 ha-slave Keepalived_vrrp[1093]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 15:11:30 ha-slave Keepalived_vrrp[1093]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 15:11:30 ha-slave Keepalived_vrrp[1093]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 15:11:34 ha-slave Keepalived_vrrp[1093]: (product) Received advert from 10.19.125.28 with lower priority 100, ours 100, forcing new election Jun 21 15:11:34 ha-slave Keepalived_vrrp[1093]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 15:11:34 ha-slave Keepalived_vrrp[1093]: (product) Sending/queueing gratuitous ARPs on eno1 for 10.19.125.172 Jun 21 15:11:34 ha-slave Keepalived_vrrp[1093]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 15:11:34 ha-slave Keepalived_vrrp[1093]: Sending gratuitous ARP on eno1 for 10.19.125.172
通過在備機(173)上 使用命令 tcpdump -i eno1 vrrp -vvv -n 去抓捕整個過程中的 vrrp 包 ,見如下:
15:11:28.412259 IP (tos 0xc0, ttl 255, id 280, offset 0, flags [none], proto VRRP (112), length 40) 10.19.125.28 > 10.19.125.173: vrrp 10.19.125.28 > 10.19.125.173: VRRPv2, Advertisement, vrid 172, prio 100, authtype simple, intvl 1s, length 20, addrs: 10.19.125.172 auth "123456^@^@" 15:11:29.412319 IP (tos 0xc0, ttl 255, id 281, offset 0, flags [none], proto VRRP (112), length 40) 10.19.125.28 > 10.19.125.173: vrrp 10.19.125.28 > 10.19.125.173: VRRPv2, Advertisement, vrid 172, prio 100, authtype simple, intvl 1s, length 20, addrs: 10.19.125.172 auth "123456^@^@" 15:11:29.666703 IP (tos 0xc0, ttl 255, id 282, offset 0, flags [none], proto VRRP (112), length 40) 10.19.125.28 > 10.19.125.173: vrrp 10.19.125.28 > 10.19.125.173: VRRPv2, Advertisement, vrid 172, prio 0, authtype simple, intvl 1s, length 20, addrs: 10.19.125.172 auth "123456^@^@" 15:11:30.276291 IP (tos 0xc0, ttl 255, id 232, offset 0, flags [none], proto VRRP (112), length 40) 10.19.125.173 > 10.19.125.28: vrrp 10.19.125.173 > 10.19.125.28: VRRPv2, Advertisement, vrid 172, prio 100, authtype simple, intvl 1s, length 20, addrs: 10.19.125.172 auth "123456^@^@" 15:11:31.276328 IP (tos 0xc0, ttl 255, id 233, offset 0, flags [none], proto VRRP (112), length 40) 10.19.125.173 > 10.19.125.28: vrrp 10.19.125.173 > 10.19.125.28: VRRPv2, Advertisement, vrid 172, prio 100, authtype simple, intvl 1s, length 20, addrs: 10.19.125.172 auth "123456^@^@" 15:11:32.276370 IP (tos 0xc0, ttl 255, id 234, offset 0, flags [none], proto VRRP (112), length 40) 10.19.125.173 > 10.19.125.28: vrrp 10.19.125.173 > 10.19.125.28: VRRPv2, Advertisement, vrid 172, prio 100, authtype simple, intvl 1s, length 20, addrs: 10.19.125.172 auth "123456^@^@" 15:11:33.276408 IP (tos 0xc0, ttl 255, id 235, offset 0, flags [none], proto VRRP (112), length 40) 10.19.125.173 > 10.19.125.28: vrrp 10.19.125.173 > 10.19.125.28: VRRPv2, Advertisement, vrid 172, prio 100, authtype simple, intvl 1s, length 20, addrs: 10.19.125.172 auth "123456^@^@" 15:11:34.276446 IP (tos 0xc0, ttl 255, id 236, offset 0, flags [none], proto VRRP (112), length 40) 10.19.125.173 > 10.19.125.28: vrrp 10.19.125.173 > 10.19.125.28: VRRPv2, Advertisement, vrid 172, prio 100, authtype simple, intvl 1s, length 20, addrs: 10.19.125.172 auth "123456^@^@" 15:11:34.684150 IP (tos 0xc0, ttl 255, id 283, offset 0, flags [none], proto VRRP (112), length 40) 10.19.125.28 > 10.19.125.173: vrrp 10.19.125.28 > 10.19.125.173: VRRPv2, Advertisement, vrid 172, prio 100, authtype simple, intvl 1s, length 20, addrs: 10.19.125.172 auth "123456^@^@" 15:11:34.684219 IP (tos 0xc0, ttl 255, id 237, offset 0, flags [none], proto VRRP (112), length 40) 10.19.125.173 > 10.19.125.28: vrrp 10.19.125.173 > 10.19.125.28: VRRPv2, Advertisement, vrid 172, prio 100, authtype simple, intvl 1s, length 20, addrs: 10.19.125.172 auth "123456^@^@" 15:11:35.684284 IP (tos 0xc0, ttl 255, id 238, offset 0, flags [none], proto VRRP (112), length 40) 10.19.125.173 > 10.19.125.28: vrrp 10.19.125.173 > 10.19.125.28: VRRPv2, Advertisement, vrid 172, prio 100, authtype simple, intvl 1s, length 20, addrs: 10.19.125.172 auth "123456^@^@" 15:11:36.684319 IP (tos 0xc0, ttl 255, id 239, offset 0, flags [none], proto VRRP (112), length 40) 10.19.125.173 > 10.19.125.28: vrrp 10.19.125.173 > 10.19.125.28: VRRPv2, Advertisement, vrid 172, prio 100, authtype simple, intvl 1s, length 20, addrs: 10.19.125.172 auth "123456^@^@" 15:11:37.684349 IP (tos 0xc0, ttl 255, id 240, offset 0, flags [none], proto VRRP (112), length 40) 10.19.125.173 > 10.19.125.28: vrrp 10.19.125.173 > 10.19.125.28: VRRPv2, Advertisement, vrid 172, prio 100, authtype simple, intvl 1s, length 20, addrs: 10.19.125.172 auth "123456^@^@" 15:11:38.684382 IP (tos 0xc0, ttl 255, id 241, offset 0, flags [none], proto VRRP (112), length 40) 10.19.125.173 > 10.19.125.28: vrrp 10.19.125.173 > 10.19.125.28: VRRPv2, Advertisement, vrid 172, prio 100, authtype simple, intvl 1s, length 20, addrs: 10.19.125.172 auth "123456^@^@"
分析 上面三份資料,可以得到如下流程:
a) 15:11:29.412319 備機收到主機發送的 優先級為 100 的 vrrp 包,此前都是每秒收到一次;
b) Jun 21 15:11:29 28 重啟了網卡,進入 backup 狀態,同時發送了 優先級為 0的 vrrp 包;
c) 備機 (173) 收到了 這個 vrrp 包,時間為 5:11:29.666703 ,並立即在 15:11:30.276291 向 28 發送了優先級為 100 的 vrrp 包;
d) 備機 (173) 在 c) 發送 vrrp 包的同時,進入 master 狀態;后續每隔 1s 都會向 28 發送 優先級為 100 的 vrrp 包;
e) 28 服務器 在網卡服務啟動之后,Jun 21 15:11:30 進入BACUKUP 狀態,但是可能一直過了 3s ,網卡都沒有准備好且收到 來自 173 的 vrrp 包,因此 在 Jun 21 15:11:33 轉為了 master 狀態;
f)現在可以知道 28 和 173 都是 master 了,因此雙方都向對端發送了優先級為 100 的 vrrp 包,28 收到 來自 173 的 vrpp 包之后,判斷 優先級相同情況下,對端 IP 大於自己,因此轉為 BACKUP 狀態;
由上可以看出在網卡啟動恢復過程中若時間超過了 3s ,也就是 超過 3倍 的 advert_int 指定的時間,就會自動轉為 MASTER 狀態,因此 advert_int 還是要設置稍長點,比如 10s.
在腦裂的情況下,及都是 master 的時候,若 vrrp 包優先級相同,則會根據 IP 來決策誰是 MASTER。規則為:IP誰大,誰是 MASTER;
(3) 主機的 keepalived 服務被重啟的場景下
主機 為 173 ,備機為 28,advert_int 為 10,173 和 28 都配置成了 初始狀態為 BACKUP,優先級為 100 ,非搶占式。
此時主機 keepalived 的日志為:
Jun 21 15:26:35 ha-slave Keepalived[1092]: Stopping Jun 21 15:26:35 ha-slave Keepalived_vrrp[1093]: (product) sent 0 priority Jun 21 15:26:35 ha-slave Keepalived_vrrp[1093]: (product) removing VIPs. Jun 21 15:26:36 ha-slave Keepalived_vrrp[1093]: Stopped - used 0.662641 user time, 4.267257 system time Jun 21 15:26:36 ha-slave Keepalived[1092]: Stopped Keepalived v2.0.20 (01/22,2020) Jun 21 15:26:36 ha-slave Keepalived[78393]: Starting Keepalived v2.0.20 (01/22,2020) Jun 21 15:26:36 ha-slave Keepalived[78393]: Running on Linux 3.10.0-1127.18.2.el7.x86_64 #1 SMP Tue Sep 1 11:13:23 EDT 2020 (built for Linux 3.10.0) Jun 21 15:26:36 ha-slave Keepalived[78393]: Command line: '/usr/local/keepalived/keepalived/sbin/keepalived' '-D' '-d' '-S' '0' Jun 21 15:26:36 ha-slave Keepalived[78393]: Opening file '/etc/keepalived/keepalived.conf'. Jun 21 15:26:36 ha-slave Keepalived[78393]: Opening file './conf/keepalived-product.conf'. Jun 21 15:26:36 ha-slave Keepalived[78394]: Starting VRRP child process, pid=78395 Jun 21 15:26:36 ha-slave Keepalived_vrrp[78395]: Registering Kernel netlink reflector Jun 21 15:26:36 ha-slave Keepalived_vrrp[78395]: Registering Kernel netlink command channel Jun 21 15:26:36 ha-slave Keepalived_vrrp[78395]: Opening file '/etc/keepalived/keepalived.conf'. Jun 21 15:26:36 ha-slave Keepalived_vrrp[78395]: Opening file './conf/keepalived-product.conf'. Jun 21 15:26:36 ha-slave Keepalived_vrrp[78395]: WARNING - default user 'keepalived_script' for script execution does not exist - please create. Jun 21 15:26:36 ha-slave Keepalived_vrrp[78395]: Unsafe permissions found for script '/etc/keepalived/product/bin/health_check.sh'. Jun 21 15:26:36 ha-slave Keepalived_vrrp[78395]: SECURITY VIOLATION - scripts are being executed but script_security not enabled. There are insecure scripts. Jun 21 15:26:36 ha-slave Keepalived_vrrp[78395]: Assigned address 10.19.125.173 for interface eno1 Jun 21 15:26:36 ha-slave Keepalived_vrrp[78395]: Assigned address fe80::ea61:ff:fe00:cad for interface eno1 Jun 21 15:26:36 ha-slave Keepalived_vrrp[78395]: Registering gratuitous ARP shared channel Jun 21 15:26:36 ha-slave Keepalived_vrrp[78395]: (product) removing VIPs. Jun 21 15:26:36 ha-slave Keepalived_vrrp[78395]: ------< Global definitions >------ Jun 21 15:26:36 ha-slave Keepalived_vrrp[78395]: Network namespace = (default) 。。。。。。。。。。。。。。 Jun 21 15:26:36 ha-slave Keepalived_vrrp[78395]: Reset promote_secondaries counter 0 Jun 21 15:26:36 ha-slave Keepalived_vrrp[78395]: Tracking VRRP instances = 0 Jun 21 15:26:36 ha-slave Keepalived_vrrp[78395]: (product) Entering BACKUP STATE (init) Jun 21 15:26:36 ha-slave Keepalived_vrrp[78395]: VRRP sockpool: [ifindex(2), family(IPv4), proto(112), unicast(1), fd(11,12)]
備機的 keepalived 的日志為:
Jun 21 15:26:35 ha-master Keepalived_vrrp[126758]: (product) Backup received priority 0 advertisement Jun 21 15:26:35 ha-master Keepalived_vrrp[126758]: (product) Receive advertisement timeout Jun 21 15:26:35 ha-master Keepalived_vrrp[126758]: (product) Entering MASTER STATE Jun 21 15:26:35 ha-master Keepalived_vrrp[126758]: (product) setting VIPs. Jun 21 15:26:35 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 15:26:35 ha-master Keepalived_vrrp[126758]: (product) Sending/queueing gratuitous ARPs on eno1 for 10.19.125.172 Jun 21 15:26:35 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 15:26:35 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 15:26:35 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 15:26:35 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.172
變化流程如下:
a) 主機 keepalived 停止時,在 Jun 21 15:26:35 發送了優先級為 0 的 vrrp 包,並移除了 VIP
b) 備機在 Jun 21 15:26:35 接收到優先級為0的 vrrp 包,立刻轉為了 MASTER 狀態
c) 主機 keepalived 啟動成功之后直接轉為 BACKUP狀態
上面主備的狀態都比較穩定,沒有發生頻繁切換的現象。
(4) 主機服務器被重啟(reboot)場景下
主機 為 173 ,備機為 28,advert_int 為 10,173 和 28 都配置成了 初始狀態為 BACKUP,優先級為 100 ,非搶占式。
此時主機 keepalived 的日志為:
Jun 21 16:54:09 ha-slave Keepalived[945]: Starting Keepalived v2.0.20 (01/22,2020) Jun 21 16:54:09 ha-slave Keepalived[945]: Running on Linux 3.10.0-1127.18.2.el7.x86_64 #1 SMP Tue Sep 1 11:13:23 EDT 2020 (built for Linux 3.10.0) Jun 21 16:54:09 ha-slave Keepalived[945]: Command line: '/usr/local/keepalived/keepalived/sbin/keepalived' '-D' '-d' '-S' '0' Jun 21 16:54:09 ha-slave Keepalived[945]: Opening file '/etc/keepalived/keepalived.conf'. Jun 21 16:54:09 ha-slave Keepalived[945]: Opening file './conf/keepalived-product.conf'. Jun 21 16:54:09 ha-slave Keepalived[1141]: Starting VRRP child process, pid=1142 Jun 21 16:54:09 ha-slave Keepalived_vrrp[1142]: Registering Kernel netlink reflector 。。。。。。。。。。。。。。。。。。。。。。。。 Jun 21 16:54:09 ha-slave Keepalived_vrrp[1142]: Tracking VRRP instances = 0 Jun 21 16:54:09 ha-slave Keepalived_vrrp[1142]: (product) Entering BACKUP STATE (init) Jun 21 16:54:09 ha-slave Keepalived_vrrp[1142]: VRRP sockpool: [ifindex(2), family(IPv4), proto(112), unicast(1), fd(11,12)] Jun 21 16:54:09 ha-slave Keepalived_vrrp[1142]: VRRP_Script(productHealthCheck) succeeded Jun 21 16:54:13 ha-slave Keepalived_vrrp[1142]: Assigned address 10.19.125.173 for interface eno1
備機的 keepalived 的日志為:
Jun 21 16:51:25 ha-master Keepalived_vrrp[126758]: (product) Backup received priority 0 advertisement Jun 21 16:51:26 ha-master Keepalived_vrrp[126758]: (product) Receive advertisement timeout Jun 21 16:51:26 ha-master Keepalived_vrrp[126758]: (product) Entering MASTER STATE Jun 21 16:51:26 ha-master Keepalived_vrrp[126758]: (product) setting VIPs. Jun 21 16:51:26 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 16:51:26 ha-master Keepalived_vrrp[126758]: (product) Sending/queueing gratuitous ARPs on eno1 for 10.19.125.172 Jun 21 16:51:26 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 16:51:26 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 16:51:26 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 16:51:26 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 16:51:31 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 16:51:31 ha-master Keepalived_vrrp[126758]: (product) Sending/queueing gratuitous ARPs on eno1 for 10.19.125.172 Jun 21 16:51:31 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 16:51:31 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 16:51:31 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.172 Jun 21 16:51:31 ha-master Keepalived_vrrp[126758]: Sending gratuitous ARP on eno1 for 10.19.125.172
變化流程如下:
a) 備機在 Jun 21 16:51:25 就收到來自 主機發送的 優先級為 0 的 vrrp 包,因此直接轉為 MASTER狀態,並開始對外發送 vrrp包;
b) 主機在 啟動之后直接進入 BACKUP 狀態,由於在進入該狀態之后 30s 可以收到 vrrp 包,因此保持BACKUP狀態,未作切換了;
