Zookeeper集群为什么要是单数
在zookeeper集群中,會有三種角色,leader、 follower、 observer分別對應(yīng)著總統(tǒng)、議員、觀察者。
半數(shù)以上投票通過:可以這樣理解。客戶端的增刪改操作無論訪問到了哪臺zookeeper服務(wù)器,最終都會被轉(zhuǎn)發(fā)給leader服務(wù)器,再由leader服務(wù)器分給zookeeper集群中所有follower服務(wù)器去投票(投票指的是在內(nèi)存中做增刪改操作),半數(shù)投票通過就被認為操作可執(zhí)行(commit),否則不可執(zhí)行。
observer觀察者服務(wù)器是針對于查詢操作做負載的,observer與follower服務(wù)器最大的不同在于observer沒有投票權(quán),在客戶端發(fā)起的增刪改操中,leader服務(wù)器是不會把消息傳遞給observer服務(wù)器讓其投票的。但是查詢操作跟follower一樣,客戶端的查詢到了observer服務(wù)器節(jié)點,observer服務(wù)器去訪問leader服務(wù)器取最新的數(shù)據(jù)然后返回給客戶端。
?
為什么zookeeper集群是單數(shù)?
1、容錯
由于在增刪改操作中需要半數(shù)以上服務(wù)器通過,來分析以下情況。
2臺服務(wù)器,至少2臺正常運行才行(2的半數(shù)為1,半數(shù)以上最少為2),正常運行1臺服務(wù)器都不允許掛掉
3臺服務(wù)器,至少2臺正常運行才行(3的半數(shù)為1.5,半數(shù)以上最少為2),正常運行可以允許1臺服務(wù)器掛掉
4臺服務(wù)器,至少3臺正常運行才行(4的半數(shù)為2,半數(shù)以上最少為3),正常運行可以允許1臺服務(wù)器掛掉
5臺服務(wù)器,至少3臺正常運行才行(5的半數(shù)為2.5,半數(shù)以上最少為3),正常運行可以允許2臺服務(wù)器掛掉
6臺服務(wù)器,至少3臺正常運行才行(6的半數(shù)為3,半數(shù)以上最少為4),正常運行可以允許2臺服務(wù)器掛掉
?
通過以上可以發(fā)現(xiàn),3臺服務(wù)器和4臺服務(wù)器都最多允許1臺服務(wù)器掛掉,5臺服務(wù)器和6臺服務(wù)器都最多允許2臺服務(wù)器掛掉
但是明顯4臺服務(wù)器成本高于3臺服務(wù)器成本,6臺服務(wù)器成本高于5服務(wù)器成本。這是由于半數(shù)以上投票通過決定的。
?
2、防腦裂
一個zookeeper集群中,可以有多個follower、observer服務(wù)器,但是必需只能有一個leader服務(wù)器。
如果leader服務(wù)器掛掉了,剩下的服務(wù)器集群會通過半數(shù)以上投票選出一個新的leader服務(wù)器。
集群互不通訊情況:
一個集群3臺服務(wù)器,全部運行正常,但是其中1臺裂開了,和另外2臺無法通訊。3臺機器里面2臺正常運行過半票可以選出一個leader。
一個集群4臺服務(wù)器,全部運行正常,但是其中2臺裂開了,和另外2臺無法通訊。4臺機器里面2臺正常工作沒有過半票以上達到3,無法選出leader正常運行。
一個集群5臺服務(wù)器,全部運行正常,但是其中2臺裂開了,和另外3臺無法通訊。5臺機器里面3臺正常運行過半票可以選出一個leader。
一個集群6臺服務(wù)器,全部運行正常,但是其中3臺裂開了,和另外3臺無法通訊。6臺機器里面3臺正常工作沒有過半票以上達到4,無法選出leader正常運行。
?
通可以上分析可以看出,為什么zookeeper集群數(shù)量總是單出現(xiàn),主要原因還是在于第2點,防腦裂,對于第1點,無非是正本控制,但是不影響集群正常運行。但是出現(xiàn)第2種裂的情況,zookeeper集群就無法正常運行了。
總結(jié)
以上是生活随笔為你收集整理的Zookeeper集群为什么要是单数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UNIX再学习 -- 系统数据文件和信息
- 下一篇: PS菜鸟入门 -- 窗口