title: Subscription and database maintenance

summary: Shows how to set manual maintenance windows and skip maintenance.

title: Set maintenance windows

title: Overview

text: Redis will maintain your Redis Cloud subscriptions and databases as needed to ensure your databases are running the most stable and up-to-date version of Redis.

title: Maintenance windows

text: Maintenance windows define when Redis can perform maintenance on your subscriptions and databases. Maintenance window options depend on your subscription type.

title: Redis Cloud Pro

text: For Redis Cloud Pro plans, Redis will perform maintenance automatically while limiting service disruption as much as possible. If you want to control when we can perform maintenance for a Redis Cloud Pro subscription, you can [set manual maintenance windows]().

title: Redis Cloud Essentials

text: Redis Cloud Essentials databases have a set maintenance window based on the cloud provider region. The maintenance window for Redis Cloud Essentials databases is **daily from 12 AM to 6 AM** in the region's local time zone. We won't use more than one maintenance window per week unless we need to do [urgent maintenance](), and we won't perform any maintenance that introduces breaking changes during these maintenance windows.

title: Maintenance activities

text:
During maintenance, Redis ensures the stability of your subscriptions and databases.

This includes, but is not limited to:

- Upgrading Redis or an advanced capability to the latest version
- Cluster optimization
- Replacing a cluster node
- Adding more memory to a node
- Applying security patches

