无法使用cluster.routing.allocation移动分片

时间:2018-09-23 15:05:40

标签: elasticsearch elasticsearch-5

我有一个ElasticSearch集群,该集群在2个数据节点(es-data-0和es-data-1)上具有多个索引,并且想要在停用它之前将所有分片移出es-data-1节点。

一次移动碎片1效果很好。以下命令需要几秒钟来移动分片。

table.deleteRows(keys)
  .then(function(data) {
    const apiResponse = data[0];
  });

但是,如果我尝试执行群集级分片分配过滤,则不会影响。例如,以下内容对分片状态没有明显影响:

POST /_cluster/reroute
{
    "commands": [
        {
            "move": {
                "index" : "index_operations_log",
                "shard" : 0,
                "from_node" : "es-data-1",
                "to_node" : "es-data-0"
            }
        }
    ]
}

即使它返回

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

PUT /_cluster/settings
{
    "transient": {
        "cluster.routing.allocation.exclude._name": "es-data-1"
    }
}

我想念什么?

1 个答案:

答案 0 :(得分:0)

弄清楚了。我跑了

GET /_cluster/settings

,发现我早些时候已经设置了一些cluster.routing.allocation设置,这些设置与这些新设置冲突。我通过将它们的值设置为“”清除了冲突的规则,并且碎片开始移动。

通常,

PUT /_cluster/settings
{
    "transient" : {
        "cluster.routing.allocation.require": "..."
    }
}

电话不会报告错误,因此我发现解决上述问题的唯一方法是-如果分片未按预期移动,请尝试使用POST /_cluster/reroute一次移动分片1。这将报告详细的错误。然后,如果您可以使用POST /_cluster/reroute移动单个分片,但集群或索引级分片移动仍然不起作用,请使用 GET /_cluster/settingsGET /*/settings
检查其他现有的路由分配规则是否冲突。 如果它们存在,则可以通过对其值=“”进行PUT /_cluster/settings来重置它们。