| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> elasticsearch的master选举 -> 正文阅读 |
|
[大数据]elasticsearch的master选举 |
1 DiscoveryDiscovery模块负责发现集群中的节点、选择主节点。 涉及的核心配置如下,其它配置参数,参见: master-election-settings:
ES集群中可能会有多个master-eligible node,在集群启动时需要进行master选举,保证只有一个当选master。如果有多个node当选为master,则集群会出现脑裂,脑裂会破坏数据的一致性,导致集群行为不可控,产生各种非预期的影响。 1.1 CoordinatorES 7.x 重构了一个新的集群协调层Coordinator,采用 Raft 的实现,但并非严格按照 Raft 论文实现,而是根据ES做了一些调整 使用的算法可以在配置中指定,详见代码如下:
1.2 Zen Discovery采用Bully算法 Bully算法是Leader选举的基本算法之一,优点是易于实现,该算法和Solr Leader Shard选举非常相似。 但是当拥有最小ID的节点处于不稳定状态的场景下会有问题。例如Master负载过重而假死,集群拥有第二小ID的节点被选为新主,这时原来的Master恢复,再次被选为新主,然后又假死。 ES 通过推迟选举,直到当前的 Master 失效来解决上述问题,只要当前主节点不挂掉,就不重新选主。但是容易产生脑裂(双主),为此,再通过“法定得票人数过半”解决脑裂问题 1.3 算法比较【raft & bully】相同点
不同点
2 Zen Discovery选举2.1 何时触发
2.2 选举谁从源码分析,选举集群状态版本最高的作为master 先根据节点的clusterStateVersion比较,clusterStateVersion越大,优先级越高。clusterStateVersion相同时,进入compareNodes,其内部按照节点的Id比较(Id为节点第一次启动时随机生成)。 选举集群状态版本最高的作为master的原因如下:
参见ElectMasterService类中的这2个方法
2.3 选举流程代码详见:ZenDiscovery的findMaster()方法
3 节点失效检测选主流程之后不可或缺的步骤,不执行失效检测可能会产生脑裂现象。 3.1 NodesFaultDetectionNodesFaultDetection在Master节点启动。定期探测加入集群的节点是否活跃。当有节点连不上时,会执行removeNode。然后需要审视此时的法定人数是否达标,不达标就主动放弃Master身份执行rejoin以避免脑裂。 3.2 MasterFaultDetectionMasterFaultDetection在非Master节点启动。定期探测Master节点是否活跃,Master下线则触发rejoin重新选举。 参考found-leader-election-in-general#the-zen-way |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 8:01:29- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |