霸道选举算法-Bully

霸道选举算法-Bully

起男 413 2024-07-26

霸道选举算法-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大的新节点加入或节点故障恢复加入集群之后,都会触发新选举。如果频繁退出、加入集群,会导致频繁切主