keepalived產生腦裂的原因與解決方法及檢測腳本

腦裂產生的原因

一般來說,裂腦的發生,有以下幾種原因:
高可用服務器對之間心跳線鏈路發生故障,導致無法正常通信。
因心跳線壞了(包括斷了,老化)。
因網卡及相關驅動壞了,ip配置及衝突問題(網卡直連)。
因心跳線間連接的設備故障(網卡及交換機)。
因仲裁的機器出問題(採用仲裁的方案)。
高可用服務器上開啓了 iptables防火牆阻擋了心跳消息傳輸。
高可用服務器上心跳網卡地址等信息配置不正確,導致發送心跳失敗。
其他服務配置不當等原因,如心跳方式不同,心跳廣插衝突、軟件Bug等。
Keepalived配置裏同一 VRRP實例如果 virtual_router_id兩端參數配置不一致也會導致裂腦問題發生。

常見的解決方案

在實際生產環境中,我們可以從以下幾個方面來防止裂腦問題的發生:
同時使用串行電纜和以太網電纜連接,同時用兩條心跳線路,這樣一條線路壞了,另一個還是好的,依然能傳送心跳消息。
當檢測到裂腦時強行關閉一個心跳節點(這個功能需特殊設備支持,如Stonith、feyce)。相當於備節點接收不到心跳消患,通過單獨的線路發送關機命令關閉主節點的電源。
做好對裂腦的監控報警(如郵件及手機短信等或值班).在問題發生時人爲第一時間介入仲裁,降低損失。例如,百度的監控報警短倍就有上行和下行的區別。報警消息發送到管理員手機上,管理員可以通過手機回覆對應數字或簡單的字符串操作返回給服務器.讓服務器根據指令自動處理相應故障,這樣解決故障的時間更短.
當然,在實施高可用方案時,要根據業務實際需求確定是否能容忍這樣的損失。對於一般的網站常規業務.這個損失是可容忍的。

檢測keepalived腦裂的腳本

#!/bin/bash
# 檢查腦裂的腳本,在備節點上進行部署
LB01_VIP=10.10.10.229
LB01_IP=10.10.10.129
LB02_IP=10.10.10.130
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 "ha is brain."
    else
        echo "ha is ok"
    fi
    sleep 5
done
執行結果如下:
[root@mysql-master mysqlbackup]# bash check_split_brain.sh 
ha is ok
ha is ok
ha is ok
ha is ok
當發現異常時候的執行結果:
[root@mysql-master mysqlbackup]# bash check_split_brain.sh 
ha is ok
ha is ok
ha is ok
ha is ok
ha is brain.
ha is brain.

說明:可以將此腳本與監控平臺進行結合(比如zabbix以及nagios等)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章