Elasticsearch 默认有单节点 number_of_shards 的最大数量限制,以避免分片过多对性能造成负面影响。这个限制由 cluster.max_shards_per_node 参数控制。

调整单节点最大分片数量的步骤:


1. 查看当前设置
运行以下命令检查当前 cluster.max_shards_per_node 设置的值,如果未显式设置,默认值是 1000。

GET _cluster/settings


1. 更新 cluster.max_shards_per_node
如果需要增加单节点的最大分片数,可以使用如下命令调整:

PUT _cluster/settings
{
  "persistent": {
    "cluster.max_shards_per_node": 2000
  }
}


其中 2000 是新的最大分片数量,你可以根据需求调整。

- persistent 表示此更改会持续生效,直到手动修改或集群重启。
- 也可以使用 transient,此更改会在集群重启后恢复默认值。

1. 注意事项

- 分片过多的影响:过多的分片会导致集群资源过度消耗(如内存、CPU),需要评估是否有必要调整。
- 优化分片大小:检查索引的分片设计,避免每个分片过小。Elasticsearch 官方建议每个分片的大小在 10GB 到 50GB 之间。
- 监控性能:调整后需观察集群性能变化,避免单节点因超出资源承载能力而导致不稳定。
2. 验证设置
再次运行以下命令,确保更改已经生效:

GET _cluster/settings


如果集群仍然需要大量分片,可能需要优化索引结构、合并小分片,或增加节点来分担负载。