分布式搜索引擎(二) ES 选举机制

简介: ES 基础概念及选举机制 简述

ES角色划分

ES默认有四种角色,默认这四种角色都存在,分别是:master,data, coordinating, Ingest node节点

master

master节点具备主节点的选举权,有资格成为主节点,主节点控制整个集群的元数据(metaData),比如索引的新增,删除,切片分配等;

该节点不和应用创建连接,master节点不占用IO和CPU,内存使用量一般

角色配置方式:node.master:true

data

该节点和应用创建连接,接收索引请求,会存储分配再该node上的shard的数据并负责这些shard的写入,查询等,ES集群的性能取决于该节点的个数(每个节点的最优配置的情况下),data节点会占用大量的CPU,IO和内存

data节点的分片执行查询语句,获得查询结果后奖结果反馈给coordinating,此过程较消耗硬件资源;

角色配置方式:node.data:true

coordinating

该节点和检索应用创建连接,接收检索请求,但其本身不负责存储数据,可当负责均衡节点,coordinating节点不占用IO,cpu和内存

coordinating节点接收搜索请求之后,将请求转发到与查询条件相关的多个data节点的分片上,然后多个data节点的分片执行查询语句或者查询结果再返回给coordinating节点,coordinating来把各个data节点的返回结果进行整合,排序等一系列操作后再将最终结果返回给用户请求

角色配置方式:node.master:false,node.data:false

Ingest Node节点

可以在任何节点上启用ingest,甚至使用专门的ingest nodes;

ingest node 专门对索引文档做预处理,发生在对真实文档建立索引之前,在建立索引对文档那个预处理之前,先定义一个管道(pipeline),管道里制定了一系列的处理器,每个处理器能够把文档按照某种特定的方式转换,比如在管道里定义一个从某个文档中移除字段的处理器,紧接着一个重命名字段的处理器,集群的状态也会被存储到配置的管道内,定义一个管道,简单的在索引或者bulkrequest(一种批量请求方法)操作上定义Pipeline参数,这样ingest node就会知道在就那个管道在使用,这个节点的使用过程中用的也不多

角色配置方式node.ingest:true

ES选举机制

节点发现

Zendiscovery是es自己实现的一套用于节点发现和轩主等功能的模块,没有依赖zookeeper等工具,简单来说,节点发现依赖以下配置:

conf/elasticsearch.yml:
    discovery.zen.ping.unicast.hosts: [1.1.1.1, 1.1.1.2, 1.1.1.3]

官方推荐这里设置为所有的master-eligible node

master节点选举

上面提到,急群众可能会有多个master-eligible node,这时就要进行master选举,保证只有一个当选master,如果有多个node当选为master,则集群中会出现脑裂,脑裂会破坏数据的一致性,导致集群行为不可控,产生各种非预期的影响

为了避免产生脑裂,es采用了常见的分布式系统思路,保证选举出来的master被多数派(quorum)的master-eligible node认可,以此来保证只有一个master,这个quorum通过以下配置进行配置

conf/elasticsearch.yml:
    discovery.zen.minimum_master_nodes: 2

这个配置对于整个集群很重要

详细说明文档

https://www.likecs.com/show-306303861.html

master选举谁发起的,什么时候发起的

master选举是由mater节点发起的,当一个master节点发现满足以下条件时发起选举:

1. 该Master节点当前的状态不是master

   2. 该master节点通过zenDiscovery模块的ping操作询问其已知的集群其他节点,没有任何节点连接到master
   3. 包括本节点内,当前已有超过minimum_master_nodes个节点没有连接到master

总之,当一个节点发现包括自己在内多数派master节点认为集群没有master时,就可以发起master选举

选举谁?

选举后是排序后第一个master节点,排序的规则为:

优先先看clusterStateVersion,clusterStateVersion越大,优先级越高,如果优先级一样的情况下,看clusterstate的id,id越小优先级越高

选举流程

每个节点都会判断master的情况,当开启选举的时候,nodeA会按照规则看看那个节点可以作为master,然后就会向目标节点发送选举json,如果目标节点此时就是一个master,那么就会将nodeA纳入集群中,如果不是,就会将该消息作为一个选票。nodeA此时就会等待,看看目标节点是否会成为master或者有别的master,如果目标节点觉得自己不是master并且后面也竞争不上,那么就会给A返回一个失败回调,nodeA就会去找下一个master,如果目标节点为自己,那么A节点就等待其余节点发送选举消息,来作为选票或者纳入自己的集群

目录
相关文章
|
4月前
|
存储 边缘计算 人工智能
云计算与分布式系统架构:驱动数字化时代的创新引擎
本文将探讨云计算与分布式系统架构在数字化时代中的重要性,介绍其基本概念和原理,并探讨其在推动技术创新、提升企业效率和满足用户需求方面的作用。同时,还将提出未来发展的趋势和挑战,为读者提供对云计算与分布式系统架构的深入理解。
|
4月前
|
消息中间件 算法 Java
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的保障容量的三大关键方案实现
尽管经过了上一篇文章 《【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的低延迟可用性机制方案实现》有了低延迟的优化保障,消息引擎仍需精心规划其容量。为了提供无与伦比的流畅体验,消息引擎必须实施有效的容量管理策略。
52 2
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的保障容量的三大关键方案实现
|
8月前
|
SQL 分布式计算 数据库连接
大数据Spark分布式SQL引擎
大数据Spark分布式SQL引擎
219 0
|
3月前
|
消息中间件 存储 负载均衡
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的HA高可用解决方案
昔之善战者,先为不可胜,以待敌之可胜。不可胜在己,可胜在敌。故善战者,能为不可胜,不能使敌之必可胜。故曰:胜可知,而不可为。
84 2
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的HA高可用解决方案
|
4月前
|
消息中间件 存储 Java
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的低延迟可用性机制方案实现
在充满挑战的2023年度,我们不可避免地面对了一系列棘手的问题,例如响应速度缓慢、系统陷入雪崩状态、用户遭受不佳的体验以及交易量的下滑。这些问题的出现,严重影响了我们的业务运行和用户满意度,为了应对这些问题,我们所在团队进行了大量的研究和实践,提出了低延迟高可用的解决方案,并在分布式存储领域广泛应用。
49 2
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的低延迟可用性机制方案实现
|
6月前
|
算法 Linux
分布式系列教程(14) -分布式协调工具Zookeeper(集群选举策略)
分布式系列教程(14) -分布式协调工具Zookeeper(集群选举策略)
58 0
|
6月前
|
Java 开发工具 Maven
分布式系列教程(12) -分布式协调工具Zookeeper(选举与哨兵机制)
分布式系列教程(12) -分布式协调工具Zookeeper(选举与哨兵机制)
47 0
|
3月前
|
SQL 搜索推荐 数据库
分布式搜索引擎_学习笔记_3
分布式搜索引擎_学习笔记_3
20 1
|
5月前
|
SQL 分布式计算 Java
Note_Spark_Day08:Spark SQL(Dataset是什么、外部数据源、UDF定义和分布式SQL引擎)
Note_Spark_Day08:Spark SQL(Dataset是什么、外部数据源、UDF定义和分布式SQL引擎)
47 0
|
5月前
|
SQL 关系型数据库 MySQL
Presto【基础 01】简介+架构+数据源+数据模型+特点(一篇即可入门支持到PB字节的分布式SQL查询引擎Presto)
Presto【基础 01】简介+架构+数据源+数据模型+特点(一篇即可入门支持到PB字节的分布式SQL查询引擎Presto)
59 0