回覆列表
  • 1 # 使用者9578911294406

    無論是公司的生產環境,還是自己搭建的測試環境,Zookeeper叢集的節點個數都是奇數個。至於為什麼要是奇數個,以前只是模糊的知道是為了滿足選舉需要,並不知道詳細的原因。最近重點學習zookeeper,瞭解到其中的原理,現將其整理記錄下來。

    首先需要明確zookeeper選舉的規則:leader選舉,要求 可用節點數量 > 總節點數量/2 。注意 是 > , 不是 ≥。

    注:為什麼規則要求 可用節點數量 > 叢集總結點數量/2 ?

    如果不這樣限制,在叢集出現腦裂的時候,可能會出現多個子叢集同時服務的情況(即子叢集各組選舉出自己的leader), 這樣對整個zookeeper叢集來說是紊亂的。

    換句話說,如果遵守上述規則進行選舉,即使出現腦裂,叢集最多也只能回出現一個子叢集可以提供服務的情況(能滿足節點數量> 總結點數量/2 的子叢集最多隻會有一個)。

    所以要限制 可用節點數量 > 叢集總結點數量/2 。

    採用奇數個的節點主要是出於兩方面的考慮:

    1、防止由腦裂造成的叢集不可用。

    首先,什麼是腦裂?叢集的腦裂通常是發生在節點之間通訊不可達的情況下,叢集會分裂成不同的小叢集,小叢集各自選出自己的master節點,導致原有的叢集出現多個master節點的情況,這就是腦裂。

    下面舉例說一下為什麼採用奇數臺節點,就可以防止由於腦裂造成的服務不可用:

    (1) 假如zookeeper叢集有 5 個節點,發生了腦裂,腦裂成了A、B兩個小叢集:

    (a) A : 1個節點 ,B :4個節點

    (b) A : 2個節點, B :3個節點

    可以看出,上面這兩種情況下,A、B中總會有一個小叢集滿足 可用節點數量 > 總節點數量/2 。所以zookeeper叢集仍然能夠選舉出leader , 仍然能對外提供服務,只不過是有一部分節點失效了而已。

    (2) 假如zookeeper叢集有4個節點,同樣發生腦裂,腦裂成了A、B兩個小叢集:

    (a) A:1個節點 , B:3個節點

    (b) A:2個節點 , B:2個節點

    可以看出,情況(a) 是滿足選舉條件的,與(1)中的例子相同。 但是情況(b) 就不同了,因為A和B都是2個節點,都不滿足 可用節點數量 > 總節點數量/2 的選舉條件, 所以此時zookeep

  • 中秋節和大豐收的關聯?
  • 迷彩服是誰發明的?