《从Paxos到Zookeeper:分布式一致性原理与实践》解释:
其实关于ZooKeeper集群服务器数,ZooKeeper官方确实给出了关于奇数的建议,但绝大部分ZooKeeper用户对这个建议认识有偏差。在本书前面提到的“过半存活即可用”特性中,我们已经了解了,一个ZooKeeper集群如果要对外提供可用的服务,那么集群中必须要有过半的机器正常工作并且彼此之间能够正常通信。基于这个特性,如果想搭建一个能够允许F
台机器down掉的集群,那么就要部署一个由2×F+1
台服务器构成的 ZooKeeper 集群。因此,一个由3台机器构成的ZooKeeper集群,能够在挂掉1台机器后依然正常工作,而对于一个由5台服务器构成的ZooKeeper集群,能够对2台机器挂掉的情况进行容灾。注意,如果是一个由6台服务器构成的ZooKeeper集群,同样只能够挂掉2台机器,因为如果挂掉3台,剩下的机器就无法实现过半了。
因此,从上面的讲解中,我们其实可以看出,对于一个由6台机器构成的ZooKeeper集群来说,和一个由5台机器构成的ZooKeeper集群相比,其在容灾能力上并没有任何显著的优势。基于这个原因,ZooKeeper集群通常设计部署成奇数台服务器即可。