背景
收到一个学员的问题,在创建索引的时候,提示如下报错:
原因分析:
如果不去更改es的默认配置,es集群的默认最大分片数是1000,所以你需要调大ElasticSearch的默认分片数从而来来容纳更多的数据。
解决:
(1)使用Head插件或者Kiabana的Dev Tools 执行如下命令(通过下面的命令重启es会失效,因为 transient 是临时生效的):
PUT /_cluster/settings
{
"transient": {
"cluster": {
"max_shards_per_node":900000
}
}
}
(2) 当然你也可以直接修改 elasticsearch.yml的配置文件,设置成你想要的值,然后再重启。通过配置文件修改的参数是永久生效的。
cluster.max_shards_per_node: 900000
查看是否生效
GET /_cluster/settings?pretty
{
"persistent" : {
"xpack" : {
"monitoring" : {
"collection" : {
"enabled" : "true"
}
}
}
},
"transient" : {
"cluster" : {
"max_shards_per_node" : "900000"
}
}
}
(3)如果想要通过CURL方式永久生效而不去修改配置文件如何实现了?
我们来看看官方文档怎么讲的:
官网: https://www.elastic.co/guide/en/elasticsearch/reference/7.x/cluster-update-settings.html
我们翻译成中文是这样子:
Elasticsearch 里很多设置都是动态的,可以通过 API 修改。需要强制重启节点(或者集群)的配置修改都要极力避免。而且虽然通过静态配置项也可以完成这些变更,我们建议你还是用 API 来实现。
集群更新
API 有两种工作模式:临时(Transient)
这些变更在集群重启之前一直会生效。一旦整个集群重启,这些配置就被清除。
永久(Persistent)
这些变更会永久存在直到被显式修改。即使全集群重启它们也会存活下来并覆盖掉静态配置文件里的选项。
临时或永久配置需要在 JSON 体里分别指定。
改成如下:
PUT /_cluster/settings
{
"persistent": {
"cluster": {
"max_shards_per_node":900000
}
}
}
重启ES之后再去查查看是否生效了。
{
"persistent" : {
"cluster" : {
"max_shards_per_node" : "900000"
},
"indices" : {
"breaker" : {
"total" : {
"limit" : "95%"
}
}
},
"xpack" : {
"monitoring" : {
"collection" : {
"enabled" : "true"
}
}
}
}
}