zookeeper有个特点就是选举,选举出Leader才能正常使用,
集群中的zookeeper需要超过半数,整个集群对外才可用。
这里所谓的整个集群对外才可用,是指整个集群还能选出一个Leader来,
1.可以保证集群中选举出leader,且是唯一的一个,不会出现脑裂(split-brain)。
2.当客户端更新数据时,当大多数节点更新成功,客户端就会被通知更新成功了,
3.其他节点可以稍后再更新,以致达到数据的最终一致性
就是说如果有2个zookeeper,那么只要有1个死了zookeeper就不能用了,因为1没有过半,
所以2个zookeeper的死亡容忍度为0;
同理,
要是有3个zookeeper,一个死了,还剩下2个正常的,过半了,所以3个zookeeper的容忍度为1;
同理假如zookeeper节点逐渐增加:
2->0
3->1
4->1
5->2
6->2
会发现一个规律,2n和2n-1的容忍度是一样的,都是n-1,
所以为了更加高效和节省资源,2n和2n-1作用一样只需2n-1即可,不必增加那一个不必要的zookeeper。
也就是说5个节点和6个节点是一样容忍度,只要设置5个节点即可。
其他说明,
zookeeper默认连接数值60,可以自行进行调节maxClientCnxns参数来配置