Redis will notify users by email when maintenance starts and ends. For more details, see [Notifications](#notifications).

During maintenance, your database will be operational, but you may notice some latency when connecting to your databases.

Your application may also disconnect from your database for a few seconds. Most Redis clients are set to refresh their DNS address when they reconnect to the database, and you will not be required to perform any further action. If you encounter connectivity problems for more than a minute during maintenance, please refresh your DNS entries.

To make sure your applications are set to reconnect after maintenance activity, see [Develop highly available and resilient apps with Redis Cloud]().

title: Urgent maintenance

text:
Urgent maintenance refers to any activity that could affect service and cannot wait for scheduling. This includes applying urgent security patches.

Redis can perform urgent maintenance at any time, even if you have set a manual maintenance window or have temporarily [skipped maintenance](). Redis will notify you by email when urgent maintenance starts and ends.

title: Major upgrades

text: We won't schedule major upgrades or upgrades that might include breaking changes until you opt-in to those changes. You can control your Redis major version on the [subscription page]().

title: Notifications

text:
Redis will notify you by email when maintenance starts and ends. If Redis needs an action from you to start maintenance, we will notify you with a reasonable amount of time before planned maintenance.

If you want to receive advance maintenance notifications, you must [set manual maintenance windows]() and [contact support](https://redis.io/support/) to request advance maintenance notifications.

To receive maintenance notifications by email:

1. Go to [Access Management]() and select your account in the list.

1. Select the Edit button.

1. Select **Operational emails** if it is not already turned on.

1. Select **Save user** to save your changes.


title: Set maintenance windows

page_type: content

title: Overview

role: overview

text:
By default, Redis will maintain your Redis Cloud subscriptions and databases as needed. During maintenance, you may notice some latency when connecting to your databases. For more information about the types of maintenance and how Redis maintains your subscriptions, see [Maintenance]().

For Redis Cloud Pro plans, Redis will perform maintenance automatically while limiting service disruption as much as possible. If you want to control when Redis performs maintenance for a Redis Cloud Pro subscription, you can [set manual maintenance windows](#set-manual-maintenance-windows) to ensure non-urgent maintenance will occur at set times. Configuring or altering the maintenance window will not have any impact on your subscription or databases.

You can only set manual maintenance windows for Redis Cloud Pro plans. A Redis Cloud Essentials database has a set maintenance window based on the region where it is located. See [Essentials maintenance]() for more information.

title: Set manual maintenance windows

role: content

text:
To set manual maintenance windows for a single Redis Cloud Pro subscription:

1. From the [Redis Cloud console](https://cloud.redis.io/), select the **Subscriptions** menu and then select your subscription from the list.

1. Select the **Overview** tab.

1. In the **Maintenance Windows** panel, select **Manual**.

1. Click **Activate** to confirm your selection.

1. Enter the maintenance window time frame details.

    - Select the days that Redis can perform maintenance in the **Days** drop-down.
    - Select the time that Redis can start performing maintenance on those days in the **From** drop-down.
    - Select the amount of time that Redis can perform maintenance in the **Duration** drop-down.
    - Select **+ Time Frame** to add another time frame for maintenance.
    - Select **Advance notification** if you want to be notified of maintenance in advance.

You must [contact support](https://redis.io/support/) to request and be approved for advance maintenance notifications, otherwise skip this step as the this option does not appear by default.

    Redis recommends allowing maintenance on at least two different days for 8 hours on each day.

1. Click **Save**.

title: Skip maintenance temporarily

text:
To skip maintenance temporarily for a subscription:

1. From the [Redis Cloud console](https://cloud.redis.io/), select the **Subscriptions** menu and then select your subscription from the list.

1. Select the **Overview** tab.

1. In the **Maintenance Windows** panel, select **Skip the next 14 days**.

1. Click **Continue** to confirm your selection.

You will only be allowed to skip maintenance once per month.

During the skipped maintenance period, Redis will not perform any minor or major upgrades. Redis may perform [urgent maintenance]() on your subscription, but only if it is absolutely necessary.


title: Upgrade database from Redis Cloud Essentials to Redis Cloud Pro

summary: Upgrade your Redis Cloud Essentials subscription to a Redis Cloud Pro subscription.

title: Overview

text:
Redis Cloud Essentials supports low throughput workflows. It supports a range of availability, persistence, and backup options, and can be great for testing and prototyping. However, if your databases need higher throughput, or you're missing features that are not available with Redis Cloud Essentials, you may want to upgrade Redis Cloud Essentials to Redis Cloud Pro.

For more information about the different subscription plans, see [Subscription plans]().

To upgrade your Essentials plan, see [Upgrade subscription plan]().

title: Upgrade Essentials subscription to Pro

text:
To follow the steps in this guide, you must have a database with [Redis Cloud Essentials]() that you want to upgrade to Redis Cloud Pro.

To upgrade your Essentials database to Redis Cloud Pro:

1. [Create a new database in Redis Cloud Pro](#create-rcp) with the right specifications to be able to migrate your database.

1. [Migrate your Essentials database](#migrate-database) to your new Redis Cloud Pro database.

title: Create Redis Cloud Pro database {#create-rcp}

text:
[Create a new database]() with the following specifications:

- Select **Redis Cloud Pro** for your subscription type.
- Select the **Version** that matches the Redis version your Essentials subscriptions use.
- In the [**Sizing tab**](), create your databases with the following specifications:
    - Set the memory limit to comply with [Active-Passive memory requirements]() if you want to migrate your database using [Active-Passive]().
    - Select any advanced capabilities that your Essentials database offers. You can find a list of enabled advanced capabilities in the [Configuration tab]() of your database.

title: Migrate database

text:
You can migrate your Redis Cloud Essentials database to your new Redis Cloud Pro subscription using any method in the [Migrate databases]() guide. This guide uses [Active-Passive]() to migrate databases between subscriptions in the same account.

Before you follow this guide, be aware of the following limitations:

- This guide is for migrating databases between subscriptions in the same Redis Cloud console account. [Contact support](https://redis.io/support/) if you want to migrate a database between accounts using Active-Passive.

- As long as Active-Passive is enabled, data in the target database will not expire and will not be evicted regardless of the set [data eviction policy](). We recommend that you turn off Active-Passive after the databases are synced.

1. Select the database you want to migrate your data to. This will be your target database.

1. From the **Configuration** tab of the target database, select **Edit**.

1. In the **Durability** section, enable **Active-Passive Redis** and then select **Add Source**.

1. This will open the **Add Active-Passive Redis** screen. Select **Current account** to connect a database in your current account.

1. Select your Redis Cloud Essentials database from the **Source database** list. This will be your source database. You can type in the database's name to find it.

1. Select **Save Database** to begin updating the database.

    Initially, the database status is __Pending__, which means the update task is still running.

    The sync process doesn't begin until the database becomes `Active`.

    When data has fully migrated to the target database, database status reports `Synced`.

    Active-Passive sync lets you migrate data while apps and other connections are using the source database. Once the data is migrated, you should migrate active connections to the target database before you move on.

1. After your data and connections are migrated, turn off **Active-Passive Redis** from the target database.

1. [Delete the source database]().


title: Redis Cloud Essentials plans

summary: Provides detailed information on Redis Cloud Essentials plans.

title: Overview

text:
Redis Cloud Essentials is cost-efficient and designed for low-throughput scenarios. It supports a range of availability, persistence, and backup options.

[Essentials plan pricing](https://redis.io/pricing/#monthly) scales according to the memory size of the database defined in the subscription.  Additional limits also apply, as shown in the tables below.

The 30 MB Essentials plan is free; it's designed for learning and building test projects. It gives you enough space to learn Redis concepts and develop application prototypes.

Our paid plans start at 250 MB and offer extra features, like high availability and backups (both daily and instant). They are great for bigger projects or production environments that require increased storage, reliability, and other features to support your operational needs.

Essentials plans have bandwidth and throughput limits described in the tables below. We will notify you before limiting your database usage if you exceed these limits.

If you need additional resources, you can [upgrade your subscription]() at any time.

title: Current plans

text: These plans are currently offered for all new and upgraded Essentials subscriptions (updated December 2025).

title: Redis Cloud Essentials plans

text:
| **DB size**[1](#table-note-1) | **30 MB (Free)** | **250 MB** | **1 GB** | **2.5 GB** | **5 GB** | **12 GB** |
|---|---|---|---|---|---|---|
| **Concurrent
connections
per database** | 30 | 256 | 1024 | 2500 | 5000 | 10000 |
| **CIDR
 allow rules** | 1 | 4 | 4-8 | 4-8 | 4-16 | 4-32 |
| **Monthly
 total network
 bandwidth[2](#table-note-2)** | 5 GB | 100 GB | 200 GB | 400 GB | 800 GB | 2000 GB |
| **Maximum
 throughput[3](#table-note-3)** | 100 ops/sec | 1000 ops/sec | 2000 ops/sec | 4000 ops/sec | 8000 ops/sec | 16000 ops/sec |

1.  Database size includes replication where applicable. See [High availability cost impact]() for more information.

2.  The monthly total network bandwidth limit applies to the entire plan. All databases in the plan share the allocated bandwidth limit.

3.  Assumes request size of 1 KiB. Maximums are capped by actual MB/s reached. To find the MB/s limit, divide the Maximum throughput by 1024.

title: Redis Cloud Essentials plans with Redis Flex

text:
| **DB size**[1](#table-note-1-flex) | **1 GB** | **2.5 GB** | **5 GB** | **12 GB** | **25 GB** | **50 GB** | **100 GB** |
|---|---|---|---|---|---|---|---|
| **Concurrent
connections
per database** | 1024 | 2500 | 5000 | 10000 | 10000 | 10000 | 10000 |
| **CIDR
 allow rules** | 4-8 | 4-8 | 4-16 | 4-32 | 4-32 | 4-32 | 4-32 |
| **Monthly
 total network
 bandwidth** | 50 GB | 100 GB | 200 GB | 500 GB | 1000 GB | 2000 GB | 4000 GB |
| **Maximum
 throughput[2](#table-note-2-flex)** | 200 ops/sec | 500 ops/sec | 1000 ops/sec | 2400 ops/sec | 5000 ops/sec | 10000 ops/sec | 20000 ops/sec |

1.  Database size includes replication where applicable. See [High availability cost impact]() for more information.

2.  Assumes request size of 1 KiB. Maximums are capped by actual MB/s reached. To find the MB/s limit, divide the Maximum throughput by 1024.

title: Previous plans {#legacy}

text:
These plans were available before November 2023.

| **Max DB size **[1](#table-note-1-legacy)               | **30 MB**        | **100 MB**       | **250 MB**        | **500 MB**        | **1 GB**          | **2.5 GB**        | **5 GB**          | **10 GB**          |
|-----------------------------------------------------------------------------------|------------------|------------------|-------------------|-------------------|-------------------|-------------------|-------------------|--------------------|
| **Concurrent
connections
per database**                                   | 30               | 256              | 256               | 512               | 1024              | 2500              | 5000              | 10000              |
| **Monthly
 total network
 bandwidth**[2](#table-note-2-legacy) | 5 GB        | 50 GB       | 100 GB       | 150 GB       | 200 GB       | 400 GB       | 800 GB       | 2000 GB       |
| **Maximum
 throughput[3](#table-note-3-legacy)**                                                       | 100 ops/sec | 500 ops/sec | 1000 ops/sec | 1500 ops/sec | 2000 ops/sec | 4000 ops/sec | 8000 ops/sec | 16000 ops/sec |

1.  Database size includes replication. See [High availability cost impact]() for more information.

2.  The monthly total network bandwidth limit applies to the entire plan. All databases in the plan share the allocated bandwidth limit.

2.  Assumes request size of 1 KiB. Maximums are capped by actual MB/s reached. To find the MB/s limit, divide the Maximum throughput by 1024.


title: View and Upgrade Redis Cloud Essentials plan

title: Redis Cloud Essentials plans

title: Overview

text:
To view the details of a Redis Cloud Essentials subscription:

1.  Sign in to the [Redis Cloud console](https://cloud.redis.io/) and select the **Subscriptions** list.

1.  Select the target subscription from the subscription list.

1.  Your subscription details appear, along with a summary of your database details.

From here, you can:

- Select the **Plan upgrade** button to update your subscription plan, high availability settings, or payment method.

- Select the **Overview** tab to view and edit subscription details.

The following sections provide more details.

title: Upgrade plan

text:
Use the **Plan upgrade** button to update your Redis Cloud Essentials plan, your high availability settings, or your payment method. Upgrading your database between Redis Cloud Essentials plans does not impact database availability during the update.

For information on how to upgrade to Redis Cloud Pro, see [upgrade subscription plan from Essentials to Pro]().

title: Change high availability and persistence

text:
To change your plan's [high availability]() and [data persistence]() settings, change them in the **Configure your settings** panel.

You can switch between **No replication** and **Single-zone replication** at any time, but you cannot choose **Multi-zone replication** after your subscription is created. You also cannot switch from **Multi-zone replication** to another high availability option.

title: Change subscription plan

text:
To change your subscription plan, select the desired plan from the list and select the **Upgrade plan** button:

Each Redis Cloud Essentials plan provides a variety of benefits, including increased memory and number of connections.
For a comparison of available plans, see [Redis Cloud Essentials plans]().

When you change your plan, your data and endpoints are not disrupted.

If you upgrade a free plan to a paid plan, you need to add a payment method.

If you change your subscription to a lower plan, make sure your data fits within the limits of the new plan; otherwise, the change attempt will fail.

title: Change payment method

text:
To change your subscription payment method, update the **Payment method** settings.  You can select a known payment method from the drop-down list or use the **Add** button to add a new one.

Payment method changes require the Owner or Billing Admin roles. To verify your role, select **Access Management** from the admin menu and then locate your credentials in the **Team** tab.

title: Save changes

text: Use the **Update Database** button to save changes.

title: Subscription overview

text:
The **Overview** tab summarizes your Redis Cloud Essentials subscription details using a series of panels:

The following details are displayed:

| Detail | Description |
|:---------|:--------------|
| **Subscription description** | Brief summary of subscription, including the plan type, cloud provider, region, and data size limit |
| **Cloud vendor** | Your database's cloud vendor |
| **Availability** | Describes high availability settings |
| **Region** | The region your subscription is deployed to |
| **Plan** | The maximum database size of your Essentials plan. Also displays the cost for paid plans. |
| **Databases** | Maximum number of databases for your plan |
| **Connections** | Maximum number of concurrent connections |
| **CIDR allow rules** | Maximum number of authorization rules |
| **Data persistence** | Indicates whether persistence is supported for your subscription |
| **Daily & instant backups** | Indicates whether backups are supported for your subscription |
| **Replication** | Indicates whether replication is supported for your subscription |
| **Clustering** | Indicates whether clustering is supported for your subscription |

The **Delete Database** button lets you [delete your database]().


title: View and edit Redis Cloud Pro plan

title: Overview

text:
To view the details of a Redis Cloud Pro subscription:

1.  Sign in to the [Redis Cloud console](https://cloud.redis.io/#) and select **Subscriptions**.

1.  If you have more than one subscription, select the target subscription from the subscription list.

1.  Your subscription details appear, along with a summary of your database details.

From here, you can:

- Select **Create database in this subscription** to [add a database to your subscription]().

- View the Status icon to learn the status of your subscription.  Active subscriptions display a green circle with a check mark. Pending subscriptions display an animated yellow circle.

Because subscriptions represent active deployments, there aren't many details you can change.  If your needs change, [create a new subscription]() and then [migrate the existing data]() to the new databases.

In addition, you can view and edit the following subscription details:

1.  The **Databases** tab lists the databases in your subscription and summarizes their settings.

2.  The **Overview** tab displays subscription settings for your Redis Cloud Pro subscription.

3.  The **Connectivity** tab lets you limit access to the subscription by defining a VPC peering or other connectivity options.

4.  The **Security** tab lets you set security settings for the databases in your subscription.

5.  The **Regions** tab lets you manage the regions in your Active-Active subscription (_Active-Active subscriptions only_).

The following sections provide more info.

title: **Databases** tab

text:
The **Databases** tab summarizes the databases in your subscription.

The following details are provided:

| Detail | Description |
|:---------|:--------------|
| **Status** | An icon indicating whether the database is active (a green circle) or pending (yellow circle)<br/>  |
| **Name** | The database name |
| **Endpoint** | Use the **Copy** button to copy the endpoint URI to the Clipboard |
| **Memory** | Memory size of the database, showing the current size and the maximum size |
| **Throughput** | Maximum operations per second supported for the database |
| **Capabilities** | Identifies advanced capabilities attached to the database |
| **Options** | Icons showing options associated with the database |

To view full details of a database, click its name in the list.

title: **Overview** tab

text:
The **Overview** summarizes the options used to create the subscription.

- The general settings panel describes the cloud vendor, region, and high-availability settings for your subscription.

    Select **Edit** to change the name of the subscription.

    | Setting | Description |
    |:---------|:--------------|
    | **Cloud vendor** | Your subscription cloud vendor |
    | **Plan description** | Brief summary of subscription, including the plan type, cloud provider, and region |
    | **Auto Tiering** | Checked when Auto Tiering is enabled |
    | **Multi-AZ** | Checked when multiple availability zones are enabled |
    | **Active-Active Redis** | Checked when Active-Active Redis is enabled for your subscription |
    | **Region** | Describes the region your subscription is deployed to |
    | **Availability Zones** | The availability zones your subscription is deployed in (Visible if you selected availability zones on creation) |

- The **Price** panel shows the monthly cost of your Redis Cloud Pro subscription.

- The **Payment Method** panel shows the current payment details.

    Select the **Edit payment method** button to change the credit card associated with this subscription.

    Select **Add credit card** to add a new credit card.

- The **Maintenance Window** panel shows your current [maintenance window settings]().

    See [Maintenance]() for more information about subscription maintenance on Redis Cloud.

- The **Provisioned cloud resources** panel shows the storage resources used by your subscription.

  If your subscription is attached to a cloud account, the details appear in the panel header.

- The **Redis price** panel breaks down your subscription price.

title: **Connectivity** tab

text:
The **Connectivity** tabs helps secure your subscription.

Here, you can:

- Set up a [VPC peering]() relationship between the virtual private cloud (VPC) hosting your subscription and another VPC.

- Set up a [CIDR allow list]() containing IP addresses or security groups permitted to access your subscription (_[Bring your own Cloud]() only_).

- Set up [Private Service Connect]() (*Google Cloud only*), [Transit Gateway]() (*AWS only*), or [AWS PrivateLink]() (*AWS only*).

See the individual links to learn more.

title: **Security** tab

text:
The **Security** tab lets you set security settings for the databases in your subscription.

Here, you can [block public endpoints]() for all databases in the subscription.

title: **Regions** tab

text:
The **Regions** tab is only available for Active-Active subscriptions.  It lets you manage the regions in your Active-Active subscription.

See [Manage regions for an Active-Active database]() for more information.


title: Supported Cloud providers and regions

title: Overview

text:
Your choice of cloud provider and region may affect latency between your application and your database, and may affect what connectivity options are available for your database.

Redis Cloud supports databases on the following cloud providers:
- [Amazon Web Services (AWS)](#amazon-web-services)
- [Google Cloud](#google-cloud)
- [Microsoft Azure](#microsoft-azure)

title: Amazon Web Services

text:
Redis Cloud supports databases in the following Amazon Web Services (AWS) regions.

Redis Cloud Pro databases on AWS support [VPC Peering](), [Transit Gateway](), and [AWS PrivateLink]().

**Americas:**

| Region ID      | Location                 | Redis Cloud Pro | Redis Cloud Essentials |
|:---------------|:-------------------------|:----------------|:-----------------------|
| `ca-central-1` | Montreal, Canada         | ✅ | ✅ |
| `ca-west-1`    | Calgary, Canada          | ✅ | ❌ |
| `mx-central-1` | Central Mexico | ✅ | ❌ |
| `sa-east-1`    | Sao Paulo, Brazil        | ✅ | ✅ |
| `us-east-1`    | Northern Virginia, USA   | ✅ | ✅ |
| `us-east-2`    | Ohio, USA                | ✅ | ✅ |
| `us-west-1`    | Northern California, USA | ✅ | ✅ |
| `us-west-2`    | Oregon, USA              | ✅ | ✅ |

**Europe:**

| Region ID | Location | Redis Cloud Pro | Redis Cloud Essentials |
|---|---|---|---|
| `eu-central-1` | Frankfurt, Germany | ✅ | ✅ |
| `eu-central-2` | Zurich, Switzerland | ✅ | ❌ |
| `eu-north-1` | Stockholm, Sweden | ✅ | ✅ |
| `eu-south-1` | Milan, Italy | ✅ | ❌ |
| `eu-south-2` | Spain | ✅ | ❌ |
| `eu-west-1` | Ireland | ✅ | ✅ |
| `eu-west-2` | London, UK | ✅ | ✅ |
| `eu-west-3` | Paris, France | ✅ | ✅ |

**Asia Pacific:**

| Region ID        | Location             | Redis Cloud Pro | Redis Cloud Essentials |
|:-----------------|:---------------------|:----------------|:-----------------------|
| `ap-east-1`      | Hong Kong, China     | ✅ | ✅ |
| `ap-east-2`      | Taipei, Taiwan       | ✅ | ❌ |
| `ap-northeast-1` | Tokyo, Japan         | ✅ | ✅ |
| `ap-northeast-2` | Seoul, South Korea   | ✅ | ✅ |
| `ap-northeast-3` | Osaka, Japan         | ✅ | ❌ |
| `ap-south-1`     | Mumbai, India        | ✅ | ✅ |
| `ap-south-2`     | Hyderabad, India     | ✅ | ❌ |
| `ap-southeast-1` | Singapore            | ✅ | ✅ |
| `ap-southeast-2` | Sydney, Australia    | ✅ | ✅ |
| `ap-southeast-3` | Jakarta, Indonesia   | ✅ | ❌ |
| `ap-southeast-4` | Melbourne, Australia | ✅ | ❌ |
| `ap-southeast-5` | Malaysia | ✅ | ❌ |
| `ap-southeast-6` | New Zealand          | ✅ | ❌ |
| `ap-southeast-7` | Thailand | ✅ | ❌ |

**Middle East and Africa:**

| Region ID      | Location                | Redis Cloud Pro | Redis Cloud Essentials |
|:---------------|:------------------------|:----------------|:-----------------------|
| `af-south-1`   | Cape Town, South Africa | ✅ | ✅ |
| `il-central-1` | Tel Aviv, Israel        | ✅ | ❌ |
| `me-central-1` | UAE                     | ✅ | ✅ |
| `me-south-1`   | Bahrain                 | ✅ | ✅ |

title: Google Cloud

text:
Redis Cloud supports databases in the following Google Cloud regions.

Redis Cloud Pro databases on Google Cloud support [VPC Peering]() and [Private Service Connect]().

**Americas:**

| Region ID                 | Location            | Redis Cloud Pro | Redis Cloud Essentials |
|:--------------------------|:--------------------|:----------------|:-----------------------|
| `northamerica-northeast1` | Montreal, Canada    | ✅ | ❌ |
| `northamerica-northeast2` | Toronto, Canada     | ✅ | ❌ |
| `southamerica-east1`      | Sao Paulo, Brazil   | ✅ | ✅ |
| `southamerica-west1`      | Santiago, Chile     | ✅ | ❌ |
| `us-central1`             | Iowa, USA           | ✅ | ✅ |
| `us-east1`                | South Carolina, USA | ✅ | ✅ |
| `us-east4`                | Virginia, USA       | ✅ | ✅ |
| `us-east5`                | Columbus, USA       | ✅ | ❌ |
| `us-south1`               | Dallas, USA         | ✅ | ❌ |
| `us-west1`                | Oregon, USA         | ✅ | ✅ |
| `us-west2`                | Los Angeles, USA    | ✅ | ❌ |
| `us-west3`                | Salt Lake City, USA | ✅ | ❌ |
| `us-west4`                | Las Vegas, USA      | ✅ | ❌ |

**Europe:**

| Region ID           | Location            | Redis Cloud Pro | Redis Cloud Essentials |
|:--------------------|:--------------------|:----------------|:-----------------------|
| `europe-central2`   | Warsaw, Poland      | ✅ | ❌ |
| `europe-north1`     | Finland             | ✅ | ❌ |
| `europe-southwest1` | Madrid, Spain       | ✅ | ❌ |
| `europe-west1`      | Belgium             | ✅ | ✅ |
| `europe-west2`      | London, UK          | ✅ | ✅ |
| `europe-west3`      | Frankfurt, Germany  | ✅ | ✅ |
| `europe-west4`      | Netherlands         | ✅ | ❌ |
| `europe-west6`      | Zurich, Switzerland | ✅ | ❌ |
| `europe-west8`      | Milan, Italy        | ✅ | ❌ |
| `europe-west9`      | Paris, France       | ✅ | ❌ |
| `europe-west10`     | Berlin, Germany     | ✅ | ❌ |
| `europe-west12`     | Turin, Italy        | ✅ | ❌ |

**Asia Pacific:**

| Region ID              | Location             | Redis Cloud Pro | Redis Cloud Essentials |
|:-----------------------|:---------------------|:----------------|:-----------------------|
| `asia-east1`           | Taiwan               | ✅ | ❌ |
| `asia-east2`           | Hong Kong, China     | ✅ | ❌ |
| `asia-northeast1`      | Tokyo, Japan         | ✅ | ✅ |
| `asia-northeast2`      | Osaka, Japan         | ✅ | ❌ |
| `asia-northeast3`      | Seoul, South Korea   | ✅ | ❌ |
| `asia-south1`          | Mumbai, India        | ✅ | ✅ |
| `asia-south2`          | Delhi, India         | ✅ | ❌ |
| `asia-southeast1`      | Singapore            | ✅ | ❌ |
| `asia-southeast2`      | Jakarta, Indonesia   | ✅ | ✅ |
| `australia-southeast1` | Sydney, Australia    | ✅ | ✅ |
| `australia-southeast2` | Melbourne, Australia | ✅ | ❌ |

**Middle East and Africa:**

| Region ID       | Location                   | Redis Cloud Pro | Redis Cloud Essentials |
|:----------------|:---------------------------|:----------------|:-----------------------|
| `africa-south1` | Johannesburg, South Africa | ✅ | ❌ |
| `me-central1`   | Doha, Qatar                | ✅ | ❌ |
| `me-central2`   | Dammam, Saudi Arabia       | ✅ | ❌ |
| `me-west1`      | Tel Aviv, Israel           | ✅ | ❌ |

title: Microsoft Azure

text:
Redis Cloud Essentials is available on the following Microsoft Azure regions:

| Region ID | Location        |
|:----------|:----------------|
| `east-us` | Virginia, USA   |
| `west-us` | California, USA |

Redis Cloud Pro is available on Azure through [Azure Managed Redis](https://azure.microsoft.com/en-us/products/managed-redis/). See [Azure Managed Redis pricing](https://azure.microsoft.com/en-us/pricing/details/managed-redis/) to view the list of Azure regions that support Azure Managed Redis.


title: Troubleshoot Redis Cloud issues with the Redis Cloud knowledge base

summary: Use the Redis Cloud knowledge base to find answers to common Redis Cloud questions.

title: Overview

text: The [Redis Cloud knowledge base](https://support.redislabs.com/hc/en-us/categories/26174183986450-Redis-Cloud) provides articles to help you troubleshoot common Redis Cloud issues.

title: Account and User Management

text:
- [Restore access to your Redis Cloud account](https://support.redislabs.com/hc/en-us/articles/27496470929170-Restore-Access-to-Your-Redis-Cloud-Account)
- [Cancel a Redis Cloud subscription](https://support.redislabs.com/hc/en-us/articles/27215953424786-Cancel-a-Redis-Cloud-Subscription)
- [Delete a Redis Cloud account](https://support.redislabs.com/hc/en-us/articles/26180817014162-Delete-a-Redis-Cloud-Account)
- [Submit a Redis Cloud privacy deletion request](https://support.redislabs.com/hc/en-us/articles/27646907553170-Submit-a-Redis-Cloud-Privacy-Deletion-Request)

title: Billing and Payments

text:
- [Resolving payment failures in Redis Cloud](https://support.redislabs.com/hc/en-us/articles/26266042933522-Resolving-Payment-Failures-in-Redis-Cloud)
- [Credit card retry behavior and troubleshooting](https://support.redislabs.com/hc/en-us/articles/27697187187986-Credit-Card-Retry-Behavior-and-Troubleshooting)
- [Access invoices and payment links](https://support.redislabs.com/hc/en-us/articles/26265945230226-Access-Invoices-and-Payment-Links-in-the-Portal)
- [How to find payment information](https://support.redislabs.com/hc/en-us/articles/26266104144914-How-to-Find-Payment-Information)

title: Database management and observability

text:
- [Manage network usage and subscription limits in Redis Cloud Essentials](https://support.redislabs.com/hc/en-us/articles/27315881501202-Manage-Network-Usage-and-Subscription-Limits-in-Redis-Cloud-Essentials)
- [Configuring Access Control and RBAC in Redis Cloud](https://support.redislabs.com/hc/en-us/articles/28595965192338-Configuring-Access-Control-and-RBAC-in-Redis-Cloud)
- [How to run a Failover Test in Redis Cloud](https://support.redislabs.com/hc/en-us/articles/29001166157074-How-to-Run-a-Failover-Test-in-Redis-Cloud)


title: Redis Data Integration (RDI)

summary: Keep Redis in sync with a primary database in near real time.

title: Content

text:
Redis Data Integration (RDI) is a [change data capture](https://en.wikipedia.org/wiki/Change_data_capture) (CDC) system that tracks changes to the data in a non-Redis source database and makes corresponding changes to a Redis target database. You can use the target as a cache to improve performance because it will typically handle read queries much faster than the source.

See the main [RDI docs section]()
under [Libraries and tools]() to learn how to install and use RDI on your own servers.  See the
[Redis Cloud RDI guide]() to learn how to set up RDI for a cloud database.


title: Redis Insight configuration settings

title: Configuration environment variables

role: configuration

text:
| Variable | Purpose | Default | Additional info |
| --- | --- | --- | --- |
| RI_APP_PORT | The port that Redis Insight listens on. |

 Docker: 5540
 desktop: 5530
 | See [Express Documentation](https://expressjs.com/en/api.html#app.listen)|
| RI_APP_HOST | The host that Redis Insight connects to. |

 Docker: 0.0.0.0
 desktop: 127.0.0.1
 | See [Express Documentation](https://expressjs.com/en/api.html#app.listen)|
| RI_SERVER_TLS_KEY | Private key for HTTPS. | n/a | Private key in [PEM format](https://www.ssl.com/guide/pem-der-crt-and-cer-x-509-encodings-and-conversions/#ftoc-heading-3). Can be a path to a file or a string in PEM format.|
| RI_SERVER_TLS_CERT | Certificate for supplied private key. | n/a | Public certificate in [PEM format](https://www.ssl.com/guide/pem-der-crt-and-cer-x-509-encodings-and-conversions/#ftoc-heading-3). Can be a path to a file or a string in PEM format.|
| RI_ENCRYPTION_KEY | Key to encrypt data with. | n/a | Available only for Docker.
 Redis insight stores sensitive information (database passwords, Workbench history, etc.) locally (using [sqlite3](https://github.com/TryGhost/node-sqlite3)). This variable allows you to store sensitive information encrypted using the specified encryption key.
Note: The same encryption key should be provided for subsequent `docker run` commands with the same volume attached to decrypt the information. |
| RI_LOG_LEVEL | Configures the log level of the application. | `info` | Supported logging levels are prioritized from highest to lowest:

error
 warn
info
 http
 verbose
 debug
 silly
 |
| RI_FILES_LOGGER | Logs to file. | `true` | By default, you can find log files in the following folders:

 Docker: `/data/logs`
 desktop: `<user-home-dir>/.redisinsight-app/logs`
|
| RI_STDOUT_LOGGER | Logs to STDOUT. | `true` | |
| RI_PROXY_PATH | Configures a subpath for a proxy. | n/a | Available only for Docker. |
| RI_DATABASE_MANAGEMENT | When set to `false`, this disables the ability to manage database connections (adding, editing, or deleting). | `true` | |
| RI_ACCEPT_TERMS_AND_CONDITIONS | This environment variable allows you to accept the End User License Agreement (EULA) without displaying it in the UI. By setting this variable, you acknowledge that your use of Redis Insight is governed either by your signed agreement with Redis or, if none exists, by the Redis Enterprise Software Subscription Agreement. If neither applies, your use is subject to the Server Side Public License (SSPL). | `true` | |

title: Preconfigure database connections

text:
Redis Insight allows you to preconfigure database connections using environment variables or a JSON file, enabling centralized and efficient configuration.
There are two ways to preconfigure database connections in Redis Insight Electron and Docker:
1. Use environment variables.
1. Use a JSON file.

title: Preconfigure database connections using environment variables

text:
Redis Insight allows you to preconfigure database connections using environment variables.

**NOTES**:
- To configure multiple database connections, replace the asterisk (*) in each environment variable with a unique identifier for each database connection. If setting up only one connection, you can omit the asterisk, and Redis Insight will default to using 0 as the ID.
- If you modify environment variables, the changes will take effect after restarting Redis Insight.
- If you restart Redis Insight without these environment variables, all previously added database connections will be removed.

| Variable | Purpose | Default | Additional info |
| --- | --- | --- | --- |
| RI_REDIS_HOST* | Host of a Redis database. | N/A |  |
| RI_REDIS_PORT* | Port of a Redis database. | `6379` |  |
| RI_REDIS_ALIAS* | Alias of a database connection. | `{host}:{port}` |  |
| RI_REDIS_USERNAME* | Username to connect to a Redis database. | `default` |  |
| RI_REDIS_PASSWORD* | Password to connect to a Redis database. | No password |  |
| RI_REDIS_TLS* | Indicates whether TLS certificates should be used to connect. | `false` | Accepts `true` or `false` |
| RI_REDIS_TLS_CA_BASE64* | CA certificate in base64 format. | N/A | Specify a CA certificate in this environment variable or provide a file path using `RI_REDIS_TLS_CA_PATH*`. |
| RI_REDIS_TLS_CA_PATH* | Path to the CA certificate file. | N/A |  |
| RI_REDIS_TLS_CERT_BASE64* | Client certificate in base64 format. | N/A | Specify a client certificate in this environment variable or provide a file path using `RI_REDIS_TLS_CERT_PATH*`. |
| RI_REDIS_TLS_CERT_PATH* | Path to the Client certificate file. | N/A |  |
| RI_REDIS_TLS_KEY_BASE64* | Private key for the client certificate in base64 format. | N/A | Indicate a private key in this environment variable or use another variable to get it from a file. |
| RI_REDIS_TLS_KEY_PATH* | Path to private key file. | N/A |  |
| RI_REDIS_DB | Database index to connect to. | N/A | |

title: Preconfigure database connections using a JSON file

text:
Redis Insight also allows you to preconfigure database connections using a JSON file.

**NOTES**
- The JSON file format should match the one used when exporting database connections from Redis Insight.
- The `id` field in the JSON file should include unique identifiers to avoid conflicts for database connections.
- Changes to the JSON file will take effect after restarting Redis Insight.
- If the JSON file is removed, all database connections added via the file will be removed.

| Variable | Purpose | Default | Additional info |
| --- | --- | --- | --- |
| RI_PRE_SETUP_DATABASES_PATH | Path to a JSON file containing the database connections to preconfigure  |  |

title: Use Redis Insight behind a reverse proxy

text:
When you configure Redis Insight to run behind a reverse proxy like [NGINX](https://www.nginx.com/), set the request timeout to over 30 seconds on the reverse proxy because some requests can be long-running.

Redis Insight also allows you to manage its connection timeout on the form to configure the connection details. The default timeout is 30 seconds.

Hosting Redis Insight behind a prefix path (path-rewriting) is not supported.


title: Redis Insight

summary: Install and manage Redis Insight

summary: Install Redis Insight on AWS, Docker, Kubernetes, and desktop

title: Install Redis Insight

title: Redis Insight configuration settings

title: Subpath proxy

title: Content

text:
<div class="grid grid-cols-1 md:grid-cols-2 gap-6 my-8 max-w-2xl">

</div>

For information on using Redis Insight, see [these pages]().


title: Install Redis Insight

summary: How to install Redis Insight on the desktop

title: Install on desktop

summary: How to install Redis Insight on Docker

title: Install on Docker

summary: How to install Redis Insight on Kubernetes

title: Install on Kubernetes

summary: How to install Redis Insight on AWS EC2

title: Install on AWS EC2

title: Overview

title: Installation options

role: setup

text:
Learn how to install Redis Insight on your desktop, Amazon Web Services (AWS), Docker, and Kubernetes.

<div class="grid grid-cols-1 md:grid-cols-2 gap-6 my-8">

</div>


title: Install on AWS EC2

summary: How to install Redis Insight on AWS EC2

title: Content

text:
This tutorial shows you how to install Redis Insight on an AWS EC2 instance and manage ElastiCache Redis instances using Redis Insight. To complete this tutorial you must have access to the AWS Console and permissions to launch EC2 instances.

Step 1: Launch EC2 Instance
--------------

Next, launch an EC2 instance.

1. Navigate to EC2 under AWS Console.
1. Click Launch Instance.
1. Choose 64-bit Amazon Linux AMI.
1. Choose at least a t2.medium instance. The size of the instance depends on the memory used by your ElastiCache instance that you want to analyze.
1. Under Configure Instance:
   * Choose the VPC that has your ElastiCache instances.
   * Choose a subnet that has network access to your ElastiCache instances.
   * Ensure that your EC2 instance has a public IP Address.
   * Assign the IAM role that you created in Step 1.
1. Under the storage section, allocate at least 100 GiB storage.
1. Under security group, ensure that:
    * Incoming traffic is allowed on port 5540
    * Incoming traffic is allowed on port 22 only during installation
1. Review and launch the ec2 instance.

Step 2: Verify permissions and connectivity
----------

Next, verify that the EC2 instance has the required IAM permissions and can connect to ElastiCache Redis instances.

1. SSH into the newly launched EC2 instance.
1. Open a command prompt.
1. Run the command `aws s3 ls`. This should list all S3 buckets.
    1. If the `aws` command cannot be found, make sure your EC2 instance is based of Amazon Linux.
1. Next, find the hostname of the ElastiCache instance you want to analyze and run the command `echo info | nc <redis host> 6379`.
1. If you see some details about the ElastiCache Redis instance, you can proceed to the next step.
1. If you cannot connect to redis, you should review your VPC, subnet, and security group settings.

Step 3: Install Docker on EC2
-------

Next, install Docker on the EC2 instance. Run the following commands:

1. `sudo yum update -y`
1. `sudo yum install -y docker`
1. `sudo service docker start`
1. `sudo usermod -a -G docker ec2-user`
1. Log out and log back in again to pick up the new docker group permissions.
1. To verify, run `docker ps`. You should see some output without having to run `sudo`.

Step 4: Run Redis Insight in the Docker container
-------

Finally, install Redis Insight using one of the options described below.

1. If you do not want to persist your Redis Insight data:

[code example]
2. If you want to persist your Redis Insight data, first attach the Docker volume to the `/data` path and then run the following command:

[code example]

If the previous command returns a permission error, ensure that the user with `ID = 1000` has the necessary permission to access the volume provided (`redisinsight` in the command above).

Find the IP Address of your EC2 instances and launch your browser at `http://<EC2 IP Address>:5540`. Accept the EULA and start using Redis Insight.

Redis Insight also provides a health check endpoint at `http://<EC2 IP Address>:5540/api/health/` to monitor the health of the running container.

Summary
------

In this guide, we installed Redis Insight on an AWS EC2 instance running Docker. As a next step, you should add an ElastiCache Redis Instance and then run the memory analysis.

section_id: content

code: docker run -d --name redisinsight -p 5540:5540 redis/redisinsight:latest -v redisinsight:/data


title: Install on desktop

title: Overview

title: Supported operating systems

role: compatibility

text:
Redis Insight is supported on multiple operating systems:

| Operating System | Supported Versions [^1] |
|:---              |:---                     |
| **Windows**      | Windows 11              |
|                  | Windows 10              |
| **macOS**        | macOS 15                |
|                  | macOS 14                |
|                  | macOS 13                |
|                  | macOS 12                |
|                  | macOS 11                |
|                  | macOS 10.15             |
| **Ubuntu Linux** | Ubuntu 24.04            |
|                  | Ubuntu 23.10            |
|                  | Ubuntu 22.04            |
|                  | Ubuntu 20.04            |
| **Debian Linux** | Debian 12               |
|                  | Debian 11               |

[^1]: Includes later versions of same major or major.minor release.

title: Install

text:
Check out the features of the AI-powered assistant, advanced CLI, and intuitive GUI [here](https://redis.io/insight/?utm_source=redisinsight&utm_medium=website&utm_campaign=install_redisinsight#insight-form).

It is also available on:
- Microsoft Store
- Apple Store
- Snapcraft
- Flathub
- [Docker Hub]().

After installation, run the Redis Insight application in the same was as you would run other desktop applications.

title: Build

text: Alternatively, you can also build Redis Insight from source. See the [wiki](https://github.com/RedisInsight/RedisInsight#build) for instructions.


title: Install on Docker

summary: How to install Redis Insight on Docker

title: Overview

text:
This tutorial shows how to install Redis Insight on [Docker](https://www.docker.com/) so you can use Redis Insight in development.
See a separate guide for installing [Redis Insight on AWS]().

title: Install Docker

text: The first step is to [install Docker for your operating system](https://docs.docker.com/install/).

title: Run Redis Insight Docker image

text:
You can install Redis Insight using one of the options described below.

1. If you do not want to persist your Redis Insight data:

[code example]
2. If you want to persist your Redis Insight data, first attach the Docker volume to the `/data` path and then run the following command:

[code example]

If the previous command returns a permission error, ensure that the user with `ID = 1000` has the necessary permissions to access the volume provided (`redisinsight` in the command above).

Next, point your browser to `http://localhost:5540`.

Redis Insight also provides a health check endpoint at `http://localhost:5540/api/health/` to monitor the health of the running container.

code: docker run -d --name redisinsight -p 5540:5540 redis/redisinsight:latest

section_id: run-redis-insight-docker-image

code: docker run -d --name redisinsight -p 5540:5540 -v redisinsight:/data redis/redisinsight:latest


title: Install on Kubernetes

title: Overview

text:
This tutorial shows how to install Redis Insight on [Kubernetes](https://kubernetes.io/) (K8s).
This is an easy way to use Redis Insight with a [Redis Enterprise K8s deployment]().

text:
Below is an annotated YAML file that will create a Redis Insight
deployment and a service in a K8s cluster.

1. Create a new file named `redisinsight.yaml` with the content below.

[code example]

2. Create the Redis Insight deployment and service:

[code example]

3. Once the deployment and service are successfully applied and complete, access Redis Insight. This can be accomplished by using the `<external-ip>` of the service we created to reach Redis Insight.

[code example]

4. If you are using minikube, run `minikube list` to list the service and access Redis Insight at `http://<minikube-ip>:<minikube-service-port>`.
[code example]

title: Create the Redis Insight deployment with persistant storage

text:
Below is an annotated YAML file that will create a Redis Insight
deployment in a K8s cluster. It will assign a peristent volume created from a volume claim template.
Write access to the container is configured in an init container. When using deployments
with persistent writeable volumes, it's best to set the strategy to `Recreate`. Otherwise you may find yourself
with two pods trying to use the same volume.

1. Create a new file `redisinsight.yaml` with the content below.

[code example]

2. Create the Redis Insight deployment and service.

[code example]

title: Create the Redis Insight deployment without a service.

text:
Below is an annotated YAML file that will create a Redis Insight
deployment in a K8s cluster.

1. Create a new file redisinsight.yaml with the content below

[code example]

2. Create the Redis Insight deployment

[code example]

If the deployment will be exposed by a service whose name is 'redisinsight', set `RI_APP_HOST` and `RI_APP_PORT` environment variables to override the environment variables created by the service.

title: Run Redis Insight

text:
Once the deployment has been successfully applied and the deployment is complete, access Redis Insight. This can be accomplished by exposing the deployment as a K8s Service or by using port forwarding, as in the example below:

[code example]

Open your browser and point to <http://localhost:5540>

code:
# Redis Insight service with name 'redisinsight-service'
apiVersion: v1
kind: Service
metadata:
  name: redisinsight-service       # name should not be 'redisinsight'
                                   # since the service creates
                                   # environment variables that
                                   # conflicts with redisinsight
                                   # application's environment
                                   # variables `RI_APP_HOST` and
                                   # `RI_APP_PORT`
spec:
  type: LoadBalancer
  ports:
    - port: 80
      targetPort: 5540
  selector:
    app: redisinsight
---
# Redis Insight deployment with name 'redisinsight'
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redisinsight #deployment name
  labels:
    app: redisinsight #deployment label
spec:
  replicas: 1 #a single replica pod
  selector:
    matchLabels:
      app: redisinsight #which pods is the deployment managing, as defined by the pod template
  template: #pod template
    metadata:
      labels:
        app: redisinsight #label for pod/s
    spec:
      containers:

      - name:  redisinsight #Container name (DNS_LABEL, unique)
        image: redis/redisinsight:latest #repo/image
        imagePullPolicy: IfNotPresent #Installs the latest Redis Insight version
        volumeMounts:
        - name: redisinsight #Pod volumes to mount into the container's filesystem. Cannot be updated.
          mountPath: /data
        ports:
        - containerPort: 5540 #exposed container port and protocol
          protocol: TCP
      volumes:
      - name: redisinsight
        emptyDir: {} # node-ephemeral volume https://kubernetes.io/docs/concepts/storage/volumes/#emptydir

code: kubectl apply -f redisinsight.yaml

code:
$ kubectl get svc redisinsight-service
NAME                   CLUSTER-IP       EXTERNAL-IP      PORT(S)         AGE
redisinsight-service   <cluster-ip>     <external-ip>    80:32143/TCP    1m

code:
# Redis Insight service with name 'redisinsight-service'
apiVersion: v1
kind: Service
metadata:
  name: redisinsight-service       # name should not be 'redisinsight'
                                   # since the service creates
                                   # environment variables that
                                   # conflicts with redisinsight
                                   # application's environment
                                   # variables `RI_APP_HOST` and
                                   # `RI_APP_PORT`
spec:
  type: LoadBalancer
  ports:
    - port: 80
      targetPort: 5540
  selector:
    app: redisinsight
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: redisinsight-pv-claim
  labels:
    app: redisinsight
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
  storageClassName: default
---
# Redis Insight deployment with name 'redisinsight'
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redisinsight #deployment name
  labels:
    app: redisinsight #deployment label
spec:
  replicas: 1 #a single replica pod
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: redisinsight #which pods is the deployment managing, as defined by the pod template
  template: #pod template
    metadata:
      labels:
        app: redisinsight #label for pod/s
    spec:
      volumes:
        - name: redisinsight
          persistentVolumeClaim:
            claimName: redisinsight-pv-claim
      initContainers:
        - name: init
          image: busybox
          command:
            - /bin/sh
            - '-c'
            - |
              chown -R 1000 /data
          resources: {}
          volumeMounts:
            - name: redisinsight
              mountPath: /data
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
      containers:
        - name:  redisinsight #Container name (DNS_LABEL, unique)
          image: redis/redisinsight:latest #repo/image
          imagePullPolicy: IfNotPresent #Always pull image
          volumeMounts:
          - name: redisinsight #Pod volumes to mount into the container's filesystem. Cannot be updated.
            mountPath: /data
          ports:
          - containerPort: 5540 #exposed container port and protocol
            protocol: TCP

code:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redisinsight # deployment name
  labels:
    app: redisinsight # deployment label
spec:
  replicas: 1 # a single replica pod
  selector:
    matchLabels:
      app: redisinsight # which pods is the deployment managing, as defined by the pod template
  template: # pod template
    metadata:
      labels:
        app: redisinsight # label for pod/s
    spec:
      containers:
      - name: redisinsight # Container name (DNS_LABEL, unique)
        image: redis/redisinsight:latest # repo/image
        imagePullPolicy: IfNotPresent # Always pull image
        env:
          # If there's a service named 'redisinsight' that exposes the
          # deployment, we manually set `RI_APP_HOST` and
          # `RI_APP_PORT` to override the service environment
          # variables.
          - name: RI_APP_HOST
            value: "0.0.0.0"
          - name: RI_APP_PORT
            value: "5540"
        volumeMounts:
        - name: redisinsight # Pod volumes to mount into the container's filesystem. Cannot be updated.
          mountPath: /data
        ports:
        - containerPort: 5540 # exposed container port and protocol
          protocol: TCP
        livenessProbe: # Probe to check container health
          httpGet:
            path: /api/health/ # exposed RI endpoint for healthcheck
            port: 5540 # exposed container port
          initialDelaySeconds: 5 # number of seconds to wait after the container starts to perform liveness probe
          periodSeconds: 5 # period in seconds after which liveness probe is performed
          failureThreshold: 1 # number of liveness probe failures after which container restarts
      volumes:
      - name: redisinsight
        emptyDir: {} # node-ephemeral volume https://kubernetes.io/docs/concepts/storage/volumes/#emptydir

code: kubectl port-forward deployment/redisinsight 5540

section_id: run-redis-insight


title: Subpath proxy

title: Overview

text:
You can enable the subpath proxy by setting the `RI_PROXY_PATH` environment variable.

When `RI_PROXY_PATH` is being set with a path, Redis Insight is
accessible only on that subpath. The default routes are given the
provided prefix subpath. There isn’t any way to add another proxy behind
this one unless the same subpath is used for the new one.

Once you set the static subpath environment variable, Redis Insight is only reachable on the provided subpath. The default endpoint won't work.

title: Using Redis Insight behind a reverse proxy

text:
When you configure Redis Insight to run behind a reverse proxy like NGINX, set the request timeout to over 30 seconds on the reverse proxy because some requests can be long-running.

Redis Insight also allows you to manage its connection timeout on the form to configure the connection details. The default timeout is 30 seconds.

Hosting Redis Insight behind a prefix path (path-rewriting) is not supported.

title: Example

role: example

title: Docker compose file

text: [code example]

title: nginx config

text: [code example]

title: Login page

title: After login

code:
version: "3.7"
services:
  redis-stack:
    image: redis/redis-stack-server
    networks:
      - redis-network

  redisinsight:
    image: redis/redisinsight
    environment:
      - RIPORT=${RIPORT:-5540}
      - RITRUSTEDORIGINS=http://localhost:9000
    depends_on:
      - redis-stack
    networks:
      - redis-network

  nginx-basicauth:
    image: nginx
    volumes:
      - ./nginx-basic-auth.conf.template:/etc/nginx/templates/nginx-basic-auth.conf.template
    ports:
      - "${NGINX_PORT:-9000}:${NGINX_PORT:-9000}"
    environment:
      - FORWARD_HOST=redisinsight
      - FORWARD_PORT=${RIPORT:-5540}
      - NGINX_PORT=${NGINX_PORT:-9000}
      - BASIC_USERNAME=${BASIC_USERNAME:-redis}
      - BASIC_PASSWORD=${BASIC_PASSWORD:-password}
    command:
      - bash
      - -c
      - |
        printf "$$BASIC_USERNAME:$$(openssl passwd -1 $$BASIC_PASSWORD)\n" >> /etc/nginx/.htpasswd
        /docker-entrypoint.sh nginx -g "daemon off;"
    depends_on:
      - redisinsight
    networks:
      - redis-network

section_id: docker-compose-file

code:
server {
 listen ${NGINX_PORT} default_server;

 location / {
     auth_basic             "redisinsight";
     auth_basic_user_file   .htpasswd;

     proxy_pass             http://${FORWARD_HOST}:${FORWARD_PORT};
     proxy_read_timeout     900;
 }
}

section_id: nginx-config


title: Add a node

summary: Add a node to your existing Redis Software cluster.

title: Overview

text:
When you install Redis Software on the first node of a cluster, you create the new cluster.
After you install the first node, you can add more nodes to the cluster.

title: Prerequisites

text:
Before you add a node to the cluster:

- The clocks on all nodes must always be [synchronized]().

    If the clock in the node you are trying to join to the cluster is not synchronized with the nodes already in the cluster,
    the action fails and an error message is shown indicating that you must synchronize the clocks first.

- You must [update the DNS records]()
    each time a node is added or replaced.

- We recommend that you add nodes one after the other rather than in parallel
    to avoid errors that occur because the connection to the other nodes in the cluster cannot be verified.

title: Add node

text:
To add a node to an existing cluster:

1. [Install the Redis Software installation package]() on a clean installation
    of a [supported operating system]().

1. To connect to the Cluster Manager UI of the new Redis Software installation, go to: <https://URL or IP address:8443>

    For example, if you installed Redis Software on a machine with IP address 10.0.1.34, go to `https://10.0.1.34:8443`.

The management UI uses TLS encryption with a default certificate.
You can also [replace the TLS certificate]()
with a custom certificate.

1. Select **Join cluster**.

1. For **Cluster identification**, enter the internal IP address or DNS name of a node that is a cluster member.

    If the node only has one IP address, enter that IP address.

1. For **Cluster sign in**, enter the credentials of the cluster administrator.

    The cluster administrator is the user account that you create when you configure the first node in the cluster.

1. Click **Next**.

1. Configure storage and network settings:

    1. Enter a path for [*Ephemeral storage*](), or leave the default path.

    1. Enter a path for [*Persistent storage*](),
        or leave the default path.

    1. To enable [*Redis Flex or Auto Tiering*](),
        select **Enable flash storage** and enter the path to the flash storage.

    1. If the cluster is configured to support [rack-zone awareness](), set the **Rack-zone ID** for the new node.

    1. If your machine has multiple IP addresses, assign a single IPv4 type address for **Node-to-node communication (internal traffic)** and multiple IPv4/IPv6 type addresses for **External traffic**.

1. Select **Join cluster**.

The node is added to the cluster.
You can see it in the list of nodes in the cluster.

If you see an error when you add the node, try adding the node again.

title: Verify node

text:
We recommend that you verify the node is functioning properly using one of the following methods:

- Cluster Manager UI method:

    1. On the **Nodes** screen, click  for the node you want to verify.

    1. Select **Verify node** from the list.

- Command-line method:

    Run the [`rlcheck`]() utility from the node's command line.


title: Change node roles

summary: Change node roles to demote the primary node to a secondary node or promote a secondary node to become the primary node.

title: Overview

text: A Redis Software cluster contains a primary node, which coordinates cluster-wide management operations, and multiple secondary nodes. Nodes with either role can host database shards.

title: Demote primary node

text:
**Cluster Manager UI:**

To demote the primary node to a secondary node using the Cluster Manager UI:

1. On the **Nodes** screen, click the **More actions** button (**⋮**) for the primary node you want to demote.

1. Select **Set as a secondary node** from the list.

1. Select one of the options to determine the new primary node:

    - **Automatically**: The cluster decides which node becomes the new primary node.

    - **Choose specific node**: You can manually select which node becomes the new primary node.

1. Click **Confirm**.

**rladmin:**

To demote the primary node to a secondary node using `rladmin`:

1. Identify the primary node's ID with [`rladmin cluster master`]():

    [code example]

1. Run [`rladmin node enslave`]() with the `demote_node` option:

    [code example]

    Replace `<primary-node-ID>` with the ID returned by `rladmin cluster master`.

title: Promote secondary node

text:
**Cluster Manager UI:**

To promote a secondary node to become the primary node using the Cluster Manager UI:

1. On the **Nodes** screen, click the **More actions** button (**⋮**) for the secondary node you want to promote.

    <img src="../../../../images/rs/screenshots/nodes/secondary-nodes-more-actions.png" alt="Click the more actions button for a node to access node actions.">

1. Select **Set as the primary node** from the list.

1. Click **Confirm**.

**rladmin:**

To promote a secondary node to become the primary node using `rladmin`:

1. To find the IDs of secondary nodes, run [`rladmin status nodes`]():

    [code example]

    Nodes with the `slave` role are secondary nodes.

1. Run [`rladmin cluster master set`]():

    [code example]

    Replace `<secondary-node-ID>` with the ID of the secondary node you want to promote.

After this node becomes the primary node, all cluster management traffic is directed to it.

code:
$ rladmin cluster master
    Node <primary-node-id> is the cluster master node

section_id: demote-primary-node

code: rladmin node <primary-node-ID> enslave demote_node

code:
$ rladmin status nodes
    CLUSTER NODES:
    NODE:ID     ROLE       ADDRESS          EXTERNAL_ADDRESS          HOSTNAME            SHARDS     CORES          FREE_RAM                 PROVISIONAL_RAM          VERSION        STATUS
    node:1      master     198.51.100.2                                 3d99db1fdf4b        4/100      6              14.74GB/19.54GB          10.73GB/16.02GB          7.22.0-250     OK
    *node:3     slave      198.51.100.4                                 b87cc06c830f        0/100      6              14.74GB/19.54GB          11.22GB/16.02GB          7.22.0-250     OK
    node:2      slave      198.51.100.3                                 fc7a3d332458        0/100      6              14.74GB/19.54GB          11.22GB/16.02GB          7.22.0-250     OK

section_id: promote-secondary-node

code: rladmin cluster master set <secondary-node-ID>


title: Recover a failed cluster

summary: How to use the cluster configuration file and database data to recover a failed cluster.

title: Overview

text:
When a Redis Software cluster fails,
you must use the cluster configuration file and database data to recover the cluster.

For cluster recovery in a Kubernetes deployment, see [Recover a Redis Enterprise cluster on Kubernetes]().

Cluster failure can be caused by:

- A hardware or software failure that causes the cluster to be unresponsive to client requests or administrative actions.
- More than half of the cluster nodes lose connection with the cluster, resulting in quorum loss.

To recover a cluster and re-create it as it was before the failure,
you must restore the cluster configuration `ccs-redis.rdb` to the cluster nodes.
To recover databases in the new cluster, you must restore the databases from persistence files such as backup files, append-only files (AOF), or RDB snapshots.
These files are stored in the [persistent storage location]().

The cluster recovery process includes:

1. Install Redis Software on the nodes of the new cluster.
1. Mount the persistent storage with the recovery files from the original cluster to the nodes of the new cluster.
1. Recover the cluster configuration on the first node in the new cluster.
1. Join the remaining nodes to the new cluster.
1. [Recover the databases]().

title: Prerequisites

text:
- We recommend that you recover the cluster to clean nodes.
    If you use the original nodes,
    make sure there are no Redis processes running on any nodes in the new cluster.
- We recommend that you use clean persistent storage drives for the new cluster.
    If you use the original storage drives,
    make sure you back up the files on the original storage drives to a safe location.
- Identify the cluster configuration file that you want to use as the configuration for the recovered cluster.
    The cluster configuration file is `/ccs/ccs-redis.rdb` on the persistent storage for each node.

title: Recover the cluster

text:
1. (Optional) If you want to recover the cluster to the original cluster nodes, uninstall Redis Software from the nodes.

1. [Install Redis Software]() on the new cluster nodes.

    The new servers must have the same basic hardware and software configuration as the original servers, including:

    - The same number of nodes
    - At least the same amount of memory
    - The same Redis Software version
    - The same installation user and paths

The cluster recovery can fail if these requirements are not met.

1. Mount the persistent storage drives with the recovery files to the new nodes.
    These drives must contain the cluster configuration backup files and database persistence files.

Make sure that the user redislabs has permissions to access the storage location
of the configuration and persistence files on each of the nodes.

    If you use local persistent storage, place all of the recovery files on each of the cluster nodes.

1. To recover the original cluster configuration, run [`rladmin cluster recover`]() on the first node in the new cluster:

    [code example]

    For example:

    [code example]

    When the recovery command succeeds,
    this node is configured as the node from the old cluster that has ID 1.

1. To join the remaining servers to the new cluster, run [`rladmin cluster join`]() from each new node:

    [code example]

    For example:

    [code example]

1. Run [`rladmin status`]() to verify the recovered nodes are now active and the databases are pending recovery:

    [code example]

Make sure that you update your [DNS records]()
with the IP addresses of the new nodes.

After the cluster is recovered, you must [recover the databases]().

code: rladmin cluster recover filename [ <persistent_path> | <ephemeral_path> ]<filename> node_uid <node_uid> rack_id <rack_id>

section_id: recover-the-cluster

code: rladmin cluster recover filename /tmp/persist/ccs/ccs-redis.rdb node_uid 1 rack_id 5

code: rladmin cluster join nodes <cluster_member_ip_address> username <username> password <password> replace_node <node_id>

code: rladmin cluster join nodes 10.142.0.4 username admin@example.com password mysecret replace_node 2

code: rladmin status


title: Call home client

summary: The call home client sends your Redis Software cluster's daily usage statistics to Redis.

title: Overview

text:
The call home client collects data hourly and sends daily usage statistics to Redis with a POST request to `https://usage.redis.io/callHome`. Reports include memory usage, shard details, enabled features, and other operational metrics. To prevent increased load when multiple clusters are running, the daily report is sent at a random time.

These reports provide insights into license consumption, which helps Redis to ensure performance metrics align with contractual agreements, optimize service delivery, and offer proactive customer support.
We recommend contacting [Redis support](https://redis.io/support/) before making changes to call home behavior.

title: Collected data

text:
The following example shows the data collected hourly for each database:

[code example]

title: Change data collection schedule

text:
The cluster collects usage data hourly by default.

To change the data collection schedule, [update job scheduler settings]() for `bdb_usage_report_job_settings` with a REST API request:

[code example]

Replace `cron_expression`'s value with a [`cron` expression](https://en.wikipedia.org/wiki/Cron#CRON_expression) that defines the new data collection schedule.

title: Turn off call home client

text:
To stop the call home client from sending daily usage statistics to Redis, [update cluster services configuration]() for `call_home_agent` with a REST API request:

[code example]

customer_name: string

license_hash: string

cluster_UUID: string

cluster_name: string

api_version: string

software_version: string

bdb_uid: string

type: string

shard_type: string

dominant_shard_criteria: string

section_id: collected-data

code:
PUT /v1/job_scheduler
{
  "bdb_usage_report_job_settings": {
    "enabled": true,
    "cron_expression": "*/60 * * * *"
  }
}

section_id: change-data-collection-schedule

code:
PUT /v1/cluster/services_configuration
{
  "call_home_agent": {
    "operating_mode": "disabled"
  }
}

section_id: turn-off-call-home-client


title: Cluster settings

summary: You can view and set various cluster settings such as cluster name, email service, time zone, and license.

title: Overview

text: You can view and set various cluster settings, such as cluster name, email service, time zone, and license, on the **Cluster > Configuration** page.

title: General configuration tab

title: Upload cluster license key

text:
After purchasing a cluster license and if your account has the "Admin" role,
you can upload the cluster license key, either during initial
cluster creation or at any time afterward. The license key defines various
cluster settings, such as the maximum number of shards you can have in
the cluster. For more detailed information see [Cluster license
keys]().

title: View max number of allowed shards

text:
The maximum number of allowed shards, which is determined by the cluster license
key, appears in the **Max number of shards** field in the **License** section.

title: View cluster name

text:
The cluster name appears in the **Cluster name** field in the **License** section. This gives a
common name that your team or Redis support can refer to. It is
especially helpful if you have multiple clusters.

title: Set time zone

text: You can change the **Time zone** field to ensure the date, time fields, and log entries in the Cluster Manager UI are shown in your preferred time zone. This setting doesn't affect other system logs or services.

title: Alert settings tab

text:
The **Alert Settings** tab lets you configure alerts that are relevant to the entire cluster, such as alerts for cluster utilization, nodes, node utilization, security, and database utilization.

You can also configure email server settings and [send alerts by email]() to relevant users.

title: Configure email server settings

text:
To enable email alerts:

1. Enter your email
server details in the **Email server settings** section.

1. Select a connection security method:

    - TLS/SSL

    - STARTTLS

    - None

1. Send a test email to verify your email server settings.


title: Configure clusters

summary: Configuration options for your Redis Software cluster.

title: Cluster settings

summary: The cluster key (or license) enables features and capacity within Redis Enterprise Software

title: Cluster license keys

summary: Sync node clocks to avoid problems with internal custer communication.

title: Synchronize cluster node clocks

summary: Rack-zone awareness ensures high availability in the event of a rack or zone failure.

title: Rack-zone awareness in Redis Software

title: Call home client

summary: Enable Smart client handoffs for your Redis Software cluster.

title: Smart client handoffs

title: Content

text:
You can manage your Redis Software clusters with several different tools:

- Cluster Manager UI (the web-based user interface)
- Command-line tools ([rladmin](), [redis-cli](), [crdb-cli]())
- [REST API]()


title: Cluster license keys

title: Overview

text:
The cluster license key enables Redis Software features and determines shard usage and limits.
You can add or update a cluster key at any time.

title: Trial mode

text:
Trial mode allows all features to be enabled during the trial period.

Trial mode is limited to 30 days and 4 shards, including master and replica shards. A new Redis Software installation starts its 30-day trial period from the day you set up the cluster on the first node.

Trial mode requires a trial license. If you do not provide a license when you create a cluster using the Cluster Manager UI or a [bootstrapping REST API request](), a trial cluster license is generated by default.

title: View cluster license key

text:
To view the cluster license key, use:

- Cluster Manager UI

    1. Go to **Cluster > Configuration > General > License** to see the cluster license details.

    1. Select **Change** to view the cluster license key.

- REST API - [`GET /v1/license`]()

    For a list of returned fields, see the [response section]().

As of version 7.2, Redis Software enforces shard limits by shard types, RAM or flash, instead of the total number of shards. The flash shards limit only appears in the UI if Auto Tiering is enabled.

title: Update cluster license

text:
After you add a cluster key, you cannot remove the key to return the cluster to trial mode.

You can update the cluster license key:

- During cluster setup using the Cluster Manager UI or CLI

- After cluster setup using the Cluster Manager UI:

    1. Go to **Cluster > Configuration > General > License**.

    1. Select **Change**.

    1. Upload or enter your cluster license key.

    1. Select **Save**.

You can update an existing cluster key at any time.
Redis Software checks its validity for the following:
- Cluster name
- Activation and expiration dates
- Shard usage and limits
- Features

If saving a new cluster key fails, the operation returns an error with the failure's cause.
In this case, the existing key stays in effect.

title: Expired cluster license

text:
When the license is expired:

- You cannot do these actions:

    - Change database settings, including security and configuration options.

    - Add a database.

- You can do these actions:

    - Sign in to the Cluster Manager UI and view settings and metrics at all resolutions for the cluster, nodes, and databases.

    - Change cluster settings, including the license key, security for administrators, and cluster alerts.

    - Fail over when a node fails and explicitly migrate shards between nodes.

    - Upgrade a node to a new version of Redis Software.

title: Configure license expiration alert

text:
By default, a cluster license alert is scheduled to occur 7 days before the cluster license expiration date.

You can adjust the threshold value of the cluster license expiration alert based on how far in advance you want to be notified of the license expiration. The value should be within a reasonable range that allows your organization enough time to take action, such as renewing the license, before it expires.

To change the cluster license alert settings, use one of the following methods:

- Cluster Manager UI:

    1. On the **Cluster > Configuration** screen, select the **Alerts Settings** tab.

    1. Click **Edit**.

    1. In the **Cluster utilization** section, enable the alert setting "License expiry notifications will be sent \<value\> days before the license expires" and enter a new value in the box.

    1. Click **Save**.

- [Update cluster]() REST API request:

    The following example changes the cluster license alert to occur 30 days before the cluster license expiration date:

    [code example]

title: Monitor cluster license

text:
As of version 7.2, Redis Software exposes the license quotas and the shards consumption metrics in the Cluster Manager UI or via the [Prometheus integration]().

The `cluster_shards_limit` metric displays the total shard limit by shard type.

Examples:
- `cluster_shards_limit{cluster="mycluster.local",shard_type="ram"} 100.0`
- `cluster_shards_limit{cluster="mycluster.local",shard_type="flash"} 50.0`

The `bdb_shards_used` metric displays the used shard count by database and shard type.

Examples:
- `bdb_shards_used{bdb="2",cluster="mycluster.local",shard_type="ram"} 86.0`
- `bdb_shards_used{bdb="3",cluster="mycluster.local",shard_type="flash"} 23.0`

code:
PUT /v1/cluster
    {
        "alert_settings": {
            "cluster_license_about_to_expire": {
                "enabled": true,
                "threshold": "30"
            }
        }
    }

section_id: configure-license-expiration-alert


title: Rack-zone awareness in Redis Software

title: Overview

text:
Rack-zone awareness helps ensure high availability in the event of a rack or zone failure.

When you enable rack-zone awareness in a Redis Software cluster, you assign
a [rack-zone ID](#rack-zone-id-rules) to each node. This ID is used to map the node to a
physical rack or logical zone. The cluster can then ensure that primary shards, corresponding replica shards, and associated endpoints are placed on [nodes in different racks or zones](#node-layout-guidelines).

In the event of a rack or zone failure, the replicas and endpoints in the remaining racks and zones are promoted. This ensures high availability when a rack or zone fails.

There is no limitation on the number of racks and zones per cluster. Each
node can belong to a different rack or multiple nodes can belong to the
same rack.

Rack-zone awareness affects various cluster, node, and database actions, such as node rebalancing, node removal, node replacement, shard and endpoint migration, and database failover.

title: Rack-zone ID rules

text:
The rack-zone ID must comply with the following rules:

- Maximum length of 63 characters.
- Characters consist of letters, digits, and hyphens ('-'). Underscores ('_') are also accepted as of Redis Software [6.4.2-61]().
- ID starts with a letter and ends with a letter or a digit.

Rack-zone IDs are **case-insensitive** (uppercase and lowercase letter are treated as the same).

title: Node layout guidelines

text:
Avoid placing the majority of nodes in one availability zone.

If a Redis Software cluster consists of three nodes (the recommended minimum), follow these guidelines:

- For high availability, the three nodes must be distributed across three *distinct* racks or zones.

- When using availability zones, all three zones should exist within the same *region* to avoid potential latency issues.

title: Set up rack-zone awareness

text:
To enable rack-zone awareness, you need to configure it for the
cluster, nodes, and [databases](#enable-database-rack-zone-awareness).

- After rack-zone awareness is enabled for a cluster, it cannot be turned off.

- After a rack ID is assigned to a node, it cannot be changed.

title: New cluster

text:
You can set up rack-zone awareness for the cluster and its nodes during [cluster creation]():

1. In the **Cluster** screen's **Configuration** section, enable **Rack zone awareness**.

1. Select **Next** to continue to the **Node** configuration screen.

1. Enter a **Rack-zone ID** for the current node.

1. Finish [cluster setup]().

1. For every [node you add to the cluster](), assign a different **Rack-zone ID**.

title: Existing cluster

text:
If you did not configure rack-zone awareness during cluster creation, you can configure rack-zone awareness for existing clusters using the [REST API]():

1. For each node in the cluster, assign a different rack-zone ID using the REST API to [update the node]():

    [code example]

1. [Update the cluster policy]() to enable rack-zone awareness:

    [code example]

title: Set up two-dimensional rack-zone awareness

text:
As of Redis Software version 7.22, you can assign a `second_rack_id` to set up two-dimensional rack-zone awareness.

You can use two-dimensional rack-zone awareness to create logical zones within a zone or rack.

title: New clusters

text:
To set up two-dimensional rack-zone awareness during cluster creation, assign a `second_rack_id` to each node in the cluster in addition to the `rack_id` using the [REST API]() or [rladmin]().

#### REST API method

To create a new cluster with two-dimensional rack-zone awareness, you can use [bootstrap REST API requests]():

1. Create the new cluster on the first node, set `rack_aware` to `true`, and assign a `rack_id` and `second_rack_id` to the first node:

    [code example]

1. Join each new node you want to add to the cluster and assign a different `rack_id` and `second_rack_id` to it:

    [code example]

#### Command-line method

To create a new cluster with two-dimensional rack-zone awareness using the command line:

1. Run [`rladmin cluster create`]() to create the initial cluster on one node, enable rack-zone awareness, and assign a `rack_id` and `second_rack_id`:

    [code example]

1. Run [`rladmin cluster join`]() for each new node you want to add to the cluster and assign a different `rack_id` and `second_rack_id`:

    [code example]

title: Existing clusters

text:
You can configure two-dimensional rack-zone awareness for existing clusters using the [REST API]().

For each node in the cluster, assign a different `second_rack_id` using the REST API to [update the node]():

[code example]

title: Enable database rack-zone awareness

text:
Before you can enable rack-zone awareness for a database, you must configure rack-zone awareness for the cluster and its nodes. For more information, see [set up rack-zone awareness](#set-up-rack-zone-awareness).

<!--
To enable rack-zone awareness for a database using the Cluster Manager UI:

1. From **databases**, [create a new database]() or edit an existing database's **configuration**.

1. Expand the **High availability & durability** section.

1. Enable [**Replication**]().

1. Select **Rack-zone awareness**.

1. **Create** or **Save** your database.

1. [Rearrange database shards](#rearrange-database-shards) to optimize an existing database for rack-zone awareness.

If you enabled rack-zone awareness during database creation, you can ignore this step.

-->

To enable rack-zone awareness for a database, use a [REST API request]():

[code example]

title: Rearrange database shards

text:
After you enable rack-zone awareness for an existing database, you should generate an optimized shard placement blueprint using the [REST API]() and use it to rearrange the shards in different racks or zones.

1. [Generate an optimized shard placement blueprint]():

    1. Send the following `GET` request:

        [code example]

    1. Copy the `cluster-state-id` from the response headers.

    1. Copy the JSON response body, which represents the new shard placement blueprint.

1. [Rearrange the database shards]() according to the new shard placement blueprint:

    1. In the request headers, include the <nobr>`cluster-state-id`</nobr> from the `optimize_shards_placement` response.

    1. Add the following JSON in the request body and replace <nobr>`<shard placement blueprint>`</nobr> with the new blueprint:

        [code example]

    1. Send the following `PUT` request to rearrange the shards:

        [code example]

title: Shard placement without rack-zone awareness

text: Even if a database has rack-zone awareness turned off, the cluster still ensures that primary and replica shards are placed on distinct nodes.

code:
PUT /v1/nodes/<node-ID>
    { "rack_id": "rack-zone-ID" }

section_id: existing-cluster

code:
PUT /v1/cluster/policy
    { "rack_aware": true }

code:
POST /v1/bootstrap/create_cluster
    {
      "action": "create_cluster",
      "cluster": {
        "nodes": [],
        "name": "<cluster.fqdn>"
      },
      "credentials": {
        "username": "<admin-email>",
        "password": "<admin-password>"
      },
      "node": {
        "identity": {
            "rack_id": "<availability-zone-ID>",
            "second_rack_id": "<rack-ID>"
        }
      },
      "policy": {
        "rack_aware": true
      }
    }

section_id: new-clusters

code:
POST /v1/bootstrap/join_cluster
    {
      "action": "join_cluster",
      "cluster": {
         "nodes": [],
         "name": "<cluster.fqdn>"
      },
      "credentials": {
        "username": "<admin-email>",
        "password": "<admin-password>"
      },
      "node": {
        "identity": {
            "rack_id": "<availability-zone-ID>",
            "second_rack_id": "<rack-ID>"
        }
      }
    }

code:
$ rladmin cluster create name <cluster-name> \
        username <admin-email> \
        password <admin-password> \
        rack_aware \
        rack_id <node-rack-ID> \
        second_rack_id <second-node rack-ID>

code:
$ rladmin cluster join nodes <node-IP-address> \
        username <admin-email> \
        password <admin-password> \
        rack_id <node-rack ID> \
        second_rack_id <second-node-rack-ID>

code:
PUT /v1/nodes/<node-ID>
{ "second_rack_id": "rack-ID" }

section_id: existing-clusters

code:
PUT /v1/bdbs/<database-ID>
{ "rack_aware": true }

section_id: enable-database-rack-zone-awareness

section_id: rearrange-database-shards

code:
{
          "shards_blueprint": <shard placement blueprint>
        }

code: PUT /v1/bdbs/<database-ID>


title: Smart client handoffs

title: Content

text:
Smart client handoffs (SCH) is a feature of Redis Cloud and Redis Software servers that lets them actively notify clients about planned server maintenance shortly before it happens. This lets a client reconnect or otherwise respond gracefully without significant interruptions in service.
See [Smart client handoffs]() for more information about SCH.

SCH is supported only for [rolling upgrades]().

To enable SCH on a Redis Software server, you must use the
[/v1/cluster]()
REST API request to set the `client_maint_notifications` option to `true`.
The example below shows how to do this using the
[`curl`](https://curl.se/) command line utility:

[code example]

code:
curl -k -X PUT -H "accept: application/json" \
    -H "content-type: application/json" \
    -u "<username>:<password>" \
    -d '{ "client_maint_notifications": true }' \
    https://<host>:<port>/v1/cluster

section_id: content


title: Synchronize cluster node clocks

title: Overview

text:
To avoid problems with internal cluster communications that can impact your data integrity,
make sure that the clocks on all of the cluster nodes are synchronized using Chrony and/or NTP.

When you install Redis Software,
the install script checks if Chrony or NTP is running.
If they are not, the installation process asks for permission to configure a scheduled Cron job.
This should make sure that the node's clock is always synchronized.
If you did not confirm configuring this job during the installation process,
you must use the Network Time Protocol (NTP) regularly to make sure that all server clocks are synchronized.

To synchronize the server clock, run the command that is appropriate for your operating system.

title: Set up NTP synchronization

text: To set up NTP synchronization, see the following sections for instructions for specific operating systems.

title: Ubuntu 18.04 and Ubuntu 20.04

text:
1. Install Chrony, a replacement for NTP:
   [code example]

1. Edit the Chrony configuration file:
   [code example]

1. Add `server pool.ntp.org` to the file, replace `pool.ntp.org` with your own NTP server, then save.

1. Restart the Chrony service:
   [code example]

1. Check the Chrony service status:
   [code example]

For more details, refer to the official [Ubuntu 20.04 documentation](https://ubuntu.com/server/docs/network-ntp).

title: RHEL 7

text:
1. Install Chrony, a replacement for NTP:
   [code example]

1. Edit the Chrony configuration file:
   [code example]

1. Add `server pool.ntp.org` to the file, replace `pool.ntp.org` with your own NTP server, then save.

1. Enable and start the Chrony service:
   [code example]

1. Check the Chrony service status:
   [code example]

For more details, refer to the official [RHEL 7 documentation](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/ch-configuring_ntp_using_the_chrony_suite#sect-Using_chrony).

title: RHEL 8 and RHEL 9

text:
1. Install Chrony, a replacement for NTP:
   [code example]

1. Edit the Chrony configuration file:
   [code example]

1. Add `server pool.ntp.org` to the file, replace `pool.ntp.org` with your own NTP server, then save.

1. Enable and start the Chrony service:
   [code example]

1. Check the Chrony service status:
   [code example]

For more details, refer to the official [RHEL 8 and 9 documentation](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/configuring_basic_system_settings/configuring-time-synchronization_configuring-basic-system-settings).

title: Amazon Linux 2

text:
1. Install Chrony, a replacement for NTP:
   [code example]

1. Edit the Chrony configuration file:
   [code example]

1. Add `server pool.ntp.org` to the file, replace `pool.ntp.org` with your own NTP server, then save.

1. Enable and start the Chrony service:
   [code example]

1. Check the Chrony service status:
   [code example]

For more details, refer to the official [Amazon Linux 2 documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-time.html).

If you are using Active-Active databases, you must use [Network Time Service (ntpd)]()
to synchronize OS clocks consistently across clusters to handle conflict resolution according to the OS time.

code: sudo apt install chrony

code: sudo nano /etc/chrony/chrony.conf

code: sudo systemctl restart chrony

code: sudo systemctl status chrony

code: sudo yum install chrony

code: sudo nano /etc/chrony.conf

code: sudo systemctl enable chronyd && sudo systemctl start chronyd

code: sudo systemctl status chronyd

code: sudo dnf install chrony


title: Manage clusters

summary: Administrative tasks and information related to the Redis Software cluster.

summary: How to set up a new cluster using the management UI.

title: Set up a new cluster

title: Add a node

title: Configure clusters

summary: Configuration changes and information you can use to optimize your performance and memory usage.

title: Optimize clusters

summary: Prepare a cluster node for maintenance.

title: Maintenance mode for cluster nodes

title: Change node roles

title: Recover a failed cluster

summary: Remove a node from your Redis Software cluster.

title: Remove a node

summary: Replace a node in your cluster that is down.

title: Replace a cluster node

summary: Management actions performed with Redis Software are logged to make sure system management tasks are appropriately performed or monitored by administrators and for compliance with regulatory standards.

title: Logging events

title: Content

text:
You can manage your Redis Software clusters with several different tools:

- Cluster Manager UI (the web-based user interface)
- Command-line tools ([rladmin](), [redis-cli](), [crdb-cli]())
- [REST API]()