ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-12-20 10:02:50  阅读:151  来源: 互联网

标签:选主 选举 ID Master 架构师 节点 集群 ElasticSearch


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

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

然后启动节点失效探测器

标签:选主,选举,ID,Master,架构师,节点,集群,ElasticSearch
来源: https://blog.csdn.net/chongfa2008/article/details/121995247

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有