

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# ElastiCache 通过 Multi-AZ 与 Valkey 和 Redis OSS 一起使用来最大限度地减少停机时间
<a name="AutoFailover"></a>

在许多情况下， ElastiCache 对于 Valkey 和 Redis，OSS 可能需要更换主节点；其中包括某些类型的计划内维护以及不太可能发生的主节点故障或可用区故障。

此替换会导致群集出现一些停机时间，但如果 Multi-AZ 启用此选项，则停机时间会降至最低。主节点的角色会自动将故障转移到其中一个只读副本。无需创建和配置新的主节点，因为 ElastiCache 这将以透明的方式处理这个问题。此故障转移和副本提升可确保您在提升完成后立即继续写入新的主节点。

ElastiCache 还会传播已提升副本的域名服务 (DNS) 名称。这样做的原因是，如果您的应用程序写入到主终端节点，则无需在应用程序中进行终端节点更改。如果您从单个终端节点进行读取，请确保将提升为主节点的副本的读取终端节点更改为新副本的终端节点。

如果由于维护更新或自助服务更新而启动了计划的节点替换，请注意以下事项：
+ 对于 Valkey 和 Redis OSS 集群，计划的节点替换会在集群处理传入的写入请求时完成。
+ 对于在 5.0.6 或更高版本引擎上运行的 Multi-AZ 已启用 Valkey 和 Redis OSS 集群模式的集群，当集群处理传入的写入请求时，计划中的节点更换完成。
+ 对于在 4.0.10 或更早版本的引擎上运行且 Multi-AZ 已启用 Valkey 和 Redis OSS 集群模式的集群，您可能会注意到与 DNS 更新相关的短暂写入中断。此中断可能需要几秒钟。此过程比重新创建和配置新的主数据库要快得多，如果不启用 Multi-AZ，就会出现这种情况。

您可以使用 ElastiCache 管理控制台 AWS CLI、或 ElastiCache API Multi-AZ 来启用。

 ElastiCache Multi-AZ 在你的 Valkey 或 Redis OSS 集群（在 API 和 CLI 中，复制组）上启用可以提高容错能力。尤其是在集群 read/write 的主集群因任何原因变得无法访问或出现故障的情况下。 Multi-AZ 仅在每个分片中有多个节点的 Valkey 和 Redis OSS 集群上受支持。

