暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ElasticSearch集群核心原理(上)

Alleria Windrunner 2020-12-28
277
上两篇我们已经介绍了ElasticSearch的集群,从本篇开始我们来剖析一下ElasticSearch集群核心原理,主要有以下内容:
  • 索引分片

  • 负载均衡

  • 索引存储

  • 集群选举

  • 节点类型

  • 数据恢复

  • 故障探查


索引分片

首先我们介绍一下索引分片,分片又分为:
  • 分片存储

  • 分片复制


首先来说索引分片,ES集群中有多个节点(node),其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。ES的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看ES集群,在逻辑上是个整体,你与任何一个节点的通信和与整个ES集群通信是等价的。ES集群是一个或多个节点的集合,它们共同存储了整个数据集,并提供了联合索引以及可跨所有节点的搜索能力。多节点组成的集群拥有冗余能力,它可以在一个或几个节点出现故障时保证服务的整体可用性。集群靠其独有的名称进行标识,默认名称为“elasticsearch”。节点靠其集群名称来决定加入哪个ES集群,一个节点只能属一个集群。
接着是分片复制,一个索引可以存储超出单个结点硬件限制的大量数据。比如,一个具有10亿文档的索引占据1TB的磁盘空间,而任一节点可能没有这样大的磁盘空间来存储或者单个节点处理搜索请求,响应会太慢。为了解决这个问题,Elasticsearch提供了将索引划分成多片的能力,这些片叫做分片。
ES的“分片(shard)”机制可将一个索引内部的数据分布地存储于多个节点,它通过将一个索引切分为多个底层物理的Lucene索引完成索引数据的分割存储功能,这每一个物理的Lucene索引称为一个分片 (shard),分片分布到不同的节点上,构成分布式搜索。
每个分片其内部都是一个全功能且独立的索引,因此可由集群中的任何主机存储。创建索引时,用户可指定其分片的数量,默认数量为5个。分片的数量只能在索引创建前指定,并且索引创建后不能更改。
Shard有两种类型:
  • primary shard

  • replica shard


primary shard用于文档存储,每个新的索引会自动创建5个Primary shard,当然此数量可在索引创建之前通过配置自行定义,不过一旦创建完成其Primary shard的数量将不可更改。
replica shard是primary Shard的副本,用于冗余数据及提高搜索性能。每个primary shard默认配置了一个replica shard,但也可以配置多个,且其数量可动态更改。ES会根据需要自动增加或减少这些replica shard的数量。副本的作用一是提高系统的容错性,当个某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。

负载均衡

ES的负载均衡具体指的是分片的负载均衡,你可以访问搭建的集群:http://localhost:9200,具体的示意图如下:


从图中可以看出:
  1. 每个索引被分成了5个分片;

  2. 每个分片有一个副本;

  3. 5个分片基本均匀分布在3个dataNode上。 


注意分片的边框(border)有粗有细,具体区别是:
  • 粗边框代表:primary(true)

  • 细边框代表:replica


你可以尝试关闭集群中的一个节点,该节点上的分片将会重新进行均衡分配。
文章转载自Alleria Windrunner,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论