使用過zookeeper的同窗都知道,集羣中的zookeeper須要超過半數,整個集羣對外才可用。資源
這裏所謂的整個集羣對外才可用,是指整個集羣還能選出一個Leader來,zookeeper默認採用it
quorums來支持Leader的選舉。集羣
其實quorums機制有兩個做用:zookeeper
1.能夠保證集羣中選舉出leader,且是惟一的一個,不會出現腦裂(split-brain)。數據
2.當客戶端更新數據時,當大多數節點更新成功,客戶端就會被通知更新成功了,客戶端
3. 其餘節點能夠稍後再更新,以至達到數據的最終一致性
就是說若是有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,因此爲了更加高效,和節省資源,2n和2n-1做用同樣只需2n-1便可,沒必要增長那一個沒必要要的zookeeper。