让我们分析如何在ZooKeeper集合中选择leader节点。考虑一个集群中有N个节点。leader 选举的过程如下:
所有节点创建具有相同路径/ app / leader_election / guid_的顺序,临时znode。
ZooKeeper集合将附加10位序列号到路径,创建的znode将是/ app / leader_election / guid_0000000001,/ app / leader_election / guid_0000000002等。
对于给定的实例,在znode中创建最小数量的节点成为leader ,而所有其他节点是followers。
每个从节点监视具有次最小编号的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被删除。
下一个在线从节点将通过观察者获得关于leader移除的通知。
下一个在线跟随器节点将检查是否存在具有最小编号的其他znode。如果没有,那么它将承担领导者的角色。否则,它找到创建具有最小编号的znode的节点作为leader。
类似地,所有其他跟随节点选择创建具有最小编号的znode作为followers的节点。
领导选举是一个复杂的过程,但ZooKeeper服务使它非常简单。让我们在下一章中继续安装ZooKeeper以用于开发目的。