使用过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。