ElasticSearch:如何禁用所有分片的分片重新分配?

时间:2015-04-02 08:54:36

标签: elasticsearch

我为elasticsearch开发了一个搜索插件,但是在升级这个插件时,我需要逐个关闭节点,每次我都要等待重新分配过程很长时间。 在文档中,它表示可以通过以下方式停止重新分配过程:

curl -XPUT localhost:9200/_cluster/settings -d '{
    "transient" : {
           "cluster.routing.allocation.enable" : "none"
     }
}'

当我运行此命令时,出现以下错误:

ElasticsearchIllegalArgumentException[Can't update non dynamic settings[[index.transient.cluster.routing.allocation.enable]] for open indices[..]

我该怎么办?

顺便说一句: 抱歉我的英语不好......

2 个答案:

答案 0 :(得分:4)

如此接近!

尝试:

curl -XPUT 'http://localhost:9200/_cluster/settings' -d '{
"transient" : {
    "cluster.routing.allocation.disable_allocation": "true"
}}'

答案 1 :(得分:0)

OP可能使用了不支持的旧版本Elasticsearch 动态更新“ cluster.routing.allocation.enable”和/或“ cluster.routing.rebalance.enable”。

但是,在最新的Elasticsearch版本中,这两个设置应该 成为dynamictransient,不再是staticpersistent

这是Elasticsearch当前文档中有关分片分配设置的更多详细信息。

https://www.elastic.co/guide/en/elasticsearch/reference/current/shards-allocation.html

用户可以像这样在Kibana开发工具控制台中应用/撤消这些设置

PUT _cluster/settings
{
  "transient" : {
    "cluster.routing.allocation.enable": "none",
    "cluster.routing.rebalance.enable" : "none"
  }
}

# After bouncing ES cluster
PUT _cluster/settings
{
  "transient" : {
    "cluster.routing.allocation.enable": "all",
    "cluster.routing.rebalance.enable" : "all"
  }
}