| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 | [[rolling-upgrades]]== Rolling upgradesA rolling upgrade allows an {es} cluster to be upgraded one node ata time so upgrading does not interrupt service. Running multiple versions of{es} in the same cluster beyond the duration of an upgrade isnot supported, as shards cannot be replicated from upgraded nodes to nodesrunning the older version.We strongly recommend that when you upgrade you divide your cluster's nodesinto the following two groups and upgrade the groups in this order:. Nodes that are not <<master-node,master-eligible>>. You can retrieve a listof these nodes with `GET /_nodes/_all,master:false` or by finding all the nodesconfigured with `node.master: false`.. Master-eligible nodes, which are the remaining nodes. You can retrieve a listof these nodes with `GET /_nodes/master:true`.You may upgrade the nodes within each of these groups in any order.Upgrading the nodes in this order ensures that the master-ineligible nodes arealways running a version at least as new as the master-eligible nodes. Newernodes can always join a cluster with an older master, but older nodes cannotalways join a cluster with a newer master. By upgrading the master-eligiblenodes last you ensure that all the master-ineligible nodes will be able to jointhe cluster whether the master-eligible nodes have been upgraded or not. If youupgrade any master-eligible nodes before the master-ineligible nodes then thereis a risk that the older nodes will leave the cluster and will not be able torejoin until they have been upgraded.Rolling upgrades are supported:* Between minor versions* {stack-ref-68}/upgrading-elastic-stack.html[From 5.6 to 6.8]* {stack-ref-70}/upgrading-elastic-stack.html[From 6.8 to 7.0]* From {prev-major-version} to {version}ifeval::[ "{version}" != "{minor-version}.0" ]* From any version since {minor-version}.0 to {version}endif::[]Upgrading directly to {version} from 6.6 or earlier requires a<<restart-upgrade, full cluster restart>>.include::preparing_to_upgrade.asciidoc[][discrete]=== Upgrading your clusterTo perform a rolling upgrade to {version}:. *Disable shard allocation*.+--include::disable-shard-alloc.asciidoc[]--. *Stop non-essential indexing and perform a flush.* (Optional)+--While you can continue indexing during the upgrade, shard recoveryis much faster if you temporarily stop non-essential indexing and perform a<<indices-flush, flush>>.[source,console]--------------------------------------------------POST /_flush----------------------------------------------------. *Temporarily stop the tasks associated with active {ml} jobs and {dfeeds}.* (Optional)+--include::close-ml.asciidoc[]--. [[upgrade-node]] *Shut down a single node*.+--include::shut-down-node.asciidoc[]--. *Upgrade the node you shut down.*+--include::upgrade-node.asciidoc[]include::set-paths-tip.asciidoc[][[rolling-upgrades-bootstrapping]]NOTE: You should leave `cluster.initial_master_nodes` unset while performing arolling upgrade. Each upgraded node is joining an existing cluster so there isno need for <<modules-discovery-bootstrap-cluster,cluster bootstrapping>>. Youmust configure <<built-in-hosts-providers,either `discovery.seed_hosts` or`discovery.seed_providers`>> on every node.--. *Upgrade any plugins.*+Use the `elasticsearch-plugin` script to install the upgraded version of eachinstalled {es} plugin. All plugins must be upgraded when you upgradea node.. If you use {es} {security-features} to define realms, verify that your realmsettings are up-to-date. The format of realm settings changed in version 7.0, inparticular, the placement of the realm type changed. See<<realm-settings,Realm settings>>.. *Start the upgraded node.*+--Start the newly-upgraded node and confirm that it joins the cluster by checkingthe log file or by submitting a `_cat/nodes` request:[source,console]--------------------------------------------------GET _cat/nodes----------------------------------------------------. *Reenable shard allocation.*+--For data nodes, once the node has joined the cluster, remove the`cluster.routing.allocation.enable` setting to enable shard allocation and startusing the node:[source,console]--------------------------------------------------PUT _cluster/settings{  "persistent": {    "cluster.routing.allocation.enable": null  }}----------------------------------------------------. *Wait for the node to recover.*+--Before upgrading the next node, wait for the cluster to finish shard allocation.You can check progress by submitting a <<cat-health,`_cat/health`>> request:[source,console]--------------------------------------------------GET _cat/health?v=true--------------------------------------------------Wait for the `status` column to switch to `green`. Once the node is `green`, allprimary and replica shards have been allocated.[IMPORTANT]====================================================During a rolling upgrade, primary shards assigned to a node running the newversion cannot have their replicas assigned to a node with the oldversion. The new version might have a different data format that isnot understood by the old version.If it is not possible to assign the replica shards to another node(there is only one upgraded node in the cluster), the replicashards remain unassigned and status stays `yellow`.In this case, you can proceed once there are no initializing or relocating shards(check the `init` and `relo` columns).As soon as another node is upgraded, the replicas can be assigned and thestatus will change to `green`.====================================================Shards that were not <<indices-flush,flushed>> might take longer torecover. You can monitor the recovery status of individual shards bysubmitting a <<cat-recovery,`_cat/recovery`>> request:[source,console]--------------------------------------------------GET _cat/recovery--------------------------------------------------If you stopped indexing, it is safe to resume indexing as soon asrecovery completes.--. *Repeat*+--When the node has recovered and the cluster is stable, repeat these stepsfor each node that needs to be updated. You can monitor the health of the clusterwith a <<cat-health,`_cat/health`>> request:[source,console]--------------------------------------------------GET /_cat/health?v=true--------------------------------------------------And check which nodes have been upgraded with a <<cat-nodes,`_cat/nodes`>> request:[source,console]--------------------------------------------------GET /_cat/nodes?h=ip,name,version&v=true----------------------------------------------------. *Restart machine learning jobs.*+--include::open-ml.asciidoc[]--[IMPORTANT]====================================================During a rolling upgrade, the cluster continues to operate normally. However,any new functionality is disabled or operates in a backward compatible modeuntil all nodes in the cluster are upgraded. New functionality becomesoperational once the upgrade is complete and all nodes are running the newversion. Once that has happened, there's no way to return to operating in abackward compatible mode. Nodes running the previous version will not beallowed to join the fully-updated cluster.In the unlikely case of a network malfunction during the upgrade process thatisolates all remaining old nodes from the cluster, you must take the old nodesoffline and upgrade them to enable them to join the cluster.If you stop half or more of the master-eligible nodes all at once during theupgrade then the cluster will become unavailable, meaning that the upgrade isno longer a _rolling_ upgrade. If this happens, you should upgrade and restartall of the stopped master-eligible nodes to allow the cluster to form again, asif performing a <<restart-upgrade,full-cluster restart upgrade>>. It may alsobe necessary to upgrade all of the remaining old nodes before they can join thecluster after it re-forms.Similarly, if you run a testing/development environment with only one masternode, the master node should be upgraded last. Restarting a single master nodeforces the cluster to be reformed. The new cluster will initially only have theupgraded master node and will thus reject the older nodes when they re-join thecluster. Nodes that have already been upgraded will successfully re-join theupgraded master.====================================================
 |