【架构师面试-搜索-4】-ElasticSearch集群Master选举机制

1 Master选举核心设计思想

Discovery模块:负责发现集群中的节点,以及选择主节点。ES支持多种不同Discovery类型选择,内置的实现称为Zen Discovery。

Zen Discovery封装了节点发现(Ping)、选主等实现过程。

Master选举核心设计思想:所有分布式系统都需要以某种方式处理数据一致性问题。一般情况下,可以将策略分为两种:

1. 避免数据不一致【ES】

2. 事后处理不一致数据【事后补偿】,适用场景下非常强大,但对数据模型有比较严格的限。

Elastic选出主节点Master,Master的职责是什么?这里采用的共识算法主要在共识什么数据?保证什么数据的一致性!

2 选举采用什么算法

在主节点选举算法的选择上,基本原则是不重复造轮子。最好实现一个众所周知的算法,这样的好处是其中的优点和缺陷是已知。

1. Bully算法

假定所有节点都有一个唯一的ID,使用该ID对节点进行排序。任何时候的当前Leader都是参与集群的最高ID节点。

优点:易于实现

缺点:当拥有最大ID的节点处于不稳定状态的场景下会有问题。

例如,Master负载过重而假死,集群拥有第二大ID的节点被选为新主,这时原来的Master恢复,再次被选为新主,然后又假死……

ES 通过推迟选举,直到当前的 Master 失效来解决上述问题,只要当前主节点不挂掉,就不重新选主。

但是容易产生脑裂(双主),为此,再通过“法定得票人数过半”解决脑裂问题。

2. Paxos算法

Paxos非常强大,尤其在什么时机,以及如何进行选举方面的灵活性比简单的Bully算法有很大的优势,因为在现实生活中,存在比网络连接异常更多的故障模式。

Paxos 实现起来非常复杂。

3. Raft算法

3 选举的三条件与一配置:

三个条件

1. 参选人数过半:达到 quorum(多数)后就选出了临时的主

为什么是临时的?每个节点运行排序取最大值的算法,结果不一定相同。

举个例子,集群有5台主机,节点ID分别是1、2、3、4、5。当产生网络分区或节点启动速度差异较大时,节点1看到的节点列表是1、2、3、4,选出4;节点2看到的节点列表是2、3、4、5,选出5。结果就不一致了怎么办?

2. 得票数需过半:某节点被选为主节点,必须判断加入它的节点数过半,才确认Master身份。

3. 当探测到节点离开事件时,必须判断当前节点数是否过半:

如果达不到 quorum,则放弃Master身份,重新加入集群。

为什么这么做?如果不这么做,则设想以下情况:假设5台机器组成的集群产生网络分区,2台一组,3台一组,产生分区前,Master位于2台中的一个,此时3台一组的节点会重新并成功选取Master,产生双主,俗称脑裂。

怎么做?怎么判断当前节点数是否过半?集群并不知道自己共有多少个节点。quorum值从配置中读取,我们需要设置配置项:discovery.zen.minimum_master_nodes

一配置:与选主过程相关的重要配置。

discovery.zen.minimum_master_nodes:最小主节点数,这是防止脑裂、防止数据丢失的极其重要的参数。

这个参数的实际作用早已超越了其表面的含义。除了在选主时用于决定“多数”,还用于多处重要的判断,至少包含以下4个位置:

1. 触发选主 进入选主的流程之前,参选的节点数需要达到法定人数。

2. 决定Master 选出临时的Master之后,这个临时Master需要判断加入它的节点达到法定人数,才确认选主成功。

3. gateway选举元信息 向有Master资格的节点发起请求,获取元数据,获取的响应数量必须达到法定人数,也就是参与元信息选举的节点数。

4. Master发布集群状态 发布成功数量。

为了避免脑裂,它的值应该是半数以上(quorum):(master_eligible_nodes / 2) + 1

例如,如果有3个具备Master资格的节点,则这个值至少应该设置为(3/2)+ 1 = 2。

4 Master选举流程

ZenDiscovery的选主过程如下:

每个节点计算最小的已知节点ID,该节点为临时Master。向该节点发送领导投票。

如果一个节点收到足够多的票数,并且该节点也为自己投票,那么它将扮演领导者的角色,开始发布集群状态。

所有节点都会参与选举,并参与投票,但是,只有有资格成为Master的节点(node.master为true)的投票才有效。获得多少选票可以赢得选举胜利,就是所谓的法定人数。在 ES 中,法定大小是一个可配置的参数。配置项:discovery.zen.minimum_master_nodes。

为了避免脑裂,最小值应该是有Master资格的节点数n/2+1。

5 整体流程

选举临时Master

如果本节点当选,则等待确立Master

如果其他节点当选,则尝试加入集群

然后启动节点失效探测器

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不要迷恋发哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值