在Elasticsearch中,Shard(分片)和Replica(副本)是关键概念,用于分布式存储和处理数据。

图中有4个节点(node),一个节点是一个ElasticSearch实例,通常一个节点运行在一个隔离的容器或虚拟机中。下面是对Shard和Replica的简要解释:
1. Shard(分片)
Shard是将索引水平拆分为多个部分的方式,以便在集群中分布和并行处理数据。
每个Shard是一个独立的Lucene索引,它包含了索引的一部分数据和相应的倒排索引结构。
当你创建索引时,可以指定Shard的数量。默认情况下,每个索引有5个主分片(Primary Shard)。
主分片负责数据的索引和检索过程,它们在集群中的不同节点上分布,实现数据的分布式存储和处理。
通过增加主分片的数量,可以提高索引的并行性和吞吐量,但需要更多的硬件资源。
Shard的数量在创建索引时确定,并且一旦创建就无法更改,所以在设计索引时需要合理评估和规划Shard的数量。

2. Replica(副本)
Replica是主分片的副本,用于提供高可用性、冗余和读取负载均衡。
每个主分片可以有零个或多个副本分片。
副本分片存储了与主分片完全相同的数据,但它们位于不同的节点上,实现了数据的冗余备份。
副本分片可以提供故障恢复能力,如果主分片失效,副本分片会自动升级为新的主分片。
副本分片还可以处理读取请求,从而分担主分片的负载。
副本分片的数量可以在索引创建后进行调整,通过增加副本数量可以提高索引的可用性和读取性能。

3. number_of_shards和number_of_replicas
在Elasticsearch中,可以使用number_of_shards和number_of_replicas两个设置来配置索引的分片和副本数量。
下面示例将创建一个名为my_index的索引,设置主分片数量为5,副本分片数量为1。

number_of_shards用于设置索引的主分片数量。主分片的数量在索引创建时指定,并且一旦创建就无法更改。
number_of_replicas用于设置每个主分片的副本分片数量。副本分片存储了与主分片完全相同的数据,但它们位于不同的节点上,实现了数据的冗余备份。
使用索引模板设置示例:

上述示例将创建一个名为my_template的索引模板,并将主分片数量设置为5,副本分片数量设置为1。此模板将应用于所有以my_index开头的索引。
使用Shard和Replica的组合,Elasticsearch实现了分布式数据存储和处理,提供了高性能、高可用性和扩展性。
Shard允许数据的并行处理和分布式存储,而Replica提供了数据的冗余备份和负载均衡。这些概念对于设计和管理Elasticsearch索引至关重要。
