Upgrading one node at a time, as suggested by the documentation, might not be feasible when ES deployment is part of an immutable infrastructure.
This is my approach when upgrading from minor versions. It is a sort of blue/green deployment.
- Disable shard allocation
- Add X new upgraded nodes to the cluster. Where X is the number of current live nodes
- Exclude old nodes from allocation:
cluster.routing.allocation.exclude._ip : ip1,ip2,ip3...
- Re-enable shard allocation. At this point, all the shards start migrating to the new upgraded nodes.
- Wait for shard allocation to be completed.
- Take the old nodes offline.
While this strategy is far to be optimal for a very large deployment, since it implies that the whole data has to be moved from the "blue" to the "green" cluster, I'm just wondering if I can consider it safe & legit.