首先,ZooKeeper 是一个分布式的应用程序协调服务,作用就是为分布式应用提供一致性服务,应用场景有数据发布/订阅、命名服务、分布式协调/通知、分布式锁、分布式队列等。
为了实现上述的功能场景,就涉及到了 ZooKeeper 的一个选举,简单来说就是在众多机器中选举出一台机器作为“领导者”(leader)进行整个集群的统一管理。
所以在 ZooKeeper 的选举过程中,为了能够成功选举出 leader ,那就一定不能出现两台机器得票数一致的情况,所以在部署 ZooKeeper 集群的时候,节点数一定要为奇数,也就是 2n+1 台。
ZooKeeper 集群只有在机器数过半的情况下才能够正常工作,如果集群中只有两台机器在工作,只要其中出现一台机器宕机,那么剩下的那一台机器就不能正常工作,整个系统将会挂掉,因为最后所剩下的机器数是 1 ,1 并没有过半,也就是存活的机器必须大于 n+1 台,所以集群中至少需要3个或3个以上的节点。