萬事皆有因
最近im雲平台也好,社交應用也好,大量的使用ejabberd的廠商湧現出來了。不過所有使用ejabberd廠商可能都會遇到mnesia腦裂的問題。在這裡打算簡單的談談腦裂這個事情。
什麼是腦裂
我在這裡面給個非官方的定義吧。當乙個集群的不同部分在同一時間都認為自己是活動的時候,我們就可以將這個現象稱為腦裂症狀。我們當如何理解這句話呢?
首先我們需要是個集群。
其次當中有業務是master-backup模式或雙星模式。也就是說當主節點掛掉了,備用節點需要接管業務或者是兩個節點直接有資料同步。
其中ejabberd front是不存在router的,只有client manager。而ejabberd back是具有message router 的。那麼我們可以將這個圖簡單的抽象為這樣的:
usera和userb分別將自己的資訊註冊在routera和routerb中。routera和routerb使用資料同步(2pc),來同步資訊。那麼當usera想要向userb傳送乙個訊息的時候,需要現在routera中查詢出usera到userb的訊息路由路徑,然後再交付給相應的路徑進行路由。
當腦裂發生的時候,相當routera和routerb直接的聯絡丟失了,routera認為整個系統中只有它乙個router,routerb也是這樣認為的。那麼相當於routera中沒有userb的資訊,routerb中沒有usera的資訊了,此時usera再傳送訊息給userb的時候,routera會認為userb已經離線了,然後將該資訊進行離線持久化。
說到這裡面估計大家已經明白了腦裂是什麼東西了。
怎麼解決
paxos演算法,使用奇數性質的節點來進行表決,必須選出乙個說的算的老大,這個集群才能正常工作。
雙星模式下,使用專線直連,從硬體上保障。
使用額外的探測節點,當雙方直連斷開之後,使用乙個約定好的共同節點來探測是否是直連故障。
聊聊腦裂問題(split brain)
hdfs 1.0 架構,取自 hadoop the definitive guide namenode單點問題 隨著集群擴充套件,namenode管理檔案元資料存在瓶頸 增加協調者 coordinator 管理一主多從的namenode節點提供高可用的namenode federation聯邦解決方...
mysql腦裂 如何防止HA集群的腦裂
luozhaode 博主這篇有關腦裂的文章是我看到過的理解的最透徹的。真是學習了,不過在實際工作中還是對腦裂存在著疑惑,懇請博主釋疑一下。謝謝!我們熟知的腦裂問題一般表現形式是 在mysql主備上安裝集群軟體,比如keepalive管理vip的飄逸 heartbeat管理包括vip在內的共享資源的轉...
drbd腦裂處理
自動處理 通過 etc drbd.conf配置中設定自動處理策略,在發生資料不一致時自動處理。自動處理策略定義如下 1 after sb 0pri.當兩個節點的狀態都是secondary時,可以通過after sb 0pri策略自動恢復。1 disconnect 預設策略,沒有自動恢復,簡單的斷開連...