【分布式系统】分布式选举之Bully算法

在分布式系统中,为了提高系统的可用性,达到99.999%的指标,我们通常会对服务节点做集群,采用主从互备的方式增强服务的可用性。在主从互备的集群中,主节点和从节点需要保证数据一致,主节点服务出现问题后,需要在从节点中选举出一个新的主节点,那么常用的分布式选举算法有Bully算法、Raft算法、ZAB算法。本节主要对Bully算法进行分析。

Bully算法原则

在存活的节点中,选取节点ID最大(或者最小)的节点为主节点。

选举过程

在这里插入图片描述
1、集群中所有节点都判断自己的ID是否是存活节点中ID最大的
2、如果是就告诉其他节点”我是主节点“
3、如果不是,需要向其他ID大于自己ID的节点发送”我需要选举“的消息
4、其他节点返回”同意选举“的消息
5、等待主节点发送”我是主节点“消息,如果一直等不到”同意选举“的消息,那么在一定的时间范围内,本节点将成为主节点,且向其他节点发送”我是主节点“的消息

所有的节点都会走一遍这个过程,存活期内ID最大的节点,在系统初始化的时候第一步就可以确定是主节点。在运行一段时间中假如主节点宕机后,ID最大的从节点会通过第五步,成为主节点

选举示例

假设集群环境中有五个节点,ID从小到大分别是1、2、3、4、5,这五个节点相互连接,每个节点都知道其他节点的ID,节点暂且称为N1、N2、N3、N4、N5,其中数字表示大小,在初始化的时候N5直接选举为主节点,其他四个节点为从节点。示意图如下:
在这里插入图片描述

运行期间N5突然故障,剩下的其中一个节点发现主节点服务故障,发起“选举”消息,比如N1节点最先发现主节点宕机,那么N1节点向N2、N3、N4、N5节点发起“我要选举”的消息,N2、N3、N4返回给N1节点“同意选举”消息。示意图如下:
在这里插入图片描述
在这里插入图片描述
N1节点无法成为主节点,只能等待主节点的通知消息。
剩下的其他节点比如N2节点需要向N3、N4、N5节点发送“选举信息”,N3、N4向N2返回“同意选举”消息;
N3节点需要向N4、N5节点发送“选举信息”,N4向N3返回“同意选举”消息;
N4节点需要向N5节点发送“选举信息”,因为N5节点宕机,无法给N4返回消息,所以在一定时间范围内,N4接收不到消息,成为主节点,然后向其他节点发送“我是主节点”消息,这样主节点选举完成。

N2发起选举图示

在这里插入图片描述
在这里插入图片描述

N2节点需要向N3、N4、N5节点发送“选举信息”,N3、N4向N2返回“同意选举”消息,N5无返回

N3发起选举图示

在这里插入图片描述
在这里插入图片描述

N3节点需要向N4、N5节点发送“选举信息”,N4向N3返回“同意选举”消息,N5无返回

N4发起选举图示

在这里插入图片描述
在这里插入图片描述

N4节点需要向N5节点发送“选举信息”,因为N5节点宕机,无法给N4返回消息,所以在一定时间范围内,N4接收不到消息,成为主节点,然后向其他节点发送“我是主节点”消息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jinwen5290

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值