为什么Elasticsearch将最大分片数量限制为每个节点1k?

问题描述 投票:0回答:1

“集群分片限制防止每个节点创建超过 1000 个非冻结分片,每个专用冻结节点创建超过 3000 个冻结分片。请确保集群中每种类型都有足够的节点来处理所需的分片数量。”

这是来自最新的 Elastic Search doc 版本 8.12。我想知道这样设计的基本原理或原因。在我的场景中,这个限制很容易达到,请原谅我们使用的是一个很旧的版本(2.7.6),但我相信原因也适用。

我们使用的机器是专门运行Elastic Search数据节点的,64核,256G内存。为什么不支持更多的分片?如果无法按预期扩展,是否需要在一台机器上运行多个实例?

elasticsearch limit sharding
1个回答
0
投票

Elasticsearch 没有 2.7.6 版本。话虽这么说,

cluster.max_shards_per_node
集群设置在 6.5 版本左右出现,作为防止节点过载的保障措施。因此,如果您低于该版本,每个节点可能可以拥有更多分片,但这不一定是一件好事。

引入此设置的原因是为了保护您的节点免于过载。每个分片都是一个 Lucene 搜索引擎,需要资源(CPU、RAM、文件描述符等)。节点上的每个分片在索引时和搜索时都会竞争这些资源。在节点上创建越来越多的分片只会将这些资源分散到所有分片上。您添加的分片越多,每个分片可以使用的资源就越少,直到您的节点死亡。

根据您拥有的机器,如果您仅运行单个实例,则您没有充分利用硬件的能力,并且可能会浪费资源。您可以在其上运行至少四个 ES 实例,每个实例具有 64GB RAM(堆约为 32GB),这意味着 4000 个分片而不是 1000 个。您还可以尝试按顺序运行更多较小的实例(即 8 个具有 32GB RAM 的实例)增加您的最大碎片数量。

© www.soinside.com 2019 - 2024. All rights reserved.