Elasticsearch选主流程

Elasticsearch作为一个分布式搜索和分析引擎需要一个master来管理集群中的节点、维护集群的元数据。与其它采用zookeeper来实现选主的分布式系统不同,Elasticsearch自己实现了自己的选举流程,下面介绍一下Elasticsearch的选主流程

Elasticsearch中的Discovery模块负责发现集群中的节点,以及选择主节点。ES支持多种不同的Discovery选择,内置的实现称为Zen Discovery,其封装了节点发现(ping)、选主等实现过程。

Elasticsearch中的节点在配置时会设置节点的功能项目,如下:

node.master:true
node.data:true

node.master为true表示这个节点能作为候选节点参加选举、fasle表示不能参加选举。

node.data:true表示这个节点可以作为数据节点存储数据,false表示不存储数据。

选举流程

Elasticsearch中的候选节点通过Bully算法来进行选举,该算法假定所有节点都有一个唯一的ID,使用该ID对节点进行排序,选择最小的节点作为Master。

具体的流程如下:

 

1、节点向候选节点发ping消息,候选节点返回response。

2、节点得到汇总response,得到两个集合:activeMasters和masterCandidates。activeMasters是当前活跃的master(一般只有一个),masterCandidates是当前候选的master。如果活跃的master不为空,说明当前集群有master,就选择id最小的一个加入,如果activeMasters为空,说明当前集群没有master,就从masterCandidates中选择ID最小的一个加入。

3、如果选出来的master是自己,就等待接收其它节点的join消息,在规定的时间内(默认30秒),接收到的join的数量(只计算有选举资格的节点)大于总数的一半,则说明当前master选举成功,然后更新cluserState,然后发布cluserState到其它接口;否则说明当前master选举失败,本节点停止接收join消息,重新发送ping消息,进行选举。

4、如果其它节点成为master,则不再接受其他节点的 join 请求,向 Master 发送join请求,并等待回复。超时时间默认为1分钟(可配置)。如果遇到异常,则默认重试 3 次(可配置)。这个步骤在 joinElectedMaster方法中实现。

失效检测

在选主成功以后,需要定时发送消息来检测是否有节点掉线,具体如下:

    在Master节点NodesFaultDetection,定时发送ping消息到集群中的其它节点,看这些节点是否有效 。如果发现某个节点失效,则把这个节点剔除集群,同时更新、发布元数据。如果发现当前活跃的节点数小于集群节点的一半,则会放弃master身份,重新开始选举。

    在非Master节点启动MasterFaultDetection,定时发送ping消息到master,看master是否有效,如果发现Master失效,该节点重新执行选举流程。

总结

选主流程在集群中启动,从无主状态到产生新主时执行,同时集群在正常运行过程中,Master 探测到节点离开,非 Master 节点探测到 Master 离开时都会执行 。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值