**Topics**
+ [正在启用 Multi-AZ](#AutoFailover.Enable)
+ [带有 Multi-AZ 响应的故障场景](#AutoFailover.Scenarios)
+ [测试自动故障转移](#auto-failover-test)
+ [的限制 Multi-AZ](#AutoFailover.Limitations)

## 正在启用 Multi-AZ
<a name="AutoFailover.Enable"></a>

您可以在使用 ElastiCache 控制台或 API 创建或修改集群（API 或 CLI AWS CLI、复制组） Multi-AZ 时启 ElastiCache用。

您只能在至少有一个可用 Multi-AZ 只读副本的 Valkey 或 Redis OSS（已禁用集群模式）集群上启用。没有只读副本的集群不提供高可用性或容错能力。有关创建具有复制功能的集群的更多信息，请参阅[创建 Valkey 或 Redis OSS 复制组](Replication.CreatingRepGroup.md)。有关将只读副本添加到具有复制功能的集群的信息，请参阅[为 Valkey 或 Redis OSS（已禁用集群模式）添加只读副本](Replication.AddReadReplica.md)。

**Topics**
+ [启用 Multi-AZ （控制台）](#AutoFailover.Enable.Console)
+ [启用 Multi-AZ (AWS CLI)](#AutoFailover.Enable.CLI)
+ [启用 Multi-AZ (ElastiCache API)](#AutoFailover.Enable.API)

### 启用 Multi-AZ （控制台）
<a name="AutoFailover.Enable.Console"></a>

您可以在创建新的 Valkey 或 Redis OSS 集群时 Multi-AZ 使用 ElastiCache 控制台启用，也可以通过复制修改现有集群来启用。

Multi-AZ 在 Valkey 或 Redis OSS（已启用集群模式）集群上默认处于启用状态。

**重要**  
ElastiCache Multi-AZ 仅当集群在与主分片不同的可用区中至少包含一个副本时，才会自动启用。

#### 使用 ElastiCache 控制台创建集群 Multi-AZ 时启用
<a name="AutoFailover.Enable.Console.NewCacheCluster"></a>

有关此过程的更多信息，请参阅 [创建 Valkey（已禁用集群模式）集群（控制台）](SubnetGroups.designing-cluster-pre.valkey.md#Clusters.Create.CON.valkey-gs)。确保有一个或多个副本并启用 Multi-AZ。

#### Multi-AZ 在现有集群上启用（控制台）
<a name="AutoFailover.Enable.Console.ReplGrp"></a>

有关此过程的更多信息，请参阅修改集群[使用 ElastiCache AWS 管理控制台](Clusters.Modify.md#Clusters.Modify.CON)。

### 启用 Multi-AZ (AWS CLI)
<a name="AutoFailover.Enable.CLI"></a>

以下代码示例使用 AWS CLI Multi-AZ 为复制组启用`redis12`。

**重要**  
复制组 `redis12` 必须已存在且具有至少一个可用只读副本。

对于 Linux、macOS 或 Unix：

```
aws elasticache modify-replication-group \
    --replication-group-id {{redis12}} \
    --automatic-failover-enabled \
    --multi-az-enabled \
    --apply-immediately
```

对于 Windows：

```
aws elasticache modify-replication-group ^
    --replication-group-id {{redis12}} ^
    --automatic-failover-enabled ^
    --multi-az-enabled ^
    --apply-immediately
```

该命令的 JSON 输出内容应如下所示。

```
{
    "ReplicationGroup": {
        "Status": "modifying", 
        "Description": "One shard, two nodes", 
        "NodeGroups": [
            {
                "Status": "modifying", 
                "NodeGroupMembers": [
                    {
                        "CurrentRole": "primary", 
                        "PreferredAvailabilityZone": "us-west-2b", 
                        "CacheNodeId": "0001", 
                        "ReadEndpoint": {
                            "Port": 6379, 
                            "Address": "redis12-001.v5r9dc.0001.usw2.cache.amazonaws.com"
                        }, 
                        "CacheClusterId": "redis12-001"
                    }, 
                    {
                        "CurrentRole": "replica", 
                        "PreferredAvailabilityZone": "us-west-2a", 
                        "CacheNodeId": "0001", 
                        "ReadEndpoint": {
                            "Port": 6379, 
                            "Address": "redis12-002.v5r9dc.0001.usw2.cache.amazonaws.com"
                        }, 
                        "CacheClusterId": "redis12-002"
                    }
                ], 
                "NodeGroupId": "0001", 
                "PrimaryEndpoint": {
                    "Port": 6379, 
                    "Address": "redis12.v5r9dc.ng.0001.usw2.cache.amazonaws.com"
                }
            }
        ], 
        "ReplicationGroupId": "redis12", 
        "SnapshotRetentionLimit": 1, 
        "AutomaticFailover": "enabling", 
        "MultiAZ": "enabled", 
        "SnapshotWindow": "07:00-08:00", 
        "SnapshottingClusterId": "redis12-002", 
        "MemberClusters": [
            "redis12-001", 
            "redis12-002"
        ], 
        "PendingModifiedValues": {}
    }
}
```

有关更多信息，请参阅 *AWS CLI 命令参考*中的下列主题：
+ [create-cache-cluster](https://docs.aws.amazon.com/cli/latest/reference/elasticache/create-cache-cluster.html)
+ [create-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/create-replication-group.html)
+ *AWS CLI 命令参考*中的 [modify-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-replication-group.html)。

### 启用 Multi-AZ (ElastiCache API)
<a name="AutoFailover.Enable.API"></a>

以下代码示例使用 ElastiCache API Multi-AZ 为复制组启用`redis12`。

**注意**  
要使用此示例，复制组 `redis12` 必须已存在且具有至少一个可用只读副本。

```
https://elasticache.us-west-2.amazonaws.com/
    ?Action=ModifyReplicationGroup
    &ApplyImmediately=true
    &AutoFailover=true
    &MultiAZEnabled=true
    &ReplicationGroupId=redis12
    &Version=2015-02-02
    &SignatureVersion=4
    &SignatureMethod=HmacSHA256
    &Timestamp=20140401T192317Z
    &X-Amz-Credential=<credential>
```

有关更多信息，请参阅 *ElastiCache API 参考*中的下列主题：
+ [CreateCacheCluster](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CreateCacheCluster.html)
+ [CreateReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CreateReplicationGroup.html)
+ [ModifyReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyReplicationGroup.html)

## 带有 Multi-AZ 响应的故障场景
<a name="AutoFailover.Scenarios"></a>

在引入之前 Multi-AZ，通过重新创建和重新配置故障节点来 ElastiCache 检测并替换集群的故障节点。如果启用 Multi-AZ，则出现故障的主节点会故障转移到复制延迟最小的副本。选定副本会自动提升为主节点，这比创建并重新预配置新的主节点快得多。提升过程通常只需几秒钟的时间，然后您可以再次对集群进行写入。

 Multi-AZ 启用后，会 ElastiCache 持续监视主节点的状态。如果主节点发生故障，则根据故障的类型执行以下操作之一。

**Topics**
+ [仅主节点出现故障时的故障情形](#AutoFailover.Scenarios.PrimaryOnly)
+ [当主节点和一些只读副本发生故障时的故障情形](#AutoFailover.Scenarios.PrimaryAndReplicas)
+ [整个集群出现故障时的故障情形](#AutoFailover.Scenarios.AllFail)

### 仅主节点出现故障时的故障情形
<a name="AutoFailover.Scenarios.PrimaryOnly"></a>

如果只有主节点出现故障，则复制滞后最小的只读副本将提升为主节点。然后，将在与发生故障的主节点相同的可用区域中创建和预置替换只读副本。

当只有主节点出现故障时， ElastiCache Multi-AZ 会执行以下操作：

1. 发生故障的主节点脱机。

1. 复制滞后最小的只读副本将提升为主节点。

   一旦提升过程完成（通常只需几秒钟的时间），写入操作就会恢复。如果您的应用程序正在对主终端节点进行写入，则无需更改用于写入或读取的终端节点。 ElastiCache 会传播已提升副本的 DNS 名称。

1. 启动和预配置替代只读副本。

   将在可用区 (发生故障的主节点的位置) 启动替换只读副本，以便维护节点的分配。

1. 该副本将与新的主节点同步。

新的副本可用后，请注意以下影响：
+ **主端点** – 由于新主节点的 DNS 名称会传播到主端点，因此您不需要对应用程序进行任何更改。
+ **读取端点** – 读取器终端节点会自动更新为指向新的副本节点。

有关查找集群的终端节点的信息，请参阅以下主题：
+ [查找 Valkey 或 Redis OSS（已禁用集群模式）集群端点（控制台）](Endpoints.md#Endpoints.Find.Redis)
+ [查找 Valkey 或 Redis OSS 复制组的终端节点 (AWS CLI)](Endpoints.md#Endpoints.Find.CLI.ReplGroups)
+ [为 Valkey 或 Redis OSS 复制组查找终端节点 (API) ElastiCache](Endpoints.md#Endpoints.Find.API.ReplGroups)

 

### 当主节点和一些只读副本发生故障时的故障情形
<a name="AutoFailover.Scenarios.PrimaryAndReplicas"></a>

如果主节点和至少一个只读副本发生故障，则具有最低复制滞后的可用副本将提升到主集群，并在与故障节点以及提升为主节点的副本相同的可用区中创建新只读副本。

当主节点和某些只读副本出现故障时， ElastiCache Multi-AZ 会执行以下操作：

1. 发生故障的主节点和发生故障的只读副本脱机。

1. 复制滞后最小的可用副本将提升为主节点。

   一旦提升过程完成（通常只需几秒钟的时间），写入操作就会恢复。如果您的应用程序正在写入主终端节点，则无需更改用于写入的终端节点。 ElastiCache 传播已提升副本的 DNS 名称。

1. 创建和预调配替换副本。

   将在可用区（发生故障的节点的位置）创建替换副本，以便维护节点的分配。

1. 所有集群将与新的主节点同步。

在新节点可用后，对应用程序进行以下更改：
+ **主端点** – 不要对应用程序进行任何更改。新主节点的 DNS 名称将传播到主终端节点。
+ **读取端点** – 读取端点会自动更新为指向新的副本节点。

有关查找复制组的端点的信息，请参阅以下主题：
+ [查找 Valkey 或 Redis OSS（已禁用集群模式）集群端点（控制台）](Endpoints.md#Endpoints.Find.Redis)
+ [查找 Valkey 或 Redis OSS 复制组的终端节点 (AWS CLI)](Endpoints.md#Endpoints.Find.CLI.ReplGroups)
+ [为 Valkey 或 Redis OSS 复制组查找终端节点 (API) ElastiCache](Endpoints.md#Endpoints.Find.API.ReplGroups)

 

### 整个集群出现故障时的故障情形
<a name="AutoFailover.Scenarios.AllFail"></a>

如果整个集群全部发生故障，则在与原始节点相同的可用区中重新创建所有节点并预配置。

在此情况下，由于集群中的每个节点均发生故障，因此集群中的所有数据将丢失。这种情况很少出现。

当整个集群出现故障时， ElastiCache Multi-AZ 会执行以下操作：

1. 发生故障的主节点和只读副本脱机。

1. 创建和预配置替换主节点。

1. 创建和预调配替换副本。

   将在可用区（发生故障的节点的位置）创建替换，以便维护节点的分配。

   由于整个集群发生故障，因此数据将丢失，并且所有新节点将冷启动。

由于每个替换节点具有与其要替换的节点相同的终端节点，因此不需要在应用程序中对任何终端节点进行更改。

有关查找复制组的端点的信息，请参阅以下主题：
+ [查找 Valkey 或 Redis OSS（已禁用集群模式）集群端点（控制台）](Endpoints.md#Endpoints.Find.Redis)
+ [查找 Valkey 或 Redis OSS 复制组的终端节点 (AWS CLI)](Endpoints.md#Endpoints.Find.CLI.ReplGroups)
+ [为 Valkey 或 Redis OSS 复制组查找终端节点 (API) ElastiCache](Endpoints.md#Endpoints.Find.API.ReplGroups)

建议您在不同的可用区内创建主节点和只读副本以提高容错能力水平。

## 测试自动故障转移
<a name="auto-failover-test"></a>

启用自动故障转移后，您可以使用 ElastiCache 控制台 AWS CLI、和 ElastiCache API 对其进行测试。

在测试时，请注意以下内容：
+ 在任何 24 小时内，您可以使用此操作在最多 15 个分片（在 ElastiCache API 中称为节点组和 AWS CLI）上测试自动故障转移。
+ 如果在不同集群的分片 (在 API 和 CLI 中称为复制组) 上调用此操作，您可以让调用同时进行。
+ 在某些情况下，您可能会在同一 Valkey 或 Redis OSS（已启用集群模式）复制组中的不同分片上多次调用此操作。在这种情况下，必须先完成第一个节点替换，然后再进行后续调用。
+ 要确定节点更换是否已完成，请使用 Amazon ElastiCache 控制台 AWS CLI、或 ElastiCache API 检查事件。查找下列与自动故障转移相关的事件，此处按事件的可能发生顺序列出：

  1. 复制组消息：`Test Failover API called for node group <node-group-id>`

  1. 缓存集群消息：`Failover from primary node <primary-node-id> to replica node <node-id> completed`

  1. 复制组消息：`Failover from primary node <primary-node-id> to replica node <node-id> completed`

  1. 缓存集群消息：`Recovering cache nodes <node-id>`

  1. 缓存集群消息：`Finished recovery for cache nodes <node-id>`

  有关更多信息，请参阅下列内容：
  + 《ElastiCache 用户指南》**中的 [查看 ElastiCache 事件](ECEvents.Viewing.md)
  + 《ElastiCache API 参考》**中的 [DescribeEvents](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DescribeEvents.html)
  + *AWS CLI 命令参考*中的 [describe-events](https://docs.aws.amazon.com/cli/latest/reference/elasticache/describe-events.html)。
+ 此 API 专为测试应用程序在 ElastiCache 故障转移时的行为而设计。它不是用于启动故障转移以解决集群问题的操作工具。此外，在某些情况下，例如大规模运营事件， AWS 可能会阻止此 API。

**Topics**
+ [使用测试自动故障转移 AWS 管理控制台](#auto-failover-test-con)
+ [使用测试自动故障转移 AWS CLI](#auto-failover-test-cli)
+ [使用 ElastiCache API 测试自动故障转移](#auto-failover-test-api)

### 使用测试自动故障转移 AWS 管理控制台
<a name="auto-failover-test-con"></a>

使用以下过程测试通过控制台进行自动故障转移。

**测试自动故障转移**

1. 登录 AWS 管理控制台 并打开 ElastiCache 控制台，网址为[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/)。

1. 在导航窗格中，选择 **Valkey** 或 **Redis OSS**。

1. 从集群列表选择要测试的集群名称左侧的复选框。此集群必须至少有一个只读副本节点。

1. 在 “**详细信息**” 区域中，确认此集群 Multi-AZ 已启用。如果集群未 Multi-AZ 启用，请选择其他集群或修改此集群以启用 Multi-AZ。有关更多信息，请参阅 [使用 ElastiCache AWS 管理控制台](Clusters.Modify.md#Clusters.Modify.CON)。  
![图片： Multi-AZ 已启用集群的详细信息区域](http://docs.aws.amazon.com/zh_cn/AmazonElastiCache/latest/dg/images/ElastiCache-AutoFailover-MultiAZ-Enabled.png)

1. 对于 Valkey 或 Redis OSS（已禁用集群模式），请选择集群的名称。

   对于 Valkey 或 Redis OSS（已启用集群模式），请执行以下操作：

   1. 选择集群的名称。

   1. 在 **Shards** 页面上，对于要测试故障转移的分片 (在 API 和 CLI 中称为节点组)，选择分片的名称。

1. 在“Nodes”页面上，选择 **Failover Primary**。

1. 选择 **Continue** 可对主节点进行故障转移，选择 **Cancel** 可取消操作，不对主节点进行故障转移。

   故障转移过程中，控制台继续将节点状态显示为*可用*。要跟踪您的故障转移测试进度，请从控制台导航窗格选择 **Events**。在 **Events** 选项卡上，观察指示故障转移已开始（`Test Failover API called`）和已完成（`Recovery completed`）的事件。

 

### 使用测试自动故障转移 AWS CLI
<a name="auto-failover-test-cli"></a>

您可以使用该 AWS CLI 操作在任何 Multi-AZ 已启用的群集上测试自动故障转移`test-failover`。

**参数**
+ `--replication-group-id` – 必需。要测试的复制组 (在控制台上为集群)。
+ `--node-group-id` – 必需。要在其上测试自动故障转移的节点组的名称。在 24 小时滚动期间您最多可以测试 15 个节点组。

以下示例使用在 Valkey 或 Redis OSS（已启用集群模式）集群`redis00-0003`中的节点组上测试自动故障转移。 AWS CLI `redis00`

**Example 测试自动故障转移**  
对于 Linux、macOS 或 Unix：  

```
aws elasticache test-failover \
   --replication-group-id {{redis00}} \
   --node-group-id {{redis00-0003}}
```
对于 Windows：  

```
aws elasticache test-failover ^
   --replication-group-id {{redis00}} ^
   --node-group-id {{redis00-0003}}
```

上面命令的输出类似于下面所示。

```
{
    "ReplicationGroup": {
        "Status": "available", 
        "Description": "1 shard, 3 nodes (1 + 2 replicas)", 
        "NodeGroups": [
            {
                "Status": "available", 
                "NodeGroupMembers": [
                    {
                        "CurrentRole": "primary", 
                        "PreferredAvailabilityZone": "us-west-2c", 
                        "CacheNodeId": "0001", 
                        "ReadEndpoint": {
                            "Port": 6379, 
                            "Address": "redis1x3-001.7ekv3t.0001.usw2.cache.amazonaws.com"
                        }, 
                        "CacheClusterId": "redis1x3-001"
                    }, 
                    {
                        "CurrentRole": "replica", 
                        "PreferredAvailabilityZone": "us-west-2a", 
                        "CacheNodeId": "0001", 
                        "ReadEndpoint": {
                            "Port": 6379, 
                            "Address": "redis1x3-002.7ekv3t.0001.usw2.cache.amazonaws.com"
                        }, 
                        "CacheClusterId": "redis1x3-002"
                    }, 
                    {
                        "CurrentRole": "replica", 
                        "PreferredAvailabilityZone": "us-west-2b", 
                        "CacheNodeId": "0001", 
                        "ReadEndpoint": {
                            "Port": 6379, 
                            "Address": "redis1x3-003.7ekv3t.0001.usw2.cache.amazonaws.com"
                        }, 
                        "CacheClusterId": "redis1x3-003"
                    }
                ], 
                "NodeGroupId": "0001", 
                "PrimaryEndpoint": {
                    "Port": 6379, 
                    "Address": "redis1x3.7ekv3t.ng.0001.usw2.cache.amazonaws.com"
                }
            }
        ], 
        "ClusterEnabled": false, 
        "ReplicationGroupId": "redis1x3", 
        "SnapshotRetentionLimit": 1, 
        "AutomaticFailover": "enabled", 
        "MultiAZ": "enabled",
        "SnapshotWindow": "11:30-12:30", 
        "SnapshottingClusterId": "redis1x3-002", 
        "MemberClusters": [
            "redis1x3-001", 
            "redis1x3-002", 
            "redis1x3-003"
        ], 
        "CacheNodeType": "cache.m3.medium", 
        "DataTiering": "disabled",
        "PendingModifiedValues": {}
    }
}
```

要跟踪故障转移的进度，请使用 AWS CLI `describe-events`操作。

有关更多信息，请参阅下列内容：
+ *AWS CLI 命令参考*中的 [test-failover](https://docs.aws.amazon.com/cli/latest/reference/elasticache/test-failover.html)。
+ *AWS CLI 命令参考*中的 [describe-events](https://docs.aws.amazon.com/cli/latest/reference/elasticache/describe-events.html)。

 

### 使用 ElastiCache API 测试自动故障转移
<a name="auto-failover-test-api"></a>

您可以 Multi-AZ 使用 ElastiCache API 操作在任何启用的群集上测试自动故障转移`TestFailover`。

**参数**
+ `ReplicationGroupId` – 必需。要测试的复制组（在控制台上为集群）。
+ `NodeGroupId` – 必需。要在其上测试自动故障转移的节点组的名称。在 24 小时滚动期间您最多可以测试 15 个节点组。

以下示例在复制组 (在控制台上为集群) `redis00` 中的节点组 `redis00-0003` 上测试自动故障转移。

**Example 测试自动失效转移**  

```
https://elasticache.us-west-2.amazonaws.com/
    ?Action=TestFailover
    &NodeGroupId=redis00-0003
    &ReplicationGroupId=redis00
    &Version=2015-02-02
    &SignatureVersion=4
    &SignatureMethod=HmacSHA256
    &Timestamp=20140401T192317Z
    &X-Amz-Credential=<credential>
```

要跟踪故障转移的进度，请使用 ElastiCache `DescribeEvents` API 操作。

有关更多信息，请参阅下列内容：
+ [TestFailover](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_TestFailover.html)在 *ElastiCache API 参考*中 
+ [DescribeEvents](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DescribeEvents.html)在 *ElastiCache API 参考*中 

 

## 的限制 Multi-AZ
<a name="AutoFailover.Limitations"></a>

请注意以下限制 Multi-AZ：
+ Multi-AZ 在 Valkey 和 Redis OSS 版本 2.8.6 及更高版本上都支持。
+ Multi-AZ T1 节点类型不支持。
+ Valkey 和 Redis OSS 复制是异步的。因此，当主节点故障转移到副本时，可能因复制滞后导致丢失少量数据。

  在选择要升级为主副本时，请 ElastiCache 选择复制延迟最小的副本。换句话说，它选择最新的副本。这样做有助于最大程度地减少丢失的数据量。复制滞后最小的副本可以位于同一发生故障的主节点中，也可以位于不同于发生故障的主节点的可用区中。
+ 在禁用集群模式的 Valkey 或 Redis OSS 集群上手动将只读副本提升为主副本时，只有在禁用自动故障转移时 Multi-AZ 才能执行此操作。要将只读副本提升为主副本，请执行以下步骤：

  1. 在集群 Multi-AZ 上禁用。

  1. 禁用集群上的自动故障转移。您可以在控制台中取消选中复制组的**自动失效转移**复选框来执行此操作。您也可以 AWS CLI 通过在调用`ModifyReplicationGroup`操作`false`时将`AutomaticFailoverEnabled`属性设置为来实现此目的。

  1. 将只读副本提升为主集群。

  1. Re-enable Multi-AZ.
+ ElastiCache 对于 Redis 来说，OSS Multi-AZ 和仅附加文件 (AOF) 是相互排斥的。启用了一个则不能启用另一个。
+ 节点的故障可能是因极少出现的整个可用区故障造成的。在此情况下，仅在备份可用区时才会创建替换故障主副本的副本。例如，假设一个复制组，其主节点位于 AZ-a 和中，副本位于 AZ-b 和。 AZ-c如果主节点出现故障，则复制滞后最小的副本将提升为主集群。然后，只有在已备份且可用时 AZ-a ，才在 AZ-a （出现故障的主副本所在的位置）中 ElastiCache 创建新的副本。
+ 客户发起的主节点重启不会触发自动故障转移。其他重启和故障会触发自动故障转移。
+ 在重启主节点后，将在其重新联机时清除其数据。当只读副本查看清除的主集群时，它们将清除其数据的副本，这会导致数据丢失。
+ 在提升只读副本后，另一个副本将与新的主节点同步。初始同步后，副本的内容将被删除，它们会同步来自新主节点的数据。此同步过程会导致短暂的中断，在此期间无法访问复制副本。此同步过程还导致在与副本同步时增加主节点上的临时负载。这种行为是 Valkey 和 Redis OSS 原生的，并不是独有的。 ElastiCache Multi-AZ有关此行为的详细信息，请参阅 Valkey 网站上的[复制](http://valkey.io/topics/replication)。

**重要**  
对于 Valkey 7.2.6 及更高版本或 Redis OSS 2.8.22 及更高版本，您无法创建外部副本。  
对于 2.8.22 之前的 Redis OSS 版本，我们建议您不要将外部副本连接到已启用的 ElastiCache 集群。 Multi-AZ 这种不支持的配置可能会导致无法正常执行故障转移和恢复的问题。 ElastiCache 要将外部副本连接到 ElastiCache集群，请确保在建立连接之前 Multi-AZ 未启用该功能。