霸道选举算法-Bully
为什么说bully是霸道选举算法呢?因为它的选举原则是“长者”为大,即在所有活着的节点中,选取id最大的节点作为主节点
在bully算法中,节点的角色有两种:普通节点和主节点
- 初始化时,所有节点都是平等的,都是普通节点,并且都有成为主节点的权力。但是,当选主成功后,有且仅有一个节点成为主节点,其他所有节点都是普通节点
- 只有在主节点故障或者与其他节点失去联系后,才会重新选主。
bully算法选举过程中,需要用到以下3种消息:
- Election Message(选举消息):当一个节点发现当前的leader失效时,它会发送选举消息给具有更高id的其他节点,以请求成为新的leader。选举消息包含发起选举的节点的ID和相关信息
- OK Message(回复消息):当一个节点收到选举信息后,如果它的ID比发起选举的节点更高,则它会向该节点发送回复消息。回复消息包含接收回复的节点的ID和相关信息,以告知发起选举的节点自己存在,并且拒绝其成为新的leader
- Coordinator Message(领导权消息):当一个节点成为新的leader后,它会发送领导权消息给其他节点,以通知它们自己是新的leader。领导权消息包含新的leader节点的ID和相关信息
bully算法选举的原则是“长者为大”,意味着它的条件是,集群中每个节点均知道其他节点的ID
bully算法应用:
- MongoDB的副本的集群故障转移,使用的就是bully算法,在MongoDB分布式选举中,采用节点的最后操作时间戳来表示ID,时间戳最新的节点ID最大
bully算法优点:
- 选举速度快
- 算法简单,实现容易
算法缺点:
- 每个节点都有全局的节点信息
- 任何一个比当前主节点ID大的新节点加入或节点故障恢复加入集群之后,都会触发新选举。如果频繁退出、加入集群,会导致频繁切主