为什么 zookeeper 只能部署奇数
为什么 zookeeper 只能部署奇数
程序员朱永胜ZooKeeper 需要部署奇数个节点的原因与其一致性协议(即 ZAB 协议,ZooKeeper Atomic Broadcast)有关。ZAB 协议要求在集群中进行选主(Leader Election),并确保系统的高可用性和数据一致性。以下是原因的详细说明:
Quorum(法定人数)机制 :
- ZooKeeper 使用了多数派机制(Quorum)来保证系统的容错性和一致性。为了对一个事务进行提交,集群中的大多数节点(超过一半)必须同意该事务。
- 假设集群有
2n + 1
个节点,那么即使有n
个节点失效,仍然有n + 1
个节点可以组成多数派。
奇数节点的优势 :
- 如果集群节点数为奇数,则可以在节点失效时,最大化地利用可用节点。例如,3 个节点的集群可以容忍 1 个节点失效(因为 2 个节点仍然可以形成多数派),而 5 个节点的集群可以容忍 2 个节点失效。
- 这意味着使用奇数个节点可以在相同的失效容忍度下使用较少的节点,从而节省资源。
避免平票情况 :
- 在选举过程中,奇数个节点可以避免出现平票的情况。平票会导致无法选出新的 Leader,从而影响系统的可用性。
因此,为了在节点失效时仍然能够进行正确的选主和保证数据一致性,ZooKeeper 建议部署奇数个节点。