...
A rolling restart of the ES cluster may be needed to upgrade the Elasticsearch version or to perform maintenance on the server itself, such as an OS update or hardware change. This process keeps the cluster operational while taking nodes offline one at a time. Because Elasticsearch prefers to keep data fully replicated and evenly balanced, it must be made to pause rebalancing until the rolling restart completes.
This pausing is performed through ES settings changes, as recommended by Elasticsearch in the bolded links below. The essential process is this:
Start maintenance mode by changing Change the ES settings to start maintenance mode.
Complete the maintenance work (such as upgrading ES) and rolling restart.
Stop maintenance mode by restoring Restore the ES settings to stop maintenance mode.
Follow the steps in the Elasticsearch documentation, with this important addition for versions before Elasticsearch 7:specified below:
Info | |||||
---|---|---|---|---|---|
ONLY for Elasticsearch Clusters Prior to Version 7Set the
|
...
Follow the Elasticsearch rolling restart procedure for the version:
...
After maintenance is complete, restore |
...
.
|
Follow the Elasticsearch rolling restart procedure for the version:
ES Rolling Upgrades (7.17): Follow steps 1 and 2 (disable shard allocation and synced flush).
Disable shard allocation with a curl like this:Code Block curl -X PUT "ES_NODE:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d' { "persistent": { "cluster.routing.allocation.enable": "primaries" } } '
Perform a Synced flush with a curl like this (optional):
Code Block curl -X POST "ES_NODE:9200/_flush/synced?pretty"
Stop the Elasticsearch node if you are shutting down the server for maintenance.
Code Block systemctl stop elasticsearch
Or, restart the service if you made configuration changes.
Code Block systemctl restart elasticsearch
After the server and service have started, you can re-enable shard allocation.
Code Block curl -X PUT "ES_NODE:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d' { "persistent": { "cluster.routing.allocation.enable": null } } '
Monitor the cluster health and wait for the
status
column to switch togreen
. Once the node isgreen
, all primary and replica shards have been allocated.Code Block curl -X GET "ES_NODE:9200/_cat/health?v=true&pretty"
Monitor the recovery status if it is in
yellow
orred
status.Code Block curl -X GET "ES_NODE:9200/_cat/recovery?pretty"