刚接触 Elasticsearch 吗?欢迎参加我们的 Elasticsearch 入门网络研讨会。您也可以开始免费云服务试用,或立即在您的计算机上试用 Elastic。
Elasticsearch 设计为分布式系统,可处理大量数据并提供高可用性。实现这一点的关键功能之一是索引复制概念,该概念由number_of_replicas 设置控制。本文将深入探讨这一设置的细节、影响以及如何正确配置。
副本在 Elasticsearch 中的作用
在 Elasticsearch 中,索引是在多个主分片上分区的文档集合。每个主分片都是一个独立的 Apache Lucene 索引,索引中的文档分布在所有主分片中。为确保高可用性和数据冗余,Elasticsearch 允许每个分片拥有一个或多个副本(称为副本)。number_of_replicas 设置可控制 Elasticsearch 为索引中每个主分区创建的副本分区(拷贝)数量。默认情况下,Elasticsearch 会为每个主分片创建一个副本,但可以根据系统要求进行更改。
配置复制数
number_of_replicas 设置可在创建索引时配置,也可稍后更新。下面是创建索引时的设置方法:
在此示例中,Elasticsearch 将为my_index 索引中的每个主分区创建两个副本。
要更新现有索引的number_of_replicas 设置,可以使用_settings API:
该命令将更新my_index 索引,使每个主分区都有三个副本。
复制数设置的影响
number_of_replicas 设置对 Elasticsearch集群的性能和弹性有重大影响。以下是一些需要考虑的要点:
- 数据冗余和可用性:通过为每个分片创建更多副本,增加
number_of_replicas可提高数据的可用性。如果某个节点发生故障,Elasticsearch 仍可从其余节点上的副本分片提供数据。 - 搜索性能:副本分片可以为读取请求提供服务,因此拥有更多的副本可以通过在更多分片上分配负载来提高搜索性能。
- 写性能:不过,每次写操作都必须在分片的每个副本上执行。因此,较高的
number_of_replicas会降低索引性能,因为它会增加每次写入必须执行的操作次数。 - 存储要求:更多的副本意味着更多的存储空间。应确保群集有足够的容量来存储额外的副本。
- 节点故障恢复能力:
number_of_replicas的设置应考虑群集中的节点数量。如果number_of_replicas等于或大于节点数,则群集可以承受多个节点的故障而不会丢失数据。
设置复制数的最佳做法
number_of_replicas 的最佳设置取决于系统的具体要求。不过,这里有一些通用的最佳做法:
- 对于单节点集群,
number_of_replicas应设置为 0,因为没有其他节点可以容纳副本。 - 对于多节点集群,
number_of_replicas至少应设置为 1,以确保数据冗余和高可用性。 - 如果搜索性能是一个优先事项,请考虑增加
number_of_replicas。不过,请注意写入性能和存储要求之间的权衡。 - 始终确保集群有足够的容量来存储额外的副本。




