我有一个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"
}
}
我想念什么?
答案 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/settings
和
GET /*/settings
检查其他现有的路由分配规则是否冲突。
如果它们存在,则可以通过对其值=“”进行PUT /_cluster/settings
来重置它们。