让我们分析如何在 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
将被删除。
- 下一个跟随者节点将通过观察者获得有关领导者移除的通知。
- 下一个 follower 节点将检查是否有其他 znodes 的数量最小。 如果没有,那么它将承担领导者的角色。 否则,它会找到创建编号最小的 znode 的节点作为领导者。
- 同理,所有其他follower节点都选举创建znode数量最小的节点为leader。
从头开始选举领导者是一个复杂的过程。 但是 ZooKeeper 服务使它变得非常简单。 让我们在下一章继续安装 ZooKeeper 以用于开发目的。