三 ZooKeeper集群為什麼要單數?

2021-09-17 08:56:09 字數 1242 閱讀 8411

在zookeeper集群中,會有三種角色,leader、 follower、 observer分別對應著**、議員、觀察者。

半數以上投票通過:可以這樣理解。客戶端的增刪改操作無論訪問到了哪台zookeeper伺服器,最終都會被**給leader伺服器,再由leader伺服器分給zookeeper集群中所有follower伺服器去投票(投票指的是在記憶體中做增刪改操作),半數投票通過就被認為操作可執行(commit),否則不可執行。

observer觀察者伺服器是針對於查詢操作做負載的,observer與follower伺服器最大的不同在於observer沒有投票權,在客戶端發起的增刪改操中,leader伺服器是不會把訊息傳遞給observer伺服器讓其投票的。但是查詢操作跟follower一樣,客戶端的查詢到了observer伺服器節點,observer伺服器去訪問leader伺服器取最新的資料然後返回給客戶端。

1)、保證容錯性

由於在增刪改操作中需要半數以上伺服器通過,來分析以下情況。

2臺伺服器,至少2臺正常執行才行(2的半數為1,半數以上最少為2),正常執行1臺伺服器都不允許掛掉

3臺伺服器,至少2臺正常執行才行(3的半數為1.5,半數以上最少為2),正常執行可以允許1臺伺服器掛掉

4臺伺服器,至少3臺正常執行才行(4的半數為2,半數以上最少為3),正常執行可以允許1臺伺服器掛掉

5臺伺服器,至少3臺正常執行才行(5的半數為2.5,半數以上最少為3),正常執行可以允許2臺伺服器掛掉

6臺伺服器,至少3臺正常執行才行(6的半數為3,半數以上最少為4),正常執行可以允許2臺伺服器掛掉

2、防止腦裂

乙個zookeeper集群中,可以有多個follower、observer伺服器,但是必須只能有乙個leader伺服器。

如果leader伺服器掛掉了,剩下的伺服器集群會通過半數以上投票選出乙個新的leader伺服器。

集群互不通訊情況:

乙個集群3臺伺服器,全部執行正常,但是其中1臺裂開了,和另外2臺無法通訊。3臺機器裡面2臺正常執行過半票可以選出乙個leader。

乙個集群4臺伺服器,全部執行正常,但是其中2臺裂開了,和另外2臺無法通訊。4臺機器裡面2臺正常工作沒有過半票以上達到3,無法選出leader正常執行。

乙個集群5臺伺服器,全部執行正常,但是其中2臺裂開了,和另外3臺無法通訊。5臺機器裡面3臺正常執行過半票可以選出乙個leader。

乙個集群6臺伺服器,全部執行正常,但是其中3臺裂開了,和另外3臺無法通訊。6臺機器裡面3臺正常工作沒有過半票以上達到4,無法選出leader正常執行。

Zookeeper集群為什麼要是單數

在zookeeper集群中,會有三種角色,leader follower observer分別對應著 議員 觀察者。半數以上投票通過 可以這樣理解。客戶端的增刪改操作無論訪問到了哪台zookeeper伺服器,最終都會被 給leader伺服器,再由leader伺服器分給zookeeper集群中所有fo...

zookeeper集群節點個數為什麼最好是2n 1

zookeeper集群一大特性是只要集群中半數以上的節點存活,集群就可以正常提供服務 第一點 防止單點故障 比如 集群中只有2臺伺服器,若其中1臺掛掉,集群則停止對外提供服務 集群中只有3臺伺服器,若其中1臺掛掉,集群則重新選主,繼續對外提供服務 第二點 2n 1臺和2n 2臺機器的容災能力相同,都...

Zookeeper集群節點數量為什麼要奇數個

防腦裂 zookeeper的選舉策略也是需要半數以上的節點同意才能當選leader,如果是偶數節點可能導致票數相同的情況 在節點數量是奇數個的情況下,zookeeper集群總能對外提供服務 即使損失了一部分節點 如果節點數量是偶數個,會存在zookeeper集群不能用的可能性 腦裂成兩個均等的子集群...