• 【分布式系统】分布式选举之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接收不到消息,成为主节点,然后向其他节点发送“我是主节点”消息

  • 相关阅读:
    [机缘参悟-110] :一个IT人对面具的理解:职业面具戴久了,就会忘记原本真实的自己,一个人是忠于职位,还是忠于内心?
    Python数据攻略-Pandas的数据计算、拼接与可视化
    广州市车联网先导区LTE-V2X 车载直连通讯设备技术规范
    直播课堂系统11--腾讯云点播管理模块(三)
    【VRP问题】基于帝国企鹅优化算法求解冷链配送物流车辆调度优化研究
    flink-sql所有语法详解-1.15
    java后端笔记
    python自动化运维——模拟键盘鼠标重复性操作Pyautoui
    牛客前端宝典——刷题 ##Day8
    Tomcat
  • 原文地址:https://blog.csdn.net/lzx5290/article/details/126919998