【分佈式】腦裂是什麼?

什麼是腦裂

腦裂(split-brain)就是“大腦分裂”,也就是本來一個“大腦”被拆分了兩個或多個“大腦”,我們都知道,如果一個人有多個大腦,並且相互獨立的話,那麼會導致人體“手舞足蹈”,“不聽使喚”。

腦裂通常會出現在集羣環境中,比如ElasticSearch、Zookeeper集羣,而這些集羣環境有一個統一的特點,就是它們有一個大腦,比如ElasticSearch集羣中有Master節點,Zookeeper集羣中有Leader節點。

什麼是集羣腦裂

集羣的腦裂通常是發生在集羣中部分節點之間不可達而引起的(或者因爲節點請求壓力較大,導致其他節點與該節點的心跳檢測不可用)。當上述情況發生時,不同分裂的小集羣會自主的選擇出master節點,造成原本的集羣會同時存在多個master節點。

腦裂場景

對於一個集羣,想要提高這個集羣的可用性,通常會採用多機房部署,比如現在有一個由6臺zkServer所組成的一個集羣,部署在了兩個機房。

正常情況下,此集羣只會有一個Leader,那麼如果機房之間的網絡斷了之後,兩個機房內的zkServer還是可以相互通信的,如果不考慮過半機制,那麼就會出現每個機房內部都將選出一個Leader。

這就相當於原本一個集羣,被分成了兩個集羣,出現了兩個“大腦”,這就是腦裂。

對於這種情況,我們也可以看出來,原本應該是統一的一個集羣對外提供服務的,現在變成了兩個集羣同時對外提供服務,如果過了一會,斷了的網絡突然聯通了,那麼此時就會出現問題了,兩個集羣剛剛都對外提供服務了,數據該怎麼合併,數據衝突怎麼解決等等問題。

剛剛在說明腦裂場景時,有一個前提條件就是沒有考慮過半機制,所以實際上Zookeeper集羣中是不會出現腦裂問題的,而不會出現的原因就跟過半機制有關。

過半機制

在領導者選舉的過程中,如果某臺zkServer獲得了超過半數的選票,則此zkServer就可以成爲Leader了。

選舉的過程中爲什麼一定要有一個過半機制驗證? 因爲這樣不需要等待所有zkServer都投了同一個zkServer就可以選舉出來一個Leader了,這樣比較快,所以叫快速領導者選舉算法唄。

那麼再來想一個問題,過半機制中爲什麼是大於,而不是大於等於呢?因爲等於可能會選出兩個leader。

所以,我們可以總結得出,有了過半機制,對於一個Zookeeper集羣,要麼沒有Leader,要沒只有1個Leader,這樣就避免了腦裂問題。

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