zookeeper集群搭建的时候都是推荐奇数个节点,而且其leader选举机制要求,只有当前节点获得的票数 > 总票数/2的情况下才会晋升为leader节点(不是≥,是>!!!!!!!!!很重要)。主要原因如下:
-
节省资源:
- 上图集群由7个节点,选举投票时,需要大于7/2票,也就是4票可以选举出leader节点,最少要求5太机器正常,也就是最多允许3个节点宕机。
- 如果这个集群由8个节点,则需要最少5个节点正常,同样也是允许3个节点宕机。
所以,7个节点和8个节点的容错能力相同,所以选择7个节点的集群方案更加节省资源。
2.防止脑裂造成集群不可用:
上图集群中如果由于通信问题,使左侧与右侧失去联系,而同侧集群可以正常运行。此时由于只有只有7/2 + 1 = 4个节点投同一个节点时,才能选举出master。所以左侧集群还是可用的。不管如何划分,奇数个集群总是可用的。
如果集群改为偶数个,假设是6个,如果三个集群“失联”,则直接就导致,剩下的3个集群无法选举出master,导致集群不可用!