keepalived腦裂解決方案

原創地址:https://blog.csdn.net/wdirdo/article/details/103011816

**

腦裂(split-brain)

**
指在一個高可用(HA)系統中,當聯繫着的兩個節點斷開聯繫時,本來爲一個整體的系統,分裂爲兩個獨立節點,這時兩個節點開始爭搶共享資源,結果會導致系統混亂,數據損壞。
對於無狀態服務的HA,無所謂腦裂不腦裂;但對有狀態服務(比如MySQL)的HA,必須要嚴格防止腦裂。(但有些生產環境下的系統按照無狀態服務HA的那一套去配置有狀態服務,結果可想而知…)

**

keepalived腦裂產生原因

**
①master node和backup node心跳線鏈路發生故障,導致無法正常通信。

②master node和backup node開啓了iptables防火牆阻擋了心跳消息傳輸。

③master node和backup node心跳網卡地址等信息配置不正確,導致發送心跳失敗。

④其他服務配置不當等原因,如心跳方式不同,心跳廣插衝突、軟件Bug等。

⑤Keepalived配置裏同一 VRRP實例如果virtual_router_id兩端參數配置不一致也會導致裂腦問題發生。

**

keepalived腦裂的解決辦法

**
(1)硬件設施網線:

同時使用串行電纜和以太網電纜連接,同時用兩條心跳線路,這樣一條線路壞了,另一個還是好的,依然能傳送心跳消息。
(2)劃分一個專門的VLAN用於master node和backup node發送心跳
在這裏插入圖片描述
**

keepalived腦裂解決方案

**
在備機執行監控,監控腳本如下

#!/bin/bash
#檢查sprit-brain,在備節點執行
#set -x
LB01_VIP=10.110.60.166
LB01_IP=10.110.60.181
LB02_IP=10.110.60.191
#循環VIP是否可用,如果不可用讓備節點啓動VIP地址
while true
do
	ping -c 2 -W 3 $LB01_VIP &> /dev/null
		if [[ $? -eq 0 && `ip add | grep "$LB01_VIP" | wc -l` -eq 1 ]];then 
			echo "=======ha is split-brain========"
			echo "=======TODO 告警,執行備機切換========"
			break
		else
			echo "=======ha is ok========"
		fi
		sleep 5
done



#function ping_test(){
# ping -c 1 -w 3 $1 &>/dev/null
# if [[ $? -eq 0 ]]; then
#  echo $1 "ping 測試success"
# else
#  echo $1 "ping 測試failed"
# fi
#}


#ip_list=(10.110.60.181 10.110.60.192)
#for (( i = 0; i < ${#ip_list[@]}; i++ )); do
# ping_test ${ip_list[i]}
#done
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章