MST

星途 面试题库

面试题:ElasticSearch索引设置中,如何调整分片和副本数量的参数及其影响

在ElasticSearch中,索引的分片和副本数量对性能和可用性有重要影响。请阐述如何在索引创建或后期调整时设置 `number_of_shards` 和 `number_of_replicas` 这两个参数,并说明不同设置值会给系统带来怎样的性能变化和可用性差异。
21.3万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

索引创建时设置参数

在创建索引时,可以使用如下的请求体来设置 number_of_shardsnumber_of_replicas

PUT /your_index_name
{
    "settings" : {
        "index" : {
            "number_of_shards" : 5, 
            "number_of_replicas" : 1 
        }
    }
}
  • number_of_shards:该参数定义了索引的主分片数量。一般来说,应根据数据量和节点数量来设置。数据量较大时,可适当增加分片数,以实现数据的分布式存储和并行处理,提升查询性能。但分片数过多也会带来额外开销,如过多的文件句柄占用、分片间通信开销等。
  • number_of_replicas:此参数定义了每个主分片的副本数量。副本的存在可以提高系统的可用性,当某个主分片所在节点故障时,副本分片可以提升为新的主分片继续提供服务。同时,副本也可以分担读请求,提升读性能。

后期调整参数

后期可以通过 _settings API 来调整这两个参数:

PUT /your_index_name/_settings
{
    "index" : {
        "number_of_replicas" : 2 
    }
}

需要注意的是,number_of_shards 在索引创建后通常不能直接修改(某些特殊场景下可以借助 reindex 等操作实现,但较为复杂)。

不同设置值对性能和可用性的影响

  • number_of_shards 较少
    • 性能:如果数据量较大,查询可能需要扫描的数据量相对集中在少数分片上,查询性能可能受限,因为无法充分利用集群的并行处理能力。
    • 可用性:较低的分片数不会直接影响可用性,但可能影响故障后的恢复速度,因为数据分布不够分散。
  • number_of_shards 较多
    • 性能:可以更好地实现数据分布式存储,并行处理能力强,查询性能在大数据量下可能更好。但过多分片会导致索引管理开销增大,如分片状态维护、搜索时的跨分片协调等。
    • 可用性:数据分布更分散,单个节点故障时,受影响的数据相对较少,系统整体可用性可能更好。
  • number_of_replicas 为 0
    • 性能:读性能相对较差,因为没有副本分担读请求。写性能理论上稍好,因为无需同步副本数据。
    • 可用性:可用性较低,主分片所在节点故障时,该分片数据不可用,可能导致索引部分功能不可用。
  • number_of_replicas 较多
    • 性能:读性能较好,因为多个副本可以分担读请求。但写性能会受影响,因为每次写操作都需要同步到多个副本,增加了写操作的延迟。
    • 可用性:可用性高,当主分片所在节点故障时,副本可以快速提升为主分片,保障索引的正常运行。