Elasticsearch选举流程详解
在上文
蓝天:Elasticsearch选举原理之Bully算法中,笔者介绍了Bully算法原理以及Bully缺陷,随后笔者介绍了Elasticsearch如何应对脑裂,网络负载和master假死的问题,在这篇文章中,笔者详细的介绍Master的选举流程
选举时间点
Elasticsearch在满足如下时间点的时候会触发选举
- 集群启动初始化
- 集群的Master崩溃的时候
- 任何一个节点发现当前集群中的Master节点没有得到n/2 + 1节点认可的时候,触发选举
选举流程图
ES选举核心的是Elasticsearch的选举流程,笔者研究了Elasticsearch选举源代码,同时看了很多文章之后,梳理出了选举过程中各个流程要点,下图是elasticsearch选举的流程图
接下来笔者一一介绍elasticsearch选举的各个阶段
1. 筛选activeMasters列表
Es的master就是从activeMasters列表或者masterCandidates列表选举出来,所以选举之前es首先需要得到这两个列表。Elasticsearch节点成员首先向集群中的所有成员发送Ping请求,elasticsearch默认等待discovery.zen.ping_timeout时间,然后elasticsearch针对获取的全部response进行过滤,筛选出其中activeMasters列表,activeMaster列表是其它节点认为的当前集群的Master节点
源代码如下
List<DiscoveryNode> activeMasters = new ArrayList<>();
for (ZenPing.PingResponse pingResponse : pingResponses) {
//不允许将自己放在activeMasters列表中
if (pingResponse.master() != null && !localNode.equals(pingResponse.master())) {
activeMasters.add(pingResponse.master());
}
}
相关文章