使用過zookeeper的同學都知道,集群中的zookeeper需要超過半數,整個集群對外才可用。
這里所謂的整個集群對外才可用,是指整個集群還能選出一個Leader來,zookeeper默認采用
quorums來支持Leader的選舉。
其實quorums機制有兩個作用:
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。
