分布式选举-Bully算法-1 原理

分布式选举

在大型分布式系统中,会存在多个特定功能的集群。最常见的就是协调者集群,如提供分布式锁,分布式事务的协调者集群。集群中的多个机器对外提供统一的状态、一致的数据,这就需要在集群中选择一个主节点(领导者),来管理集群中的其他节点(跟随者)。这个选择主节点的过程就叫做分布式选举。

分布式选举的算法有Bully算法、Raft算法、ZAB算法等。我们先来分析Bully算法的原理及实现,后续文章会讲解其他算法及实现。

Bully 算法原理:

选举原则:在所有活着的节点中,选取节点ID最大或者最小的节点为主节点。

节点角色:主节点和普通节点

消息类型:

  • Election 消息,向节点发起选举的消息
  • Alive 消息,节点对 Election 消息的应答
  • Victory 消息,竞选成功的主节点向普通节点发送竞选成功的消息

选举过程:

  1. 集群中每个活着的节点查找比自己ID大的节点,如果不存在则向其他节点发送Victory消息,表明自己为主节点。
  2. 如果存在比自己ID大的节点,则向这些节点发送Election消息,并等待响应。
  3. 如果在给定的时间内,没有收到这些节点回复的消息,则自己成为主节点,并向比自己ID小的节点发送Victory消息。
  4. 节点收到比自己ID小的节点发送的Election消息,则回复Alive消息。

    假设有三个节点,选举过程如下图:

     

开源软件应用:在Elasticsearch的master选举采用的就是Bully算法,MongoDB 的副本集选主采用的也是Bully算法。

总结:

Bully算法选主,节点有两个角色:主节点和普通节点。节点间通信有三种消息:Election消息、Alive消息和Victory消息。选举速度快,算法复杂度低。缺点是如果节点ID大的节点频繁加入,退出集群,就会导致频繁切主。

Bully算法的原理讲解完了,下一篇文章《分布式选举-Bully算法-2 代码实现》我们来具体看看如何用代码实现分布式环境下的Bully选举。

相关代码地址:https://github.com/Justin02180218?tab=repositories


更多【分布式专辑】系列文章,请关注公众号


 

 

 

 

 

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值