content/operate/rs/7.22/installing-upgrading/upgrading/upgrade-os.md
To upgrade the operating system (OS) on a Redis Enterprise Software cluster to a later major version, perform a rolling upgrade. Because you upgrade one node at a time, you can upgrade your cluster's OS without downtime.
Before you upgrade a cluster's operating system:
[Upgrade all nodes in the cluster]({{< relref "/operate/rs/7.22/installing-upgrading/upgrading/upgrade-cluster" >}}) to a Redis Enterprise Software version that supports the OS's current version and upgrade version.
To learn which versions of Redis Enterprise Software support specific OS versions, see [Supported platforms]({{< relref "/operate/rs/7.22/references/supported-platforms#supported-platforms" >}}).
If the cluster contains any databases that use modules:
Update all nodes in the cluster to [Redis Enterprise Software version 7.2.4-52]({{< relref "/operate/rs/release-notes/rs-7-2-4-releases" >}}) or later before you upgrade the OS.
Check the status of modules using [rladmin]({{< relref "/operate/rs/7.22/references/cli-utilities/rladmin" >}}):
rladmin status modules
The output lists the module versions installed on the cluster and the module versions used by existing databases:
CLUSTER MODULES:
MODULE VERSION
RedisBloom 2.6.3
RediSearch 2 2.8.4
RedisGears 2.0.12
RedisGraph 2.10.12
RedisJSON 2.6.6
RedisTimeSeries 1.10.6
DATABASE MODULES:
DB:ID NAME MODULE VERSION ARGS STATUS
db:1 db1 RediSearch 2 2.6.9 PARTITIONS AUTO OK, OLD MODULE VERSION
db:1 db1 RedisJSON 2.4.7 OK, OLD MODULE VERSION
Upload module packages for the target OS version to a node in the existing cluster. See [Install a module on a cluster]({{< relref "/operate/oss_and_stack/stack-with-enterprise/install/add-module-to-cluster" >}}) for instructions.
{{<note>}} The uploaded module packages have the following requirements:
The module is compiled for the target OS version.
The module version matches the version currently used by databases. {{</note>}}
To upgrade the cluster's operating system, use one of the following rolling upgrade methods:
Extra node method - recommended if you have additional resources available
Replace node method - recommended if you cannot temporarily allocate additional resources
Complete all prerequisites before starting the rolling upgrade.
Create a node with the OS upgrade version.
[Install the cluster's current Redis Enterprise Software version]({{< relref "/operate/rs/7.22/installing-upgrading/install/install-on-linux" >}}) on the new node using the installation package for the OS upgrade version.
[Add the new node]({{< relref "/operate/rs/7.22/clusters/add-node" >}}) to the cluster.
If the [cluster uses DNS]({{<relref "/operate/rs/7.22/networking/cluster-dns">}}), add the new node’s IP address to the DNS records.
[Remove one node]({{< relref "/operate/rs/7.22/clusters/remove-node#remove-a-node" >}}) running the earlier OS version from the cluster.
Repeat the previous steps until all nodes with the earlier OS version are removed. If the final node to remove from the cluster is the primary node, [demote it]({{<relref "/operate/rs/7.22/clusters/change-node-role#demote-primary-node">}}) to a secondary node before you remove it.
Complete all prerequisites before starting the rolling upgrade.
[Remove a node]({{< relref "/operate/rs/7.22/clusters/remove-node#remove-a-node" >}}) with the earlier OS version from the cluster.
Uninstall Redis Enterprise Software from the removed node:
sudo ./rl_uninstall.sh
Either upgrade the existing node to the OS upgrade version, or create a new node with the OS upgrade version.
[Install the cluster's current Redis Enterprise Software version]({{< relref "/operate/rs/7.22/installing-upgrading/install/install-on-linux" >}}) on the upgraded node using the installation package for the OS upgrade version.
[Add the new node]({{< relref "/operate/rs/7.22/clusters/add-node" >}}) to the cluster.
If you want to reuse the removed node's ID when you add the node to the cluster, run [rladmin cluster join]({{< relref "/operate/rs/7.22/references/cli-utilities/rladmin/cluster/join" >}}) with the replace_node flag:
rladmin cluster join nodes <cluster_member_ip_address> username <username> password <password> replace_node <node_id>
If the [cluster uses DNS]({{<relref "/operate/rs/7.22/networking/cluster-dns">}}), add the new node’s IP address to the DNS records.
Verify node health:
Run rlcheck on all nodes:
rlcheck
The output lists the result of each verification test:
##### Welcome to Redis Enterprise Cluster settings verification utility ####
Running test: verify_bootstrap_status
PASS
...
Running test: verify_encrypted_gossip
PASS
Summary:
-------
ALL TESTS PASSED.
For healthy nodes, the expected output is ALL TESTS PASSED.
Run [rladmin status]({{< relref "/operate/rs/7.22/references/cli-utilities/rladmin/status" >}}) on the new node:
rladmin status extra all
The expected output is the OK status for the cluster, nodes, endpoints, and shards:
CLUSTER:
OK. Cluster master: 2 (<IP.address>)
Cluster health: OK, [0, 0.0, 0.0]
failures/minute - avg1 0.00, avg15 0.00, avg60 0.00.
...
Repeat the previous steps until all nodes with the earlier OS version are replaced. If the final node to remove from the cluster is the primary node, [demote it]({{<relref "/operate/rs/7.22/clusters/change-node-role#demote-primary-node">}}) to a secondary node before you remove it.