123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- [[rolling-upgrades]]
- === Rolling upgrades
- A rolling upgrade allows the Elasticsearch cluster to be upgraded one node at
- a time, with no downtime for end users. Running multiple versions of
- Elasticsearch in the same cluster for any length of time beyond that required
- for an upgrade is not supported, as shards will not be replicated from the
- more recent version to the older version.
- Consult this <<setup-upgrade,table>> to verify that rolling upgrades are
- supported for your version of Elasticsearch.
- To perform a rolling upgrade:
- ==== Step 1: Disable shard allocation
- When you shut down a node, the allocation process will immediately try to
- replicate the shards that were on that node to other nodes in the cluster,
- causing a lot of wasted I/O. This can be avoided by disabling allocation
- before shutting down a node:
- [source,js]
- --------------------------------------------------
- PUT /_cluster/settings
- {
- "transient": {
- "cluster.routing.allocation.enable": "none"
- }
- }
- --------------------------------------------------
- // AUTOSENSE
- ==== Step 2: Stop non-essential indexing and perform a synced flush (Optional)
- You may happily continue indexing during the upgrade. However, shard recovery
- will be much faster if you temporarily stop non-essential indexing and issue a
- <<indices-synced-flush, synced-flush>> request:
- [source,js]
- --------------------------------------------------
- POST /_flush/synced
- --------------------------------------------------
- // AUTOSENSE
- A synced flush request is a ``best effort'' operation. It will fail if there
- are any pending indexing operations, but it is safe to reissue the request
- multiple times if necessary.
- [[upgrade-node]]
- ==== Step 3: Stop and upgrade a single node
- Shut down one of the nodes in the cluster *before* starting the upgrade.
- [TIP]
- ================================================
- When using the zip or tarball packages, the `config`, `data`, `logs` and
- `plugins` directories are placed within the Elasticsearch home directory by
- default.
- It is a good idea to place these directories in a different location so that
- there is no chance of deleting them when upgrading Elasticsearch. These
- custom paths can be <<paths,configured>> with the `path.config` and
- `path.data` settings.
- The Debian and RPM packages place these directories in the
- <<setup-dir-layout,appropriate place>> for each operating system.
- ================================================
- To upgrade using a <<setup-repositories,Debian or RPM>> package:
- * Use `rpm` or `dpkg` to install the new package. All files should be
- placed in their proper locations, and config files should not be
- overwritten.
- To upgrade using a zip or compressed tarball:
- * Extract the zip or tarball to a new directory, to be sure that you don't
- overwrite the `config` or `data` directories.
- * Either copy the files in the `config` directory from your old installation
- to your new installation, or use the `--path.config` option on the command
- line to point to an external config directory.
- * Either copy the files in the `data` directory from your old installation
- to your new installation, or configure the location of the data directory
- in the `config/elasticsearch.yml` file, with the `path.data` setting.
- ==== Step 4: Start the upgraded node
- Start the now upgraded node and confirm that it joins the cluster by checking
- the log file or by checking the output of this request:
- [source,sh]
- --------------------------------------------------
- GET _cat/nodes
- --------------------------------------------------
- // AUTOSENSE
- ==== Step 5: Reenable shard allocation
- Once the node has joined the cluster, reenable shard allocation to start using
- the node:
- [source,js]
- --------------------------------------------------
- PUT /_cluster/settings
- {
- "transient": {
- "cluster.routing.allocation.enable": "all"
- }
- }
- --------------------------------------------------
- // AUTOSENSE
- ==== Step 6: Wait for the node to recover
- You should wait for the cluster to finish shard allocation before upgrading
- the next node. You can check on progress with the <<cat-health,`_cat/health`>>
- request:
- [source,sh]
- --------------------------------------------------
- GET _cat/health
- --------------------------------------------------
- // AUTOSENSE
- Wait for the `status` column to move from `yellow` to `green`. Status `green`
- means that all primary and replica shards have been allocated.
- [IMPORTANT]
- ====================================================
- During a rolling upgrade, primary shards assigned to a node with the higher
- version will never have their replicas assigned to a node with the lower
- version, because the newer version may have a different data format which is
- not understood by the older version.
- If it is not possible to assign the replica shards to another node with the
- higher version -- e.g. if there is only one node with the higher version in
- the cluster -- then the replica shards will remain unassigned and the
- cluster health will remain status `yellow`.
- In this case, check that there are no initializing or relocating shards (the
- `init` and `relo` columns) before proceding.
- As soon as another node is upgraded, the replicas should be assigned and the
- cluster health will reach status `green`.
- ====================================================
- Shards that have not been <<indices-synced-flush,sync-flushed>> may take some time to
- recover. The recovery status of individual shards can be monitored with the
- <<cat-recovery,`_cat/recovery`>> request:
- [source,sh]
- --------------------------------------------------
- GET _cat/recovery
- --------------------------------------------------
- // AUTOSENSE
- If you stopped indexing, then it is safe to resume indexing as soon as
- recovery has completed.
- ==== Step 7: Repeat
- When the cluster is stable and the node has recovered, repeat the above steps
- for all remaining nodes.
|