ElasticSearch - 新老选主算法对比

本文对比了ElasticSearch 7.X之前基于Bully算法的选主流程和7.X之后采用的Raft算法实现。Bully算法存在Master假死和脑裂问题,而Raft算法简化了选举过程,强调任期概念,提高了选举的安全性和稳定性。ES在实现Raft时进行了优化,如PreVote阶段、动态维护参选节点列表等,以适应集群的动态变化。
摘要由CSDN通过智能技术生成

1. 7.X之前的选主流程

Zen Discovery

采用Bully算法,它假定所有节点都有一个唯一的ID,使用该ID对节点进行排序。任何时候的当前Leader都是参与集群的最高ID节点。该算法的优点是易于实现。但是,当拥有最大ID的节点处于不稳定状态的场景下会有问题。例如,Master负载过重而假死,集群拥有第二大ID的节点被选为新主,这时原来的Master恢复,再次被选为新主,然后又假死
ES 通过推迟选举,直到当前的 Master 失效来解决上述问题,只要当前主节点不挂掉,就不重新选主。但是容易产生脑裂(双主),为此,再通过“法定得票人数过半”解决脑裂问题

 

只有一个 Leader将当前版本的全局集群状态推送到每个节点。 ZenDiscovery(默认)过程就是这样的:

  • 每个节点计算最高的已知节点ID,并向该节点发送领导投票
  • 如果一个节点收到足够多的票数,并且该节点也为自己投票,那么它将扮演领导者的角色,开始发布集群状态。
  • 所有节点都会参数选举,并参与投票,但是,只有有资格成为 master 的节点的投票才有效.

有多少选票赢得选举的定义就是所谓的法定人数。 在弹性搜索中,法定大小是一个可配置的参数。 (一般配置成:可以成为master节点数n/2+1)

 

什么时候开始选主?

  1. 集群启动
  2. Master 失效

    非 Master 节点运行的 MasterFaultDetection 检测到 Master 失效,在其注册的 listener 中执行 handleMasterGone,执行 rejoin 操作,重新选主.注意,即使一个节点认为 Master 失效也会进入选主流程

 

Bully算法缺陷

Master假死

Master节点承担的职责负载过重的情况下,可能无法即时对组内成员作出响应,这种便是假死。例如一个集群中的Master假死,其他

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值