Zookeeper - 领导者选举


让我们分析一下在 ZooKeeper 集合中如何选举领导节点。考虑集群中有N个节点。领导者选举的过程如下 -

  • 所有节点都会创建一个具有相同路径/app/leader_election/guid_的连续的临时 znode 。

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

  • 对于给定的实例,在 znode 中创建最小数量的节点成为领导者,所有其他节点都是追随者。

  • 每个追随者节点都会监视编号次小的 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。

  • 如果领导者宕机,则其对应的 znode /app/leader_electionN将被删除。

  • 下一个跟随者节点将通过观察者获得有关领导者删除的通知。

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

  • 同样,所有其他follower节点选举创建编号最小的znode的节点作为leader。

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