我有一个ElasticSearch集群,在两个数据节点(es 0&es 1)上有几个索引,并且希望在退役之前将节点es 1中的所有碎片移出。
一次移动碎片1很好。下面的命令需要几秒钟的时间才能移动碎片。
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"
}
}即使它回来了
{
"acknowledged": true,
"persistent": {},
"transient": {
"cluster": {
"routing": {
"allocation": {
"exclude": {
"_name": "es-data-1"
}
}
}
}
}
}我遗漏了什么?
发布于 2018-09-23 16:33:22
弄明白了。我跑了
GET /_cluster/settings
并且看到我从早些时候就设置了一些与这些新设置冲突的cluster.routing.allocation设置。我通过将它们的值设置为"“来清除冲突的规则,碎片开始移动。
一般来说,
PUT /_cluster/settings
{
"transient" : {
"cluster.routing.allocation.require": "..."
}
}call不报告错误,所以我找到了解决上述问题的唯一方法--如果碎片没有按预期移动,尝试使用POST /_cluster/reroute一次移动碎片1。这报告了详细的错误。然后,如果您能够使用POST /_cluster/reroute移动单个碎片,但是集群级或索引级碎片移动仍然不起作用,则使用GET /_cluster/settings和GET /*/settings。
若要检查其他冲突的现有路由分配规则,请执行以下操作。如果它们存在,则可以通过使用值= "“执行PUT /_cluster/settings来重置它们。
https://stackoverflow.com/questions/52467394
复制相似问题