採用奇數個的節點主要是出於兩方面的考慮:
1、防止由腦裂造成的集群不可用。
首先,什麼是腦裂?集群的腦裂通常是發生在節點之間通訊不可達的情況下,集群會**成不同的小集群,小集群各自選出自己的master節點,導致原有的集群出現多個master節點的情況,這就是腦裂。下面舉例說一下為什麼採用奇數臺節點,就可以防止由於腦裂造成的服務不可用:
(1) 假如zookeeper集群有 5 個節點,發生了腦裂,腦裂成了a、b兩個小集群:
(a) a : 1個節點 ,b :4個節點 , 或 a、b互換
(b) a : 2個節點, b :3個節點 , 或 a、b互換 可以看出,上面這兩種情況下,a、b中總會有乙個小集群滿足 可用節點數量 > 總節點數量/2 。所以zookeeper集群仍然能夠選舉出leader , 仍然能對外提供服務,只不過是有一部分節點失效了而已。
(2) 假如zookeeper集群有4個節點,同樣發生腦裂,腦裂成了a、b兩個小集群:
(a) a:1個節點 , b:3個節點, 或 a、b互換
(b) a:2個節點 , b:2個節點 可以看出,情況(a) 是滿足選舉條件的,與(1)中的例子相同。 但是情況(b) 就不同了,因為a和b都是2個節點,都不滿足 可用節點數量 > 總節點數量/2 的選舉條件, 所以此時zookeeper就徹底不能提供服務了。綜合上面兩個例子可以看出: 在節點數量是奇數個的情況下, zookeeper集群總能對外提供服務(即使損失了一部分節點);如果節點數量是偶數個,會存在zookeeper集群不能用的可能性(腦裂成兩個均等的子集群的時候)。在生產環境中,如果zookeeper集群不能提供服務,那將是致命的 , 所以zookeeper集群的節點數一般採用奇數個。
2、在容錯能力相同的情況下,奇數臺更節省資源。leader選舉,要求 可用節點數量 > 總節點數量/2 。注意 是 > , 不是 ≥。舉兩個例子:
(1) 假如zookeeper集群1 ,有3個節點,3/2=1.5 , 即zookeeper想要正常對外提供服務(即leader選舉成功),至少需要2個節點是正常的。換句話說,3個節點的zookeeper集群,允許有乙個節點宕機。
(2) 假如zookeeper集群2,有4個節點,4/2=2 , 即zookeeper想要正常對外提供服務(即leader選舉成功),至少需要3個節點是正常的。換句話說,4個節點的zookeeper集群,也允許有乙個節點宕機。那麼問題就來了, 集群1與集群2都有 允許1個節點宕機 的容錯能力,但是集群2比集群1多了1個節點。在相同容錯能力的情況下,本著節約資源的原則,zookeeper集群的節點數維持奇數個更好一些。
Zookeeper集群配置
啟動zookeeper的單機模式是非常簡單的,它在用作開發 測試和評估時間很方便。然而在生產環境下,為了保障服務的高可用性應該要使用集群模式。有關zookeeper的簡介和單機模式示例請參考 zookeeper簡介和入門示例 在集群模式下,所有配置檔案和單機相比是基本相同的,只有一點細微的差別。os...
Zookeeper集群配置
目的 集群可以保證zookeeper服務高可用性 準備 我在本地啟動了三颱虛擬機器,ip1 192.168.1.102 ip2 192.168.1.104 ip3 192.168.1.110,並且在上面準備好zookeeper環境 需要安裝jdk 並安裝好zookeeper。步驟一 conf目錄下,...
zookeeper單機集群配置
zookeeper集群配置 一 拷貝複製拷貝到多目錄 z1 z2 z3 二 配置 zoo.cfg z1 配置 ticktime 2000 initlimit 10 synclimit 5 datadir zoo tmp zookeeper data1 datalogdir zoo log zooke...