# 4.5 ES中Master选举机制

选举机制的意义再于启动时能选出来Master,集群主节点意外宕机时,选举出来新的Master,能保证服务的高可用性。

理解选举机制的算法,有利于理解ES的底层原理,学习其思想。

# 4.4.1. Master选举的几个角色

  • 主节点:集群中的老大
  • 投票节点:每个候选节点默认都有投票权。
    • 候选节点:具有选举权和被选举权,可以参与成为Master的选举。
    • 仅投票节点:只有选举权,只能投票选举别人,自己没有做主节点的权利。

为什么要仅投票节点?

为了避免让主节点执行重负载任务,一般不为其分配 data 角色,从而避免让主节点执行数据的增删改查这种重负载任务。
以5个节点的集群为例,需要3个候选节点来选举主节点,那么是不是就是3个领导,2个干活的了?
如果2个候选节点+1个仅投票节点,让仅投票节点也做数据操作,就有3个干活了。

还有其他问题这里不过多解释,如有其他疑问可以联系作者。

仅投票节点主要意义是为了降低资源浪费,也就是降本增效

# 4.4.2 选举的触发

# 1. 节点失效检测

ES中有两个和选举相关的工作进程专门负责检测节点的存活状况。

  • NodesFaultDetection:即NodesFD,在master运行,用于定期检查集群中的节点是否存活。
  • MasterFaultDetection:即MasterFD,在所有DataNode运行,作用是定期检查Master节点是否存活。

他们会分别通过ping的方式定期检测集群的普通节点和Master节点是否正常

# 2. 触发选举的情况

  • 主节点检测 候选节点 数量少于法定票数的时候,会自主放弃主节点身份
  • 主节点宕机

# 4.4.3 选举流程

候选节点全部发起选举流程

# 1. 获取集群节点

根据配置文件下的节点信息,查询所有节点获取数据,包含节点的名称、节点Id、不同集群状态下的版本号、节点角色等信息。

# 2. 选举临时Master节点

没有主节点时候,先判断候选节点数量是否满足法定票数,候选节点数 >= 法定票数,只有满足时,才会选举。

为了避免脑裂,ES采用了配置投票数量策略,选举Master票数为:节点数量/2 + 1,同时建议集群节点数量为奇数。

先按照集群状态排序,最新的状态排在前面,再按照节点id排序,id小的排在前面。
集群状态版本越新就排在越前面,当clusterStateVersion越大,说明数据越全,所以优先级越高。为了保证新Master拥有最新的clusterState(即集群的meta),避免已经commit的meta变更丢失。

此时只是临时Master节点,还没发布集群其他节点里,选出来临时Master后,判断下是不是当前节点,如果不是就给自己认定的临时Master投票。

# 3 统计票数

如果选出来的节点是当前节点,则开始等待其它节点连接,等满足法定票数的时候,成立新的集群,通知其他节点。结束选举!!!

Last Updated: 11/13/2023, 5:27:55 PM
点击加入Q群:564759181