Zookeeper集群为什么要是单数
在zookeeper集群中,會有三種角色,leader、 follower、 observer分別對應著總統、議員、觀察者。
半數以上投票通過:可以這樣理解。客戶端的增刪改操作無論訪問到了哪臺zookeeper服務器,最終都會被轉發給leader服務器,再由leader服務器分給zookeeper集群中所有follower服務器去投票(投票指的是在內存中做增刪改操作),半數投票通過就被認為操作可執行(commit),否則不可執行。
observer觀察者服務器是針對于查詢操作做負載的,observer與follower服務器最大的不同在于observer沒有投票權,在客戶端發起的增刪改操中,leader服務器是不會把消息傳遞給observer服務器讓其投票的。但是查詢操作跟follower一樣,客戶端的查詢到了observer服務器節點,observer服務器去訪問leader服務器取最新的數據然后返回給客戶端。
?
為什么zookeeper集群是單數?
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臺服務器掛掉
?
通過以上可以發現,3臺服務器和4臺服務器都最多允許1臺服務器掛掉,5臺服務器和6臺服務器都最多允許2臺服務器掛掉
但是明顯4臺服務器成本高于3臺服務器成本,6臺服務器成本高于5服務器成本。這是由于半數以上投票通過決定的。
?
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集群數量總是單出現,主要原因還是在于第2點,防腦裂,對于第1點,無非是正本控制,但是不影響集群正常運行。但是出現第2種裂的情況,zookeeper集群就無法正常運行了。
總結
以上是生活随笔為你收集整理的Zookeeper集群为什么要是单数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UNIX再学习 -- 系统数据文件和信息
- 下一篇: PS菜鸟入门 -- 窗口