分布式搜索引擎(二) 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节点就等待其余节点发送选举消息,来作为选票或者纳入自己的集群

目录
相关文章
|
3月前
|
自然语言处理 搜索推荐 数据库
高性能分布式搜索引擎Elasticsearch详解
高性能分布式搜索引擎Elasticsearch详解
95 4
高性能分布式搜索引擎Elasticsearch详解
|
2月前
|
存储 数据采集 分布式计算
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
56 1
|
2月前
|
存储 缓存 数据处理
深度解析:Hologres分布式存储引擎设计原理及其优化策略
【10月更文挑战第9天】在大数据时代,数据的规模和复杂性不断增加,这对数据库系统提出了更高的要求。传统的单机数据库难以应对海量数据处理的需求,而分布式数据库通过水平扩展提供了更好的解决方案。阿里云推出的Hologres是一个实时交互式分析服务,它结合了OLAP(在线分析处理)与OLTP(在线事务处理)的优势,能够在大规模数据集上提供低延迟的数据查询能力。本文将深入探讨Hologres分布式存储引擎的设计原理,并介绍一些关键的优化策略。
141 0
|
3月前
|
存储 负载均衡 算法
分布式-Zookeeper-Master选举
分布式-Zookeeper-Master选举
|
5月前
|
负载均衡 监控 搜索推荐
面试题ES问题之Solr和Elasticsearch在分布式管理上如何解决
面试题ES问题之Solr和Elasticsearch在分布式管理上如何解决
43 1
|
7月前
|
存储 自然语言处理 搜索推荐
分布式搜索引擎ElasticSearch
Elasticsearch是一款强大的开源搜索引擎,用于快速搜索和数据分析。它在GitHub、电商搜索、百度搜索等场景中广泛应用。Elasticsearch是ELK(Elasticsearch、Logstash、Kibana)技术栈的核心,用于存储、搜索和分析数据。它基于Apache Lucene构建,提供分布式搜索能力。相比其他搜索引擎,如Solr,Elasticsearch更受欢迎。倒排索引是其高效搜索的关键,通过将词条与文档ID关联,实现快速模糊搜索,避免全表扫描。
283 12
|
6月前
|
存储 搜索推荐 Java
微服务SpringCloud ES分布式全文搜索引擎简介 下载安装及简单操作入门
微服务SpringCloud ES分布式全文搜索引擎简介 下载安装及简单操作入门
85 2
|
7月前
|
存储 搜索推荐 Java
Java远程连接本地开源分布式搜索引擎ElasticSearch
Java远程连接本地开源分布式搜索引擎ElasticSearch
|
2月前
|
NoSQL Java Redis
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
Redis分布式锁在高并发场景下是重要的技术手段,但其实现过程中常遇到五大深坑:**原子性问题**、**连接耗尽问题**、**锁过期问题**、**锁失效问题**以及**锁分段问题**。这些问题不仅影响系统的稳定性和性能,还可能导致数据不一致。尼恩在实际项目中总结了这些坑,并提供了详细的解决方案,包括使用Lua脚本保证原子性、设置合理的锁过期时间和使用看门狗机制、以及通过锁分段提升性能。这些经验和技巧对面试和实际开发都有很大帮助,值得深入学习和实践。
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
|
18天前
|
存储 NoSQL Java
使用lock4j-redis-template-spring-boot-starter实现redis分布式锁
通过使用 `lock4j-redis-template-spring-boot-starter`,我们可以轻松实现 Redis 分布式锁,从而解决分布式系统中多个实例并发访问共享资源的问题。合理配置和使用分布式锁,可以有效提高系统的稳定性和数据的一致性。希望本文对你在实际项目中使用 Redis 分布式锁有所帮助。
47 5
下一篇
DataWorks