I'm migrating shards from some old nodes to some new nodes. I excluded the old nodes as follows:
PUT /_cluster/settings?pretty
{
"transient": {
"cluster.routing.allocation.exclude._name": "node-1,node-2,node-3,node-4,node-5,node-6,node-7,node-8,node-9"
}
}
Halfway through, I noticed a config problem on one of the new nodes so I stopped rebalancing as follows:
PUT /_cluster/settings
{
"transient": {
"cluster.routing.allocation.cluster_concurrent_rebalance": 0
}
}
After fixing the node's config (it was not a master node) and restarting it, I re-enabled rebalancing:
PUT /_cluster/settings
{
"transient": {
"cluster.routing.allocation.cluster_concurrent_rebalance": -1
}
}
Well, rebalancing started up, but the exclude list was ignored. Shards got equally distributed among old and new nodes. I verified the transient cluster setting was still in place with
GET _cluster/settings
I re-sent the cluster.routing.allocation.exclude._name
cluster setting to no avail. Then I set it to the empty string "" and then re-sent in the "node-1,node-2,node-3,node-4,node-5,node-6,node-7,node-8,node-9" list. This worked!
I'm glad that this worked, but it didn't work as I expected. Did I go about this the wrong way?