keepalived 學習筆記(二)切換原理(非代碼級別分析)


一、切換原理 

    由於 網絡不穩定造成的切換,主要存在以下網絡變化場景:

(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狀態,未作切換了;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM