0
点赞
收藏
分享

微信扫一扫

解决Elasticsearch 7.X分片数量不足导致写入失败问题

1,问题分析:

这是业务程序向ES请求创建新索引时,日志出现以下报错信息:

’status‘: 400,'error': {'type': 'validation_exception','reason': 'Validation Failed: 1: this action would add [2] total shards,but this cluster currently has [1000]/[1000] maximum shards open;'},

从Elasticsearch7.X版本开始,每个node默认只允许有1000个分片,所以上述报错是因为集群分片数不足引起的;

2,问题解决:

修改ES的分片数量

1,通过配置文件 elasticsearch.yml 修改节点(集群)分片数量,需要重启服务。(永久生效)

cluster.max_shards_per_node: 10000

2,通过curl命令修改分片数量(k8s集群针对pod适用)

集群更新API有两种工作模式:

1)临时(Transient):这些变更在集群重启之前一直会生效。一旦整个集群重启,这些配置就被清除。

2)永久(Persistent):这些变更会永久存在直到被显式修改。即使全集群重启它们也会存活并覆盖掉静态配置文件里得选项。

临时或永久配置需要在json体里分别指定。


  • 临时生效:

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

  • 永久生效:

curl -XPUT -H "Content-Type:application/json" http://127.0.0.1:9200/_cluster/settings -d '{ "persistent": { "cluster": { "max_shards_per_node": 10000 } } }'

  • 查看分片数量:

$ curl -XGET http://127.0.0.1:9200/_cluster/settings?pretty
{
"persistent" : {
"cluster" : {
"max_shards_per_node" : "10000"
}
},
"transient" : {
"cluster" : {
"max_shards_per_node" : "10000"
}
}
}

举报

相关推荐

0 条评论