Zookeeper節點失效測試
一、Zookeeper原理
zookeeper有這樣一個特性:集羣中只要有過半的機器是正常工作的,那麼整個集羣對外就是可用的。也就是說如果有2個zookeeper,那麼只要有1個死了zookeeper就不能用了,因爲1沒有過半,所以2個zookeeper的死亡容忍度爲0;同理,要是有3個zookeeper,一個死了,還剩下2個正常的,過半了,所以3個zookeeper的容忍度爲1;同理你多列舉幾個:2->0;3->1;4->1;5->2;6->2會發現一個規律,2n和2n-1的容忍度是一樣的,都是n-1,所以爲了更加高效,沒必要增加偶數的那個不必要的zookeeper。
二、三節點測試
2.1配置信息
三節點測試時,zookeeper三節點的zoo.cfg文件均設置1、2、3三個節點,如下所示:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/apps/zookeeper-3.4.8/data/
dataLogDir=/usr/local/apps/zookeeper-3.4.8/logs/
clientPort=2181
server.1=192.168.0.19:2888:3888
server.2=192.168.0.20:2888:3888
server.3=192.168.0.21:2888:3888
2.2操作步驟
圖1 三節點命令執行結果對比圖
表1 三節點操作步驟狀態表
序號 |
操作步驟 |
節點1狀態 |
節點2狀態 |
節點3狀態 |
1 |
順序啓動節點1、2、3 |
follower |
follower |
leader |
2 |
關停leader節點3 |
leader |
follower |
not running |
3 |
重新啓動原leader節點3 |
leader |
follower |
follower |
4 |
關停follower節點2 |
leader |
not running |
follower |
2.3結論
由上面圖表可見,三節點狀態下,關停leader節點後,會自動推選出leader,關閉的節點開啓後,會自動做爲follower節點加入集羣,關閉1個follower節點,對整個集羣狀態沒有影響,即3節點狀態下,任一一節點失效,集羣仍可正常運行,始終保持有一個節點處於leader狀態。
三、兩節點測試
3.1配置信息
兩節點測試時,zookeeper兩節點的zoo.cfg文件均只保留1、2兩個節點,如下所示:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/apps/zookeeper-3.4.8/data/
dataLogDir=/usr/local/apps/zookeeper-3.4.8/logs/
clientPort=2181
server.1=192.168.0.19:2888:3888
server.2=192.168.0.20:2888:3888
#server.3=192.168.0.21:2888:3888
3.2操作步驟
圖2 兩節點命令執行結果對比圖
表2 兩節點操作步驟狀態表
序號 |
操作步驟 |
節點1狀態 |
節點2狀態 |
1 |
先啓動節點2,再啓動節點1 |
leader |
follower |
2 |
關停leader節點1 |
not running |
not running |
3 |
重新啓動原leader節點1 |
leader |
follower |
4 |
關停follower節點2 |
not running |
not running |
3.3結論
由上面圖表可見,在兩節點情況下,zookeeper中leader或follower任一節點故障,都會導致整個集羣不可用,因此,zookeeper兩節點與單節點在故障失效率方面等效,如需構建zookeeper高可靠性架構,至少需3個zookeeper節點,且建議選擇奇數個節點。