Zookeeper - Leader 选举原理

让我们分析一下如何在 ZooKeeper 集合中选举Leader节点。 考虑一个集群中有 N 个节点。 Leader选举流程如下 −

  • 所有节点创建一个顺序的、短暂的 znode,具有相同的路径 /app/leader_election/guid_

  • ZooKeeper ensemble 会将 10 位序列号附加到路径中,创建的 znode 将是 /app/leader_election/guid_0000000001、/app/leader_election/guid_0000000002、 等。

  • 对于给定的实例,在 znode 中创建最小数字的节点成为Leader,所有其他节点都是从属节点。

  • 每个从属节点监视具有下一个最小编号的 znode。 例如,创建 znode /app/leader_election/guid_0000000008 的节点将监视 znode /app/leader_election/guid_0000000007,创建 znode /app/leader_election/guid_0000000007 的节点将监视 znode /app/leader_election/guid_0000000006

  • 如果Leader节点宕机,则其对应的 znode /app/leader_electionN 将被删除。

  • 下一个在线追随者节点将通过观察者收到关于Leader节点移除的通知。

  • 下一个 inline 跟随节点将检查是否还有其他编号最小的 znode。 如果没有,那么它将承担 Leader 的角色。 否则,它会找到创建具有最小编号的 znode 的节点作为 Leader。

  • 类似地,所有其他follower节点都选择创建znode编号最小的节点作为leader。

从头开始选举 Leader 是一个复杂的过程。 但是 ZooKeeper 服务使它变得非常简单。 让我们在下一章继续安装 ZooKeeper 以用于开发目的。