这是最常用的一种领导选举算法,它使用节点 ID的大小来选举新领导者。在所有活跃的节点中,选取节点 ID 最大或者最小的节点为主节点。
以下采用“ID 越大优先级越高”的逻辑来解释算法:
每个节点都会获得分配给它的唯一 ID。在选举期间,ID 最大的节点成为领导者。因为 ID 最大的节点“逼迫”其他节点接受它成为领导者,它也被称为君主制领导人选举:类似于各国王室中的领导人继承顺位,由顺位最高的皇室成员来继承皇位。如果某个节点意识到系统中没有领导者,则开始选举,或者先前的领导者已经停止响应请求。
算法包含 4 个步骤:
1集群中每个活着的节点查找比自己 ID 大的节点,如果不存在则向其他节点发送 Victory 消息,表明自己为领导节点;
2如果存在比自己 ID 大的节点,则向这些节点发送 Election 消息,并等待响应;
3如果在给定的时间内,没有收到这些节点回复的消息,则自己成为领导节点,并向比自己 ID 小的节点发送 Victory 消息;
4节点收到比自己 ID 小的节点发送的 Election 消息,则回复 Alive 消息。
上图举例说明了 Bully 领导者选举算法,其中:
节点3 注意到先前的领导者 6 已经崩溃,并且通过向比自己 ID 更大的节点发送选举消息来开始新的选举;
4 和 5 以 Alive 响应,因为它们的 ID 比 3 更大;
3 通知在这一轮中作出响应的最大 ID 节点是5;
5 被选为新领导人,它广播选举信息,通知排名较低