elasticsearch最大节点数_Elasticsearch选举原理之Bully算法
Elasticsearch采用了master-slave模式, ES会在集群中选取一个节点成为主节点,只有Master节点有资格维护全局的集群状态,在有节点加入或者退出集群的时候,它会重新分配分片,并将集群最新状态发送给集群中其它节点,主节点会以周期性ping的方式以验证其它节点是否存活。Elasticsearch的选举算法基于Bully选举算法,简单的说,在bully算法中,每个节点都有一个编号,只有编号最大的存活节点才能成为master节点。
1. 选举时间点
选举的时间点有两个
- 某个新节点加入了集群或者某个节点从宕机中恢复
- 集群中的某个节点检测到leader崩溃
2. 选举流程
选举的流程说明如下
- 节点node向所有比自己大的节点发送选举消息(选举为election消息)
- 如果节点node得不到任何回复(回复为alive消息),那么节点node成为master,并向所有的其它节点宣布自己是master(宣布为Victory消息)
- 如果node得到了任何回复,node节点就一定不是master,同时等待Victory消息,如果等待Victory超时那么重新发起选举
笔者借助网上的一组图片详细阐述Bully的选举流程,图片来自于
Bully Election Algorithm Examplewww.cs.colostate.edu
假设有如下6节点组成的集群,每个节点都会维护和其它节点的联系,p6节点是当前集群的master节点
3. Elasticsearch编号比较
Elasticsearch编号比较的判断依据有两个,首先是ClusterState版本号的比较,版本号越大优先级越高,然后是节点id的比较,id越小优先级越高。ClusterState是Master向集群中各个节点发送的集群状态,这个状态有一个版本号码,如果集群状态发生了变化,比如集群新增了节点成员或者有节点成员退出了,那么这个版本号就会加一,比对这个版本号的目的是让拥有最新状态的节点成为Master的优先级最高。
4. Bully算法缺陷
4.1 Master假死
Master节点承担的职责负载过重的情况下,可能无法即时对组内成员作出响应,这种便是假死。如果上图中的P6节点假死,于是P5节点成为了Master节点,但是在P6节点负载减轻之后,P6节点又对组内成员作出了响应,P6节点又会成为Master节点,如此反复,整个集群状态就会非常不可靠。
Elasticsearch是如何解决这个问题的呢?在Bully算法中,Master节点P6因为负载重,来不及对P3节点作出响应,所以P3节点通知P4,P5节点进行选举。在Elasticsearch中,P3节点发现Master P6对自己长时间不作出响应,P3节点会请求其它节点判断P6节点是否存活,如果有1/2以上节点都认定P6存活,那么P3就会放弃发起选举
4.2 脑裂问题
脑裂问题指的是一个集群中出现了两个及以上的Master节点。
比如上图中集群因为网络原因分成了两个部分,一个部分称为partition1包含P3,P5,P6节点,另一部分称为partition2包含P2,P1,P4节点,这两个partition因为网络原因比如路由器短时故障造成不能相互通信的问题。
那么网络分区一根据Bully算法选举出了P6作为master,而网络分区二选举出了P4作为master,这就是脑裂问题。
Elasticsearch脑裂解决方案
Quorum算法
脑裂问题是所有集群选举算法都要面对的一个问题,Elasticsearch集群机制采用了最小参与节点的方案解决的。假设elasticsearch集群中有资格投票的实例个数是n,节点想要成为master必须要得到n/2 +1票数(在本示例中是4)。上图中的分区一P6和分区二中的P4,任何一个master节点所在的分区集群的候选节点数目都小于4,更不可能得到4个选票,所以整个Elasticsearch集群处于瘫痪状态
我们也可以强制指定elasticsearch节点在有M个候选节点的情况下能选举出一个主节点,但是如果配置数小于上文提到的 n/2 +1 那么会出现脑裂的情况,M的配置参数如下
discovery.zen.minimum_master_nodes
如果产生了脑裂情况,为了避免脑裂的Master生成错误数据对整个集群产生影响。Master更新集群状态时还作出了如下防护,Master有两种指令,一种是send指令,另一种是commit指令,Master将最新集群状态推送给其它节点的时候(这是send指令),Master节点进入等待响应状态,其它节点并不会立刻应用该集群状态,而是首先会响应Master节点表示它已经收到集群状态更新,同时等待Master节点的commit指令。Master节点如果在discovery.zen.commit_timeout配置时间内都没有收到discovery.zen.minimum_master_nodes个数的节点响应,那么Master节点就不会向其它节点发送commit指令。如果Master收到了足够数量的响应,那么Master会向集群发出提交状态的指令,此时其它节点应用集群最新状态,Master节点再次等待所有节点响应,等待时间为discovery.zen.publish_timeout,如果任何一个节点没有发出提交响应,Master再次更新整个集群状态更新。
4.3 Master降级
Master主动降级发生在两种情况。
第一种是master发现自己能连接到的其它节点数目小于n/2 + 1,那么master自动降级为candidate。
第二种是Master在ping其它节点时候,如果发现了其它master,那么当前的master会比较cluster_state的version,如果当前master的version小,那么主动降级为candidate并主动加入另外一个master节点
4.4 网络负载问题
从上图中可以看到,集群中每个节点成员都会维护和其它所有成员的交互,整个集群维护的网络连接的总数是n*(n-1),如果集群中节点的数目非常的多,那么网络连接数目也会非常的多,网络负载会比较大,但是好在elasticsearch节点数目往往比较少,所以这个缺陷对elasticsearch集群来说不会产生什么影响。在前一篇关于集群发现的文章https://zhuanlan.zhihu.com/p/109570606中提到,elasticsearch可以通过参数限制单播的最大连接数目,该值默认为10
discovery.zen.ping.unicats.concurrent_connects
elasticsearch最大节点数_Elasticsearch选举原理之Bully算法相关推荐
- elasticsearch最大节点数_ElasticSearch读写底层原理及性能调优
ES写入/查询底层原理 1. Elasticsearch写入数据流程 客户端随机选择一个ES集群中的节点,发送POST/PUT请求,被选择的节点为协调节点(coordinating node) 协调节 ...
- elasticsearch最大节点数_ElasticSearch这些概念要明白
ElasticSearch 基本概念 文档(Document) ElasticSearch是面向文档的,文档是可搜索的最小单位. 好比 日志文件中的日志 MP3播放的一首歌 文档会被序列化成JSON格 ...
- elasticsearch最大节点数_Elasticsearch究竟要设置多少分片数?
0.引言 本文翻译自Elasticsearch20170918热乎的官方博客,原作者:Christian Dahlqvist. 在构建Elasticsearch集群的初期如果集群分片设置不合理,可能在 ...
- elasticsearch最大节点数_记录 Elasticsearch 的 maximum shards open 问题
问题背景 某天打开 Jaeger UI 后,发现里面没有任何数据了,这是个奇怪的问题. 然后立马上服务器检查了 jaeger-collector, jaeger-agent, jaeger-query ...
- fastdfs的tracker启动之后一直选举_Elasticsearch选举流程详解
在上文 蓝天:Elasticsearch选举原理之Bully算法zhuanlan.zhihu.com 中,笔者介绍了Bully算法原理以及Bully缺陷,随后笔者介绍了Elasticsearch如何 ...
- VRRP浮动路由(浮动路由原理,了解HSRP路由选举原理,实验过程与总结)
文章目录 前言 单一链路存在的问题 HSRP是思科的私有协议 HSRP (热备份路由选择协议)介绍 VRRP浮动路由原理 Master路由器选举原理 浮动路由原理 实验详解 实验目的 实验过程 主机设 ...
- MongoDB复制选举原理及复制集管理
一.MongoDB复制集的选举原理 复制是基于操作日志oplog,相当于MySQL中的二进制日志,只记录发生改变的记录.复制是将主节点的oplog日志同步应用到其他从节点的过程. 复制集的节点是通过选 ...
- Zookeeper选举原理——FastLeaderElection
转载自 Zookeeper选举原理 作为一个分布式应用程序协调服务,在大型网站中,其本身也是集群部署的,安装zookeeper的时候最好是单数节点,因为要选举.Zookeeper的leader节点是 ...
- 【Elasticsearch】Elasticsearch 查询过程中的 pre-filter 原理
1.概述 转载:添Elasticsearch 查询过程中的 pre-filter 原理 大家都知道在对索引执行查询的时候,需要在所有的分片上执行查询,因为无法知道被查询的关键词位于哪个分片,对于全文查 ...
最新文章
- 第 20 课时:GPU 管理和 Device Plugin 工作机制(车漾)
- Sql高级查询(三)
- kali Linux 源更新
- dedeCMS 静态页面的倒计时插件(原生VS自定义)
- IIS7 配置 PHP
- es6 属性的可枚举性和遍历
- Nginx之http配置
- 洛谷——P1075 [NOIP2012 普及组] 质因数分解
- 【渝粤教育】电大中专电商运营实操 (13)作业 题库
- CSV 文件中的字段中的开头和结尾上,可能会存在空格或制表符,但是该如何处理呢?
- TCP/IP协议新手入门学习
- java使用反射生成JDK动态代理
- PHP写的二维码签到,大家支持一下吧!
- 济南软件测试行业提出千亿级市场的战略布局
- 人生的差别在于业余时间的利用
- 软件可靠性工程研讨会报告
- Java 工厂设计模式
- 人月神话 中文版 pdf
- UrlRewritingNet 完美实现 ASP.NET 2.0 中的URL重写(映射)
- 华为v9play有计算机吗,华为荣耀v9play好用吗,华为荣耀v9play参数配置
热门文章
- Python----Requests库基本使用
- 在.NET中编辑器在用伪静态后不能正常使用的解决方法
- android支持第三方jar包,以及Eclipse如何导入jar包
- 用纯C面向过程写icefox3的代码
- CSP认证201809-4	再卖菜[C++题解]:差分约束、前缀和
- mysql主从位点保存时间_MySQL主从备份
- 修改登录密码html代码,修改密码.html · yuanxing_one/yuanxing - Gitee.com
- 信息检索报告_iFixR:缺陷报告驱动程序修复
- 安卓中radiobutton不进入监听事件_Laravel模型事件的实现原理详解
- lex 词法分析 linux,lex语言词法分析