es分片异常报错 this action would add 10 total shards, this cluster currently has [ 2997/3000 ] maximum sh

本文探讨了Elasticsearch集群遇到的分片数上限问题,指出默认每个节点限制1000个分片,且建议每GB堆内存对应20-25个分片。当尝试创建超过限制的分片时,会遇到错误。解决方案是通过调整集群设置,如`_cluster/settings`接口,将`max_shards_per_node`设置为2000。同时,强调了分片数量与内存的关系及避免大分片的重要性,以保持集群健康。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

this action would add [20] total shards, but this cluster currentlyhas [1986]/[2000] maximum shards

原因是因为 本次需要生成20个分片,分片数达到了上限,默认只允许2000个分片,问题是因为集群分片数不足引起的。

分析

从Elasticsearch v7.0.0 开始,集群中的每个节点默认限制 1000 个shard,如果你的es集群有2个数据节点,那么最多2000 shards。

Elasticsearch中的数据组织成索引。每一个索引由一个或多个分片组成。每个分片是Luncene索引的一个实例,你可以把实例理解成自管理的搜索引擎,用于在Elasticsearch集群中对一部分数据进行索引和处理查询。

当然并不是分片数越多越好,一般分片数多少与内存挂钩,
您可以在集群节点上保存的分片数量与您可用的堆内存大小成正比,
一个很好的经验法则是:
确保每个节点的分片数量保持在低于每1GB堆内存对应集群的分片在20-25之间
因此,具有30GB堆内存的节点最多可以有600-750个分片,但是进一步低于此限制,您可以保持更好。 这通常会帮助群体保持处于健康状态。

提示:避免有非常大的分片,因为大的分片可能会对集群从故障中恢复的能力产生负面影响。
对于多大的分片没有固定的限制,但是分片大小为50GB通常被界定为适用于各种用例的限制

解决办法

curl -XPUT -H "Content-Type:application/json" 
http://localhost:9200/_cluster/settings -d 
'{"transient":{"cluster":{"max_shards_per_node":2000}}}'

在这里插入图片描述

curl -XGET -u admin:Admin http://xxx:9200/_cluster/settings

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值