keepalived腦裂問題及解決方案
阿新 • • 發佈:2022-03-27
keepalived腦裂問題及解決方案
1.何為keepalived腦裂
Keepalived的BACKUP主機在收到不MASTER主機報文後就會切換成為master,如果是它們之間的通訊線路出現問題,無法接收到彼此的組播通知,但是兩個節點實際都處於正常工作狀態,這時兩個節點均為master強行繫結虛擬IP,導致不可預料的後果,這就是腦裂。
2.產生原因
1.高可用伺服器對之間心跳線鏈路發生故障,導致無法正常通訊; 2.心跳線線路斷開,老化; 3.網絡卡及相關驅動壞了,ip配置及衝突問題; 4.心跳線間連線的裝置故障; 5.仲裁機器出現問題; 6.其他服務配置不當; 7.vrrp例項名字不一致、優先順序一致; 8.高可用伺服器上開啟了iptables防火牆規則阻擋了心跳訊息傳輸; 9.高可用伺服器上心跳網絡卡地址等資訊配置不正確,導致傳送心跳失敗; 10.Keepalived配置裡同一 VRRP例項如果virtual_router_id兩端引數配置不一致。
3.解決方案
1.當檢測到腦裂時強行關閉一個心跳節點,關閉備用節點的監聽;
2.多節點叢集中,可以通過增加仲裁的機制,確定誰該獲得資源;
3.對腦裂的監控報警,指令碼監測;
檢測思路:正常情況下keepalived的VIP地址是在主節點上的,如果在從節點發現了VIP,就設定報警資訊。指令碼(在從節點上)如下: vim check.sh #!/bin/bash # 檢查腦裂的指令碼,在備節點上進行部署 LB01_VIP=192.168.100.100 LB01_IP=192.168.100.11 LB02_IP=192.168.100.12 #通過狀態資訊,過濾結果,並統計 while true do ping -c 2 -W 3 $LB01_VIP &>/dev/null if [ $? -eq 0 -a `ip add|grep "$LB01_VIP"|wc -l` -eq 1 ];then echo "machine is brain." else echo "machine is ok" fi sleep 5 done