博客

如何配置 Elasticsearch 索引中的副本数量

了解如何在 Elasticsearch 索引中配置 number_of_replicas 以提升搜索性能并提供节点故障恢复能力。

Elasticsearch 设计为分布式系统,可处理大量数据并提供高可用性。实现这一点的关键功能之一是索引复制概念,该概念由number_of_replicas 设置控制。本文将深入探讨这一设置的细节、影响以及如何正确配置。

副本在 Elasticsearch 中的作用

在 Elasticsearch 中,索引是在多个主分片上分区的文档集合。每个主分片都是一个独立的 Apache Lucene 索引,索引中的文档分布在所有主分片中。为确保高可用性和数据冗余,Elasticsearch 允许每个分片拥有一个或多个副本(称为副本)。number_of_replicas 设置可控制 Elasticsearch 为索引中每个主分区创建的副本分区(拷贝)数量。默认情况下,Elasticsearch 会为每个主分片创建一个副本,但可以根据系统要求进行更改。

配置复制数

number_of_replicas 设置可在创建索引时配置,也可稍后更新。下面是创建索引时的设置方法:

PUT /my_index
{
  "settings": {
    "number_of_replicas": 2
  }
}

在此示例中,Elasticsearch 将为my_index 索引中的每个主分区创建两个副本。

要更新现有索引的number_of_replicas 设置,可以使用_settings API:

PUT /my_index/_settings
{
  "number_of_replicas": 3
}

该命令将更新my_index 索引,使每个主分区都有三个副本。

复制数设置的影响

number_of_replicas 设置对 Elasticsearch集群的性能和弹性有重大影响。以下是一些需要考虑的要点:

  1. 数据冗余和可用性:通过为每个分片创建更多副本,增加number_of_replicas 可提高数据的可用性。如果某个节点发生故障,Elasticsearch 仍可从其余节点上的副本分片提供数据。

  2. 搜索性能:副本分片可以为读取请求提供服务,因此拥有更多的副本可以通过在更多分片上分配负载来提高搜索性能。

  3. 写性能:不过,每次写操作都必须在分片的每个副本上执行。因此,较高的number_of_replicas 会降低索引性能,因为它会增加每次写入必须执行的操作次数。

  4. 存储要求:更多的副本意味着更多的存储空间。应确保群集有足够的容量来存储额外的副本。

  5. 节点故障恢复能力: number_of_replicas 的设置应考虑群集中的节点数量。如果number_of_replicas 等于或大于节点数,则群集可以承受多个节点的故障而不会丢失数据。

设置复制数的最佳做法

number_of_replicas 的最佳设置取决于系统的具体要求。不过,这里有一些通用的最佳做法:

  • 对于单节点集群,number_of_replicas 应设置为 0,因为没有其他节点可以容纳副本。

  • 对于多节点集群,number_of_replicas 至少应设置为 1,以确保数据冗余和高可用性。

  • 如果搜索性能是一个优先事项,请考虑增加number_of_replicas 。不过,请注意写入性能和存储要求之间的权衡。

  • 始终确保集群有足够的容量来存储额外的副本。

相关内容

如何在不同版本的 Elasticsearch& 集群之间迁移数据

Kofi Bartlett

介绍 Kibana 中的 Elasticsearch 查询规则用户界面

Jhon Guzmán

正确使用 JavaScript 的 Elasticsearch,第二部分

Jeffrey Rengifo

语义搜索的实现:使用 Elasticsearch 构建食谱搜索

Andre Luiz

如何在 AWS Marketplace 上部署 Elasticsearch

Eduard Martin

准备好打造最先进的搜索体验了吗?

足够先进的搜索不是一个人的努力就能实现的。Elasticsearch 由数据科学家、ML 操作员、工程师以及更多和您一样对搜索充满热情的人提供支持。让我们联系起来,共同打造神奇的搜索体验,让您获得想要的结果。

亲自试用