集群 cluster

一个集群就是由一个或多个节点组织在一起,它们共同持有整个的数据,并一起提
供索引和搜索功能

节点Node

一个节点是集群中的一个服务器,作为集群的一部分,它存储数据,参与集群的索
引和搜索功能
一个节点可以通过配置集群名称的方式来加入一个指定的集群。默认情况下,每
个节点都会被安排加入到一个叫做“elasticsearch”的集群中

这意味着,如果在网络中启动了若干个节点,并假定它们能够相互发现彼此,它们
将会自动地形成并加入到一个叫做“elasticsearch”的集群中

在一个集群里,可以拥有任意多个节点。而且,如果当前网络中没有运行任何
Elasticsearch节点,这时启动一个节点,会默认创建并加入一个叫做“elasticsearch”的集群。

分片和副本 shards&replicas

shard分片

一个索引可以存储超出单个结点硬件限制的大量数据。比如,一个具有10
亿文档的索引占据1TB的磁盘空间,而任一节点都没有这样大的磁盘空间;或
者单个节点处理搜索请求,响应太慢

为了解决这个问题,Elasticsearch提供了将索引划分成多份的能力,这些
份就叫做分片

当创建一个索引的时候,可以指定你想要的分片的数量

每个分片本身也是一个功能完善并且独立的“索引”,这个“索引”可以
被放置到集群中的任何节点上

分片很重要,主要有两方面的原因
允许水平分割/扩展你的内容容量
允许在分片之上进行分布式的、并行的操作,进而提高性能/吞吐量
至于一个分片怎样分布,它的文档怎样聚合回搜索请求,是完全由
Elasticsearch管理的,对于作为用户来说,这些都是透明的

单台机器无法存储大量数据,ElasticSearch可以将一个索引中的数据切分为多个shard,分布在多台服务器上存储。有了shard就可以横向扩展,存储更多数据,让搜索和分析等操作分布到多台服务器上去执行,提升吞吐量和性能。每个shard都是一个lucene index。
image.png
shard的好处:
1.横向扩展,比如说数据量增加到了4T,很简单,重新建立一个有4个shard的索引,将数据导入进去,
2.数据分布在多个shard,多台服务器上,所有的操作,都会在多台服务器上并行分布式执行,提升吞吐量和性能.
如果你数据都在一个shard上之后,那么大量的请求都会在这一个shard上处理,假如这台服务器最大吞吐量每秒2000,如果你给数据均匀分布到多个shard之后,那么服务器的最大吞吐量就翻倍了,比如说一台服务器的吞吐量是2000 ,三台服务器三个shard的吞吐量就是6000了. 这样吞吐量就横向扩展了.

replica副本

在一个网络/云的环境里,失败随时都可能发生,在某个分片/节点不知怎
么的就处于离线状态,或者由于任何原因消失了,这种情况下,有一个故障转
移机制是非常有用并且是强烈推荐的。为此目的,Elasticsearch允许你创建分
片的一份或多份拷贝,这些拷贝叫做副本分片,或者直接叫副本
副本之所以重要,有两个主要原因
1) 在分片/节点失败的情况下,提供了高可用性。
注意到复制分片从不与原/主要(original/primary)分片置于同一节点
上是非常重要的
2) 扩展搜索量/吞吐量,因为搜索可以在所有的副本上并行运行
每个索引可以被分成多个分片。一个索引有0个或者多个副本
一旦设置了副本,每个索引就有了主分片和副本分片,分片和副本的数
量可以在索引
创建的时候指定
在索引创建之后,可以在任何时候动态地改变副本的数量,但是不能改变
分片的数量

任何一个服务器随时可能故障或宕机,此时shard可能就会丢失,因此可以为每个shard创建一个或者多个replica副本。
shard和replica副本数据是一样的. shard一般叫primary shard , replica 叫 replica shard.
replica shard同时也会接收读请求.比日说你请求primary shard1 ,其实也会被负载到replica shard1 , 这样吞吐量直接翻倍. replica shard只处理读请求.
如果primary shard不慎宕机了,此时请求还会去replica shard上去寻找数据.

replica可以在shard故障时提供备用服务,保证数据不丢失,多个replica还可以提升搜索操作的吞吐量和性能。primary shard(建立索引时一次设置,不能修改,默认5个),replica shard(随时修改数量,默认1个),默认每个索引10个shard,5个primary shard,5个replica shard
另外ElasticSearch规定primary shard 和replica shard 必须不能在一个服务器节点上.那么最小的高可用配置,是2台服务器上,A服务器放一部分的primary shard 一部分replica shard ,B服务器放一部分的primary shard 一部分replica shard