elasticsearch高可用 原理
ES是如何解决高可用
ES是一个分布式全文检索框架,隐藏了复杂的处理机制,核心数据分片机制、集群发现、分片负载均衡请求路由。
ES的高可用架构
ES基本概念名词
Cluster
代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。
es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。
Shards
代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。
[分片的数量只能在索引创建前指定,并且索引创建后不能更改。]
分片数由index.number_of_shards在索引创建的时候指定,如果需要修改主分片数,需要重建索引:
1 按照需要创建一个新的索引;
2 reindex把索引现有的数据同步到新索引中;
3 别名绑定新创建的索引上;
规避主分片不能修改的问题的方法,官方的说明:
我们当前的选择只有一个就是将数据重新索引至一个拥有更多分片的一个更大的索引,但这样做将消耗的时间是我们无法提供的。
[通过事先规划,我们可以使用 预分配 的方式来完全避免这个问题。]
replicas
代表索引副本,es可以设置多个索引的副本。
副本的作用:
1.是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。
2.是提高es的查询效率,es会自动对搜索请求进行负载均衡。
Recovery
代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配;
挂掉的节点重新启动时也会进行数据恢复。
ES集群中的五大角色
在Elasticsearch中,有五大角色,主要如下:
Master Node:主节点
主节点,该节点不和应用创建连接,每个节点都保存了集群状态.
master节点控制整个集群的元数据。
只有Master Node节点可以修改节点状态信息及元数据(metadata)的处理,比如索引的新增、删除、分片路由分配、所有索引和相关 Mapping 、Setting 配置等等。
Master eligible nodes:合格主节点
合格节点,每个节点部署后不修改配置信息,默认就是一个 eligible 节点.
有资格成为Master节点但暂时并不是Master的节点被称为 eligible 节点,该节点可以参加选主流程,成为Mastere节点.
该节点只是与集群保持心跳,判断Master是否存活,如果Master故障则参加新一轮的Master选举。
Data Node:数据节点
数据节点,改节点用于建立文档索引, 接收 应用创建连接、接收索引请求,接收用户的搜索请求
data节点真正存储数据,ES集群的性能取决于该节点的个数(每个节点最优配置的情况下),
data节点的分片执行查询语句获得查询结果后将结果反馈给Coordinating节点,在查询的过程中非常消耗硬件资源,如果在分片配置及优化没做好的情况下,进行一次查询非常缓慢(硬件配置也要跟上数据量)。
Coordinating Node:协调节点(/路由节点/client节点)
协调节点,该节点专用与接收应用的查询连接、接受搜索请求,但其本身不负责存储数据。
协调节点的职责:
接受客户端搜索请求后将请求转发到与查询条件相关的多个data节点的分片上,然后多个data节点的分片执行查询语句或者查询结果再返回给协调节点,协调节点把各个data节点的返回结果进行整合、排序等一系列操作后再将最终结果返回给用户请求。
搜索请求在两个阶段中执行(query 和 fetch),这两个阶段由接收客户端请求的节点 - 协调节点协调。
1.在请求query 阶段,协调节点将请求转发到保存数据的数据节点。 每个数据节点在本地执行请求并将其结果返回给协调节点。
2.在收集fetch阶段,协调节点将每个数据节点的结果汇集为单个全局结果集。
Ingest Node:ingest节点
ingest 节点可以看作是数据前置处理转换的节点,支持 pipeline管道 设置,可以使用 ingest 对数据进行过滤、转换等操作,类似于 logstash 中 filter 的作用,功能相当强大。
Ingest节点处理时机——在数据被索引之前,通过预定义好的处理管道对数据进行预处理。默认情况下,所有节点都启用Ingest,因此任何节点都可以处理Ingest任务。
标签:可用,索引,Master,elasticsearch,es,分片,原理,节点,集群 From: https://www.cnblogs.com/jjjjylstudy/p/17094520.html