

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

# 使用复制组时的高可用性
<a name="Replication"></a>

单节点 Amazon ElastiCache（兼容 Valkey 或 Redis OSS）集群是具有有限数据保护服务（AOF）的内存中实体。如果您的集群出于任何原因发生故障，您将丢失集群中的所有数据。但是，如果您运行的是 Valkey 或 Redis OSS 引擎，则可将 2 到 6 个节点归入一个具有副本的集群，其中 1 到 5 个只读节点包含该组的单个读/写主节点的复制数据。在这种情况下，如果一个节点出于任何原因发生故障，您不会丢失所有数据，因为这些数据已在另外的一个或多个节点中复制。如果发生故障的是读/写主节点，由于复制延迟，某些数据可能会丢失。

如下图所示，复制结构包含在分片中（在 API/CLI 中称为*节点组*），而分片包含在 Valkey 或 Redis OSS 集群中。Valkey 或 Redis OSS（已禁用集群模式）集群始终有一个分片。Valkey 或 Redis OSS（已启用集群模式）集群最多可以拥有 500 个分片，而且集群的数据跨分片进行分区。您可以创建具有更多分片和更少副本的集群，每个集群最多可包含 90 个节点。此集群配置的范围可以从 90 个分片和 0 个副本到 15 个分片和 5 个副本，这是允许的最大副本数。

如果使用 ElastiCache for Valkey 和 ElastiCache for Redis OSS 5.0.6 或更高版本，您可以将每个集群的节点或分片限制增至最多 500 个。例如，您可以选择配置一个 500 节点的集群，范围介于 83 个分片（一个主分片和 5 个副本分片）和 500 个分片（一个主分片，无副本分片）之间。确保可提供足够的 IP 地址来满足增长需求。常见的陷阱包括子网组中的子网 CIDR 范围太小，或者子网被其他集群共享和大量使用。有关更多信息，请参阅 [创建子网组](SubnetGroups.Creating.md)。

 对于低于 5.0.6 的版本，每个集群的限制为 250。

若要请求提高限制，请参阅 [AWS Service Limits](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html) 并选择限制类型 **Nodes per cluster per instance type（每个实例类型的每个集群的节点数）**。

![\[图片：Valkey 或 Redis OSS（已禁用集群模式）集群拥有一个分片和 0 到 5 个副本节点\]](http://docs.aws.amazon.com/zh_cn/AmazonElastiCache/latest/dg/images/ElastiCacheClusters-CSN-Redis-Replicas.png)


*Valkey 或 Redis OSS（已禁用集群模式）集群拥有一个分片和 0 到 5 个副本节点*

如果为具有副本的集群启用了多可用区，则当主节点发生故障时，主节点将故障转移到某个只读副本。由于在副本节点上异步更新数据，因此可能会因更新副本节点时存在延迟而导致丢失某些数据。有关更多信息，请参阅 [缓解运行 Valkey 或 Redis OSS 时发生的故障](disaster-recovery-resiliency.md#FaultTolerance.Redis)。

**Topics**
+ [了解 Valkey 和 Redis OSS 复制](Replication.Redis.Groups.md)
+ [复制：Valkey 和 Redis OSS 已禁用集群模式与已启用集群模式](Replication.Redis-RedisCluster.md)
+ [利用多可用区以及 Valkey 和 Redis OSS 最大限度减少 ElastiCache 中的停机时间](AutoFailover.md)
+ [如何实施同步和备份](Replication.Redis.Versions.md)
+ [创建 Valkey 或 Redis OSS 复制组](Replication.CreatingRepGroup.md)
+ [查看复制组的详细信息](Replication.ViewDetails.md)
+ [查找复制组端点](Replication.Endpoints.md)
+ [修改复制组](Replication.Modify.md)
+ [删除复制组](Replication.DeletingRepGroup.md)
+ [更改副本数量](increase-decrease-replica-count.md)
+ [将 Valkey 或 Redis OSS（已禁用集群模式）复制组的只读副本提升为主节点](Replication.PromoteReplica.md)

# 了解 Valkey 和 Redis OSS 复制
<a name="Replication.Redis.Groups"></a>

Redis OSS 通过两种方式实现复制：
+ 使用在每个节点中使用包含所有集群数据的单一分片 – Valkey 或 Redis OSS（已禁用集群模式）
+ 在最多 500 个分片之间对数据进行分区 – Valkey 或 Redis OSS（已启用集群模式）

复制组中的每个分片都包含一个读/写主节点和最多 5 个只读副本节点。您可以创建具有更多分片和更少副本的集群，每个集群最多可包含 90 个节点。此集群配置的范围可以从 90 个分片和 0 个副本到 15 个分片和 5 个副本，这是允许的最大副本数。

如果 Redis 引擎版本为 5.0.6 OSS 或更高版本，您可将每个集群的节点或分片限制提高到最大值 500。例如，您可以选择配置一个 500 节点的集群，范围介于 83 个分片（一个主分片和 5 个副本分片）和 500 个分片（一个主分片，无副本分片）之间。确保可提供足够的 IP 地址来满足增长需求。常见的陷阱包括子网组中的子网 CIDR 范围太小，或者子网被其他集群共享和大量使用。有关更多信息，请参阅 [创建子网组](SubnetGroups.Creating.md)。

 对于低于 5.0.6 的版本，每个集群的限制为 250。

若要请求提高限制，请参阅 [AWS Service Limits](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html) 并选择限制类型 **Nodes per cluster per instance type（每个实例类型的每个集群的节点数）**。

**Topics**
+ [Valkey 或 Redis OSS（已禁用集群模式）](#Replication.Redis.Groups.Classic)
+ [Valkey 或 Redis OSS（已启用集群模式）](#Replication.Redis.Groups.Cluster)

## Valkey 或 Redis OSS（已禁用集群模式）
<a name="Replication.Redis.Groups.Classic"></a>

Valkey 或 Redis OSS（已禁用集群模式）集群拥有一个分片，其中包含一个节点集合；一个读/写主节点和最多 5 个辅助只读副本节点。每个只读副本保留一个集群主节点数据的副本。可使用异步复制机制使只读副本与主集群同步。应用程序可以从集群中的任何节点进行读取。应用程序只能对主节点进行写入。只读副本增加了读取吞吐量，并在节点发生故障时防止数据丢失。

![\[图片：具有一个分片和多个副本节点的 Valkey 或 Redis OSS（已禁用集群模式）集群\]](http://docs.aws.amazon.com/zh_cn/AmazonElastiCache/latest/dg/images/ElastiCacheClusters-CSN-Redis-Replicas.png)


*具有一个分片和多个副本节点的 Valkey 或 Redis OSS（已禁用集群模式）集群*

您可以使用具有副本节点的 Valkey 或 Redis OSS（已禁用集群模式）集群扩展针对 ElastiCache 的解决方案，以处理读取操作密集的应用程序或是支持同时从同一个集群进行读取的大量客户端。

Valkey 或 Redis OSS（已禁用集群模式）集群中的所有节点必须位于同一区域内。

在向集群添加只读副本时，主集群中的所有数据都会复制到新节点。从此之后，只要向主集群写入数据，更改便会异步传播到所有只读副本。

要增强容错能力并减少写入停机时间，请对具有副本的 Valkey 或 Redis OSS（已禁用集群模式）集群启用带自动失效转移功能的多可用区。有关更多信息，请参阅 [利用多可用区以及 Valkey 和 Redis OSS 最大限度减少 ElastiCache 中的停机时间](AutoFailover.md)。

您可以更改 Valkey 或 Redis OSS（已禁用集群模式）集群中的节点的角色，在这种情况下，主集群会与一个副本交换角色。您可能会为了优化性能执行此操作。例如，对于具有大量写入活动的 Web 应用程序，您可以选择网络延迟最低的节点。有关更多信息，请参阅 [将 Valkey 或 Redis OSS（已禁用集群模式）复制组的只读副本提升为主节点](Replication.PromoteReplica.md)。

## Valkey 或 Redis OSS（已启用集群模式）
<a name="Replication.Redis.Groups.Cluster"></a>

Valkey 或 Redis OSS（已启用集群模式）集群由 1 到 500 个分片（API/CLI：节点组）组成。每个分片有一个主节点和最多 5 个只读副本节点。配置的范围可以从 90 个分片和 0 个副本到 15 个分片和 5 个副本，这是允许的最大副本数。

如果引擎为 Valkey 7.2 及更高版本或 Redis OSS 5.0.6 及更高版本，您可以将每个集群的节点或分片限制增至最多 500 个。例如，您可以选择配置一个 500 节点的集群，范围介于 83 个分片（一个主分片和 5 个副本分片）和 500 个分片（一个主分片，无副本分片）之间。确保可提供足够的 IP 地址来满足增长需求。常见的陷阱包括子网组中的子网 CIDR 范围太小，或者子网被其他集群共享和大量使用。有关更多信息，请参阅 [创建子网组](SubnetGroups.Creating.md)。

 对于低于 5.0.6 的版本，每个集群的限制为 250。

若要请求提高限制，请参阅 [AWS Service Limits](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html) 并选择限制类型 **Nodes per cluster per instance type（每个实例类型的每个集群的节点数）**。

 分片中的每个只读副本均保留分片主集群中数据的一份副本。可使用异步复制机制使只读副本与主集群同步。应用程序可以从集群中的任何节点进行读取。应用程序只能对主节点进行写入。只读副本可增强读取可扩展性和防止数据丢失。数据在 Valkey 或 Redis OSS（已启用集群模式）集群中的分片上进行分区。

应用程序使用 Valkey 或 Redis OSS（已启用集群模式）集群的*配置端点*连接集群中的节点。有关更多信息，请参阅 [查找 ElastiCache 中的缓存连接端点](Endpoints.md)。

![\[图片：具有多个分片和副本节点的 Valkey 或 Redis OSS（已启用集群模式）集群\]](http://docs.aws.amazon.com/zh_cn/AmazonElastiCache/latest/dg/images/ElastiCacheClusters-CSN-RedisClusters.png)


*具有多个分片和副本节点的 Valkey 或 Redis OSS（已启用集群模式）集群*

Valkey 或 Redis OSS（已启用集群模式）集群中的所有节点必须位于同一区域内。要增强容错能力，您可在该区域内的多个可用区中预配置主副本和只读副本。

目前，Valkey 或 Redis OSS（已启用集群模式）功能有一些限制。
+ 您无法手动将任何副本节点提升为主节点。

# 复制：Valkey 和 Redis OSS 已禁用集群模式与已启用集群模式
<a name="Replication.Redis-RedisCluster"></a>

从 Valkey 7.2 和 Redis OSS 3.2 版开始，您可以创建两种不同类型的集群（API/CLI：复制组）。Valkey 或 Redis OSS（已禁用集群模式）集群始终具有单个分片（API/CLI：节点组），包含最多 5 个只读副本节点。Valkey 或 Redis OSS（已启用集群模式）集群最多拥有 500 个分片，每个分片中包含 1 到 5 个只读副本节点。

![\[图片：Valkey 或 Redis OSS（已禁用集群模式）集群与 Valkey 或 Redis OSS（已启用集群模式）集群\]](http://docs.aws.amazon.com/zh_cn/AmazonElastiCache/latest/dg/images/ElastiCache-NodeGroups.png)


*Valkey 或 Redis OSS（已禁用集群模式）集群与 Valkey 或 Redis OSS（已启用集群模式）集群*

下表总结了 Valkey 或 Redis OSS（禁用集群模式）集群和 Valkey 或 Redis OSS（已启用集群模式）集群之间的重要差异。


**比较 Valkey 或 Redis OSS（已禁用集群模式）集群与 Valkey 或 Redis OSS（已启用集群模式）集群**  

| 功能 | Valkey 或 Redis OSS（已禁用集群模式） | Valkey 或 Redis OSS（已启用集群模式） | 
| --- | --- | --- | 
| 可修改 | 是。支持添加和删除副本节点，以及纵向扩展节点类型。 | 有限。有关更多信息，请参阅 [的版本管理 ElastiCache](VersionManagement.md) 和 [扩缩 Valkey 或 Redis OSS（已启用集群模式）集群](scaling-redis-cluster-mode-enabled.md)。 | 
| 数据分区 | 否 | 是 | 
| 分片 | 1 | 1 至 500  | 
| 只读副本 | 0 到 5 如果您没有副本并且节点失败，就会遇到全部数据丢失的情况。 | 每个分区 0 至 5 个。如果您没有副本并且节点失败，则分片中的所有数据将丢失。 | 
| 多可用区  | 是，至少 1 个副本。可选。默认情况下处于打开状态。 | 是可选。默认情况下处于打开状态。 | 
| 快照（备份） | 是，创建单个 .rdb 文件。 | 是，为每个分片创建单个 .rdb 文件。 | 
| 还原 | 是，使用 Valkey 或 Redis OSS（已禁用集群模式）集群中的单个 .rdb 文件。 | 是，使用 Valkey 或 Redis OSS（已禁用集群模式）集群或 Valkey 或 Redis OSS（已启用集群模式）集群中的 .rdb 文件。 | 
| 支持 | 所有 Valkey 和 Redis OSS 版本 | 所有 Valkey 版本和 Redis OSS 3.2 及更高版本 | 
| 可升级引擎 | 是，但有一些限制。有关更多信息，请参阅 [的版本管理 ElastiCache](VersionManagement.md)。 | 是，但有一些限制。有关更多信息，请参阅 [的版本管理 ElastiCache](VersionManagement.md)。 | 
| 加密 | 版本 3.2.6（计划终止生命周期，请参阅 [Redis OSS 版本生命周期终止计划](engine-versions.md#deprecated-engine-versions)）、4.0.10 及更高版本。 | 版本 3.2.6（计划终止生命周期，请参阅 [Redis OSS 版本生命周期终止计划](engine-versions.md#deprecated-engine-versions)）、4.0.10 及更高版本。 | 
| 符合 HIPAA 要求 | 版本 3.2.6（计划终止生命周期，请参阅 [Redis OSS 版本生命周期终止计划](engine-versions.md#deprecated-engine-versions)）、4.0.10 及更高版本。 | 版本 3.2.6（计划终止生命周期，请参阅 [Redis OSS 版本生命周期终止计划](engine-versions.md#deprecated-engine-versions)）、4.0.10 及更高版本。 | 
| 与 PCI DSS 兼容 | 版本 3.2.6（计划终止生命周期，请参阅 [Redis OSS 版本生命周期终止计划](engine-versions.md#deprecated-engine-versions)）、4.0.10 及更高版本。 | 版本 3.2.6（计划终止生命周期，请参阅 [Redis OSS 版本生命周期终止计划](engine-versions.md#deprecated-engine-versions)）、4.0.10 及更高版本。 | 
| 在线重新分片 | 不适用 | 版本 3.2.10（计划终止生命周期，请参阅 [Redis OSS 版本生命周期终止计划](engine-versions.md#deprecated-engine-versions)）及更高版本。 | 

## 我应该使用哪一种？
<a name="Replication.Redis-RedisCluster.Choose"></a>

在 Valkey 或 Redis OSS（已禁用集群模式）或 Valkey 或 Redis OSS（已启用集群模式）之间进行选择时，请考虑以下因素：
+ **扩展与分区** – 业务需求在发生变化。您需要针对峰值需求进行预置，还是随需求变化进行扩展。Valkey 或 Redis OSS（已禁用集群模式）支持扩缩。您可以通过添加或删除副本节点来扩展读取容量，或者通过纵向扩展到更大的节点类型来扩展容量。所有这些操作都需要一些时间。有关更多信息，请参阅[扩缩单节点 Valkey 或 Redis OSS（已禁用集群模式）副本节点](Scaling.RedisReplGrps.md)。

   

  Valkey 或 Redis OSS（已启用集群模式）支持在最多 500 个节点组之间对数据进行分区。您可以根据业务的变更需求，动态更改分片数量。分区的优势之一是您可以将负载分散到更多数量的终端节点上，从而减少峰值期间的访问瓶颈。此外，由于数据可分散到多个服务器上，您可以容纳更大的数据集。有关扩缩分区的信息，请参阅[扩缩 Valkey 或 Redis OSS（已启用集群模式）集群](scaling-redis-cluster-mode-enabled.md)。

   
+ **节点大小与节点数** – 由于 Valkey 或 Redis OSS（已禁用集群模式）集群只有一个分片，节点类型必须足够大才能容纳所有集群的数据以及涵盖所需开销。另一方面，由于您在使用 Valkey 或 Redis OSS（已启用集群模式）集群时可以在多个分片上对数据进行分区，节点类型可以更小，虽然这样一来您需要的节点的数量更多。有关更多信息，请参阅 [选择节点大小](CacheNodes.SelectSize.md)。

   
+ **读取与写入** – 如果集群上的主要负载是读取数据的应用程序，则您可以通过添加和删除只读副本来扩展 Valkey 或 Redis OSS（已禁用集群模式）集群。不过，最多只能有 5 个只读副本。如果集群上的负载为写入密集型负载，则您可以获益于具有多个分片的 Valkey 或 Redis OSS（已启用集群模式）集群上的额外写入端点。

不论您选择实施什么类型的集群，请确保选择足以满足您现在和未来需求的节点类型。

# 利用多可用区以及 Valkey 和 Redis OSS 最大限度减少 ElastiCache 中的停机时间
<a name="AutoFailover"></a>

在许多情况下，ElastiCache for Valkey and Redis OSS 可能需要替换主节点；这些情况包括特定类型的计划维护以及主节点或可用区出现故障的意外事件。

在这些情形下进行替换时，会导致集群出现停机时间，但如果启用了多可用区，则会最大限度缩短停机时间。主节点的角色会自动将故障转移到其中一个只读副本。ElastiCache 会透明地处理这一点，因此无需创建和预置新的主节点。此故障转移和副本提升可确保您在提升完成后立即继续写入新的主节点。

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

如果由于维护更新或自助服务更新而启动了计划的节点替换，请注意以下事项：
+ 对于 Valkey 和 Redis OSS 集群，计划的节点替换会在集群处理传入的写入请求时完成。
+ 对于启用了多可用区并在 5.0.6 或更高版本引擎上运行的已禁用 Valkey 和 Redis OSS 集群模式的集群，计划的节点替换会在集群处理传入的写入请求时完成。
+ 对于启用了多可用区且在 4.0.10 或更早版本的引擎上运行的已禁用 Valkey 和 Redis OSS 集群模式的集群，您可能会发现与 DNS 更新关联的短暂写入中断。此中断可能需要几秒钟。此过程比重新创建并预置新的主节点过程要快得多，后者是在您未启用多可用区的情况下使用的过程。

您可以使用 ElastiCache 管理控制台、AWS CLI 或 ElastiCache API 启用多可用区。

在 Valkey 或 Redis OSS 集群上启用 ElastiCache 多可用区（在 API 和 CLI 中为复制组）可提高容错能力。在集群的读取/写入主集群出于任何原因变得无法连接或发生故障时，此情况尤其如此。仅在每个分片中有多个节点的 Valkey 或 Redis OSS 集群上支持多可用区。

**Topics**
+ [启用多可用区](#AutoFailover.Enable)
+ [故障情形及多可用区响应](#AutoFailover.Scenarios)
+ [测试自动故障转移](#auto-failover-test)
+ [多可用区限制](#AutoFailover.Limitations)

## 启用多可用区
<a name="AutoFailover.Enable"></a>

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

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

**Topics**
+ [启用多可用区（控制台）](#AutoFailover.Enable.Console)
+ [启用多可用区 (AWS CLI)](#AutoFailover.Enable.CLI)
+ [启用多可用区 (ElastiCache API)](#AutoFailover.Enable.API)

### 启用多可用区（控制台）
<a name="AutoFailover.Enable.Console"></a>

您可以在创建新的 Valkey 或 Redis OSS 集群时使用 ElastiCache 控制台，或通过修改具有复制功能的现有集群来启用多可用区。

默认情况下，Valkey 或 Redis OSS（已启用集群模式）集群上已启用多可用区。

**重要**  
仅当集群在除所有分区中的主可用区以外的可用区中包含至少一个副本时，ElastiCache 才会自动启用多可用区。

#### 使用 ElastiCache 控制台在创建集群时启用多可用区
<a name="AutoFailover.Enable.Console.NewCacheCluster"></a>

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

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

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

### 启用多可用区 (AWS CLI)
<a name="AutoFailover.Enable.CLI"></a>

以下代码示例使用 AWS CLI 为复制组 `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)。

### 启用多可用区 (ElastiCache API)
<a name="AutoFailover.Enable.API"></a>

以下代码示例使用 ElastiCache API 为复制组 `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)

## 故障情形及多可用区响应
<a name="AutoFailover.Scenarios"></a>

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

在启用多可用区时，ElastiCache 会持续监控主节点的状态。如果主节点发生故障，则根据故障的类型执行以下操作之一。

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

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

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

仅当主节点出现故障时，ElastiCache 多可用区才执行以下操作：

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 复制组的端点（ElastiCache API）](Endpoints.md#Endpoints.Find.API.ReplGroups)

 

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

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

当主节点和一些只读副本发生故障时，ElastiCache 多可用区执行以下操作：

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 复制组的端点（ElastiCache API）](Endpoints.md#Endpoints.Find.API.ReplGroups)

 

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

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

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

当整个集群发生故障时，ElastiCache 多可用区将执行以下操作：

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 复制组的端点（ElastiCache API）](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. 在 **Details** 区域中，确认此集群已启用多可用区。如果集群未启用多可用区，则选择其他集群或者修改此集群以启用多可用区。有关更多信息，请参阅 [使用 ElastiCache AWS 管理控制台](Clusters.Modify.md#Clusters.Modify.CON)。  
![\[图：启用多可用区的集群的“详细信息”区域\]](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 操作 `test-failover` 在任何启用多可用区的集群上测试自动故障转移。

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

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

**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>

您可以使用 ElastiCache API 操作 `TestFailover`，对任意启用了多可用区的集群测试自动故障转移。

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

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

**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 操作。

有关更多信息，请参阅下列内容：
+ *ElastiCache 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) 

 

## 多可用区限制
<a name="AutoFailover.Limitations"></a>

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

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

  1. 禁用集群上的多可用区。

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

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

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

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

# 如何实施同步和备份
<a name="Replication.Redis.Versions"></a>

所有支持的 Valkey 和 Redis OSS 版本均支持在主节点与副本节点之间备份和同步。但是，实施备份和同步的方式因版本而异。

## Redis OSS 版本 2.8.22 及更高版本
<a name="Replication.Redis.Version2-8-22"></a>

在 2.8.22 及更高版本中，Redis OSS 复制有两种方法可以选择。有关更多信息，请参阅[2.8.22 版之前的 Redis OSS](#Replication.Redis.Earlier2-8-22)和[快照和还原](backups.md)。

在无分支过程中，如果写入负载较重，则对集群的写入将延迟，以确保您不会累积太多更改并因而阻止成功快照。

## 2.8.22 版之前的 Redis OSS
<a name="Replication.Redis.Earlier2-8-22"></a>

2.8.22 版之前的 Redis OSS 备份和同步过程分为三步。

1. 分支以及后台进程会将集群数据序列化到磁盘。这将创建时间点快照。

1. 在前台中，在*客户端输出缓冲区* 中累积更改日志。
**重要**  
如果更改日志超出了*客户端输出缓冲区* 大小，则备份或同步将失败。有关更多信息，请参阅 [确保具有用于创建 Valkey 或 Redis OSS 快照的足够内存](BestPractices.BGSAVE.md)。

1. 最后，依次将缓存数据和更改日志传输到副本节点。

# 创建 Valkey 或 Redis OSS 复制组
<a name="Replication.CreatingRepGroup"></a>

在创建具有副本节点的集群时，您有以下选择。当您已有一个可用 Valkey 或 Redis OSS（已禁用集群模式）集群且此集群未与具有要用作主节点的副本的任何集群关联时，其中一个选项适用。当您需要使用集群和只读副本创建主节点时，会应用另一个选择。目前，Valkey 或 Redis OSS（已启用集群模式）集群必须从头开始创建。

**选项 1：[使用现有集群创建复制组](Replication.CreatingReplGroup.ExistingCluster.md)**  
使用此选项可使用现有单节点 Valkey 或 Redis OSS（已禁用集群模式）集群。您可以指定此现有节点作为新集群中的主节点，然后单独向集群中添加 1 到 5 个只读副本。如果现有集群处于活动状态，则只读副本在创建时都将与该集群同步。请参阅[使用现有集群创建复制组](Replication.CreatingReplGroup.ExistingCluster.md)。  
无法使用现有集群创建 Valkey 或 Redis OSS（已启用集群模式）集群。若要使用 ElastiCache 控制台创建 Valkey 或 Redis OSS（已启用集群模式）集群（API/CLI：复制组），请参阅 [创建 Valkey 或 Redis OSS（已启用集群模式）集群（控制台）](Clusters.Create.md#Clusters.Create.CON.RedisCluster)。

**选项 2：[从头开始创建 Valkey 或 Redis OSS 复制组](Replication.CreatingReplGroup.NoExistingCluster.md)**  
如果您还没有任何可用的 Valkey 或 Redis OSS（禁用集群模式）集群以用作集群的主节点，或者您希望创建 Valkey 或 Redis OSS（启用集群模式）集群，请使用此选项。请参阅[从头开始创建 Valkey 或 Redis OSS 复制组](Replication.CreatingReplGroup.NoExistingCluster.md)。

# 使用现有集群创建复制组
<a name="Replication.CreatingReplGroup.ExistingCluster"></a>

以下操作将向您的 Valkey 或 Redis OSS（已禁用集群模式）单节点集群添加一个复制组，这是将集群升级至 Valkey 最新版本的必要步骤。这是一个就地操作，全程零停机时间且零数据丢失。当您为单节点集群创建复制组时，该集群节点将成为新集群的主节点。如果您没有可用作新集群的主集群的 Valkey 或 Redis OSS（已禁用集群模式）集群，请参阅[从头开始创建 Valkey 或 Redis OSS 复制组](Replication.CreatingReplGroup.NoExistingCluster.md)。

可用的集群是现有的单节点 Valkey 或 Redis OSS 集群。当前，Valkey 或 Redis OSS（已启用集群模式）不支持使用可用的单节点集群创建具有副本的集群。如果您要创建 Valkey 或 Redis OSS（已启用集群模式）集群，请参阅[创建 Valkey 或 Redis OSS（已启用集群模式）集群（控制台）](Replication.CreatingReplGroup.NoExistingCluster.Cluster.md#Replication.CreatingReplGroup.NoExistingCluster.Cluster.CON)。

## 使用现有集群创建复制组（控制台）
<a name="Replication.CreatingReplGroup.ExistingCluster.CON"></a>

请参阅主题[使用 ElastiCache AWS 管理控制台](Clusters.AddNode.md#Clusters.AddNode.CON)。

## 使用可用 Valkey 或 Redis OSS 集群创建复制组（AWS CLI）
<a name="Replication.CreatingReplGroup.ExistingCluster.CLI"></a>

使用AWS CLI时，在将可用 Valkey 或 Redis OSS 缓存集群用作主集群时，可使用只读副本通过两个步骤创建复制组。

使用时，AWS CLI您可以创建一个复制组，将可用的独立节点指定为集群的主节点，`--primary-cluster-id`并使用 CLI 命令指定集群中要包含的节点数量`create-replication-group`。包括以下参数。

**--replication-group-id**  
正在创建的复制组的名称。此参数的值用作所添加节点的名称的基础，方法是向 `--replication-group-id` 末尾添加一个连续的 3 位数。例如 `sample-repl-group-001`。  
Valkey 或 Redis OSS（已禁用集群模式）复制组命名约束如下：  
+ 必须包含 1 – 40 个字母数字字符或连字符。
+ 必须以字母开头。
+ 不能包含两个连续连字符。
+ 不能以连字符结束。

**--replication-group-description**  
复制组的描述。

**--num-node-groups**  
您希望此集群中包含的节点数。此值包含主节点。此参数的最大值为 6。

**--primary-cluster-id**  
要用作此复制组中主节点的可用 Valkey 或 Redis OSS（已禁用集群模式）集群的节点的名称。

以下命令通过将可用 Valkey 或 Redis OSS（已禁用集群模式）集群 `redis01` 用作复制组的主节点来创建复制组 `sample-repl-group`。它将创建 2 个为只读副本的新节点。`redis01` 的设置（即参数组、安全组、节点类型、引擎版本等）将应用于复制组中的所有节点。

对于 Linux、macOS 或 Unix：

```
aws elasticache create-replication-group \
   --replication-group-id sample-repl-group \
   --replication-group-description "demo cluster with replicas" \
   --num-cache-clusters 3 \
   --primary-cluster-id redis01
```

对于 Windows：

```
aws elasticache create-replication-group ^
   --replication-group-id sample-repl-group ^
   --replication-group-description "demo cluster with replicas" ^
   --num-cache-clusters 3 ^
   --primary-cluster-id redis01
```

有关您可能要使用的其他信息和参数，请参阅AWS CLI主题[create-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/create-replication-group.html)。

**接下来，向复制组添加只读副本**  
创建复制组后，使用 `create-cache-cluster` 命令向复制组添加 1 到 5 个只读副本，并确保包含以下参数。

**--cache-cluster-id**  
正在向复制组添加的集群的名称。  
集群命名约束如下：  
+ 必须包含 1 – 40 个字母数字字符或连字符。
+ 必须以字母开头。
+ 不能包含两个连续连字符。
+ 不能以连字符结束。


**--replication-group-id**  
正在将此集群添加到的复制组的名称。

对要添加到复制组的每个只读副本重复此命令，并仅更改 `--cache-cluster-id` 参数的值。

**注意**  
请记住，一个复制组最多只能有五个只读副本。尝试向已有五个只读副本的复制组添加只读副本会导致操作失败。

以下代码将只读副本 `my-replica01` 添加到复制组 `sample-repl-group`。主集群的设置（参数组、安全组、节点类型等）将在节点添加到复制组时应用到节点。

对于 Linux、macOS 或 Unix：

```
aws elasticache create-cache-cluster \
   --cache-cluster-id my-replica01 \
   --replication-group-id sample-repl-group
```

对于 Windows：

```
aws elasticache create-cache-cluster ^
   --cache-cluster-id my-replica01 ^
   --replication-group-id sample-repl-group
```

此命令的输出如下所示。

```
{
    "ReplicationGroup": {
        "Status": "creating",
        "Description": "demo cluster with replicas",
        "ClusterEnabled": false,
        "ReplicationGroupId": "sample-repl-group",
        "SnapshotRetentionLimit": 1,
        "AutomaticFailover": "disabled",
        "SnapshotWindow": "00:00-01:00",
        "SnapshottingClusterId": "redis01",
        "MemberClusters": [
            "sample-repl-group-001",
            "sample-repl-group-002",
            "redis01"
        ],
        "CacheNodeType": "cache.m4.large",
        "DataTiering": "disabled",
        "PendingModifiedValues": {}
    }
}
```

有关更多信息，请参阅以下AWS CLI主题：
+ [create-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/create-replication-group.html)
+ [modify-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-replication-group.html)

## 向独立 Valkey 或 Redis OSS（已禁用集群模式）集群添加副本 (API) ElastiCache
<a name="Replication.CreatingReplGroup.ExistingCluster.API"></a>

使用 ElastiCache API 时，您可以创建一个复制组，将可用的独立节点指定为集群的主节点，`PrimaryClusterId`并使用 CLI 命令指定集群中要包含的节点数量`CreateReplicationGroup`。包括以下参数。

**ReplicationGroupId**  
正在创建的复制组的名称。此参数的值用作所添加节点的名称的基础，方法是向 `ReplicationGroupId` 末尾添加一个连续的 3 位数。例如 `sample-repl-group-001`。  
Valkey 或 Redis OSS（已禁用集群模式）复制组命名约束如下：  
+ 必须包含 1 – 40 个字母数字字符或连字符。
+ 必须以字母开头。
+ 不能包含两个连续连字符。
+ 不能以连字符结束。

**ReplicationGroupDescription**  
有副本的集群的描述。

**NumCacheClusters**  
您希望此集群中包含的节点数。此值包含主节点。此参数的最大值为 6。

**PrimaryClusterId**  
要用作此集群中主节点的可用 Valkey 或 Redis OSS（已禁用集群模式）集群的名称。

以下命令通过将可用 Valkey 或 Redis OSS（已禁用集群模式）集群 `redis01` 用作复制组的主节点来创建具有副本的集群 `sample-repl-group`。它将创建 2 个为只读副本的新节点。`redis01` 的设置（即参数组、安全组、节点类型、引擎版本等）将应用于复制组中的所有节点。

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=CreateReplicationGroup 
   &Engine=redis
   &EngineVersion=6.0
   &ReplicationGroupDescription=Demo%20cluster%20with%20replicas
   &ReplicationGroupId=sample-repl-group
   &PrimaryClusterId=redis01
   &Version=2015-02-02
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &X-Amz-Credential=<credential>
```

有关更多信息，请参阅 ElastiCache APL 主题：
+ [CreateReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CreateReplicationGroup.html)
+ [ModifyReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyReplicationGroup.html)

**接下来，向复制组添加只读副本**  
创建复制组后，使用 `CreateCacheCluster` 操作向复制组添加 1 到 5 个只读副本，并确保包含以下参数。

**CacheClusterId**  
正在向复制组添加的集群的名称。  
集群命名约束如下：  
+ 必须包含 1 – 40 个字母数字字符或连字符。
+ 必须以字母开头。
+ 不能包含两个连续连字符。
+ 不能以连字符结束。


**ReplicationGroupId**  
正在将此集群添加到的复制组的名称。

对要添加到复制组的每个只读副本重复此操作，并仅更改 `CacheClusterId` 参数的值。

以下代码将只读副本 `myReplica01` 添加到复制组 `myReplGroup`。主集群的设置（参数组、安全组、节点类型等）将在节点添加到复制组时应用到节点。

```
https://elasticache.us-west-2.amazonaws.com/
	?Action=CreateCacheCluster
	&CacheClusterId=myReplica01
	&ReplicationGroupId=myReplGroup
	&SignatureMethod=HmacSHA256
	&SignatureVersion=4
	&Version=2015-02-02
	&X-Amz-Algorithm=&AWS;4-HMAC-SHA256
	&X-Amz-Credential=[your-access-key-id]/20150202/us-west-2/elasticache/aws4_request
	&X-Amz-Date=20150202T170651Z
	&X-Amz-SignedHeaders=content-type;host;user-agent;x-amz-content-sha256;x-amz-date
	&X-Amz-Signature=[signature-value]
```

有关您可能要使用的其他信息和参数，请参阅 ElastiCache API 主题[CreateCacheCluster](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CreateCacheCluster.html)。

# 从头开始创建 Valkey 或 Redis OSS 复制组
<a name="Replication.CreatingReplGroup.NoExistingCluster"></a>

接下来，您可以找到如何在不将现有 Valkey 或 Redis OSS 集群用作主集群的情况下创建 Valkey 或 Redis OSS 复制组。您可以使用 ElastiCache 控制台、AWS CLI 或 ElastiCache API 从头开始创建 Valkey 或 Redis OSS（已禁用集群模式）或 Valkey 或 Redis OSS（已启用集群模式）复制组。

在继续之前，请确定您希望创建 Valkey 或 Redis OSS（已禁用集群模式）复制组还是 Valkey 或 Redis OSS（已启用集群模式）复制组。有关如何做出决定的指南，请参阅[复制：Valkey 和 Redis OSS 已禁用集群模式与已启用集群模式](Replication.Redis-RedisCluster.md)。

**Topics**
+ [从头创建 Valkey 或 Redis OSS（已禁用集群模式）复制组](Replication.CreatingReplGroup.NoExistingCluster.Classic.md)
+ [从头开始在 Valkey 或 Redis OSS（已启用集群模式）中创建复制组](Replication.CreatingReplGroup.NoExistingCluster.Cluster.md)

# 从头创建 Valkey 或 Redis OSS（已禁用集群模式）复制组
<a name="Replication.CreatingReplGroup.NoExistingCluster.Classic"></a>

您可以使用 ElastiCache 控制台、AWS CLI 或 ElastiCache API 从头创建 Valkey 或 Redis OSS（已禁用集群模式）复制组。Valkey 或 Redis OSS（已禁用集群模式）复制组始终有一个节点组、一个主集群和最多 5 个只读副本。Valkey 或 Redis OSS（已禁用集群模式）复制组不支持对数据分区。

**注意**  
每个集群的节点/分片限制最高可提高到 500。若要请求提高限制，请参阅 [AWS Service Limits](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html) 并在请求中包含实例类型。

要从头开始创建 Valkey 或 Redis OSS（已禁用集群模式）复制组，请采用以下方法之一：

## 从头创建 Valkey 或 Redis OSS（已禁用集群模式）复制组（AWS CLI）
<a name="Replication.CreatingReplGroup.NoExistingCluster.Classic.CLI"></a>

以下过程使用 AWS CLI 创建 Valkey 或 Redis OSS（已禁用集群模式）复制组。

在从头开始创建 Valkey 或 Redis OSS（已禁用集群模式）复制组时，会通过单次调用 AWS CLI `create-replication-group` 命令创建该复制组及其所有节点。包括以下参数。

**--replication-group-id**  
正在创建的复制组的名称。  
Valkey 或 Redis OSS（已禁用集群模式）复制组命名约束如下：  
+ 必须包含 1 – 40 个字母数字字符或连字符。
+ 必须以字母开头。
+ 不能包含两个连续连字符。
+ 不能以连字符结束。

**--replication-group-description**  
复制组的描述。

**--num-cache-clusters**  
要使用此复制组、主集群和只读副本创建的节点的数目。  
如果您启用多可用区 (`--automatic-failover-enabled`)，则 `--num-cache-clusters` 值必须至少为 2。

**--cache-node-type**  
复制组中的每个节点的节点类型。  
ElastiCache 支持以下节点类型。一般而言，与其上一代类型对应项相比，最新一代类型以更低的成本提供了更多内存和计算能力。  
有关各节点类型性能详细信息，请参阅 [Amazon EC2 实例类型](https://aws.amazon.com/ec2/instance-types/)。

**--data-tiering-enabled**  
如果您使用的是 r6gd 节点类型，请设置此参数。如果您不想使用数据分层功能，则设置 `--no-data-tiering-enabled`。有关更多信息，请参阅 [ElastiCache 中的数据分层](data-tiering.md)。

**--cache-parameter-group**  
指定与您的引擎版本对应的参数组。如果您运行的是 Redis OSS 3.2.4 或更高版本，请指定 `default.redis3.2` 参数组或者从 `default.redis3.2` 派生的参数组来创建 Valkey 或 Redis OSS（已禁用集群模式）复制组。有关更多信息，请参阅 [Valkey 和 Redis OSS 参数](ParameterGroups.Engine.md#ParameterGroups.Redis)。

**--network-type**  
`ipv4`、`ipv6` 或 `dual-stack`。如果选择双堆栈，则必须将 `--IpDiscovery` 参数设置为 `ipv4` 或 `ipv6`。

**--engine**  
redis

**--engine-version**  
要拥有最丰富的功能，请选择最新的引擎版本。

节点的名称会通过将 `-00`*\$1* 添加到复制组名称的后面，从复制组名称得出。例如，通过使用复制组名称 `myReplGroup`，主集群的名称将为 `myReplGroup-001` 以及只读副本的名称将为 `myReplGroup-002` 到 `myReplGroup-006`。

如果要在复制组上启用传输中加密或静态加密，请添加 `--transit-encryption-enabled` 和/或 `--at-rest-encryption-enabled` 参数并满足以下条件。
+ 您的复制组必须运行 Redis OSS 版本 3.2.6 或 4.0.10。
+ 复制组必须在 Amazon VPC 中创建。
+ 还必须包含参数 `--cache-subnet-group`。
+ 还必须提供 `--auth-token` 参数以及客户为对此集群执行操作所需的 AUTH 令牌指定的字符串值（密码）。

以下操作使用三个节点（一个主节点和两个副本节点）创建 Valkey 或 Redis OSS（已禁用集群模式）复制组 `sample-repl-group`。

对于 Linux、macOS 或 Unix：

```
aws elasticache create-replication-group \
   --replication-group-id sample-repl-group \
   --replication-group-description "Demo cluster with replicas" \
   --num-cache-clusters 3 \
   --cache-node-type cache.m4.large \ 
   --engine redis
```

对于 Windows：

```
aws elasticache create-replication-group ^
   --replication-group-id sample-repl-group ^
   --replication-group-description "Demo cluster with replicas" ^
   --num-cache-clusters 3 ^
   --cache-node-type cache.m4.large ^  
   --engine redis
```

此命令的输出如下所示。

```
{
    "ReplicationGroup": {
        "Status": "creating",
        "Description": "Demo cluster with replicas",
        "ClusterEnabled": false,
        "ReplicationGroupId": "sample-repl-group",
        "SnapshotRetentionLimit": 0,
        "AutomaticFailover": "disabled",
        "SnapshotWindow": "01:30-02:30",
        "MemberClusters": [
            "sample-repl-group-001",
            "sample-repl-group-002",
            "sample-repl-group-003"
        ],
        "CacheNodeType": "cache.m4.large",
        "DataTiering": "disabled",
        "PendingModifiedValues": {}
    }
}
```

有关其他信息和可能要使用的参数，请参阅 AWS CLI 主题 [create-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/create-replication-group.html)。

## 从头开始创建 Valkey 或 Redis OSS（已禁用集群模式）复制组（ElastiCache API）
<a name="Replication.CreatingReplGroup.NoExistingCluster.Classic.API"></a>

以下过程使用 ElastiCache API 创建 Valkey 或 Redis OSS（已禁用集群模式）复制组。

在从头开始创建 Valkey 或 Redis OSS（已禁用集群模式）复制组时，会通过单次调用 ElastiCache API `CreateReplicationGroup` 操作来创建该复制组及其所有节点。包括以下参数。

**ReplicationGroupId**  
正在创建的复制组的名称。  
Valkey 或 Redis OSS（已启用集群模式）复制组命名约束如下：  
+ 必须包含 1 – 40 个字母数字字符或连字符。
+ 必须以字母开头。
+ 不能包含两个连续连字符。
+ 不能以连字符结束。

**ReplicationGroupDescription**  
您对复制组的描述。

**NumCacheClusters**  
要使用此复制组、主集群和只读副本创建的节点的总数。  
如果您启用多可用区 (`AutomaticFailoverEnabled=true`)，则 `NumCacheClusters` 值必须至少为 2。

**CacheNodeType**  
复制组中的每个节点的节点类型。  
ElastiCache 支持以下节点类型。一般而言，与其上一代类型对应项相比，最新一代类型以更低的成本提供了更多内存和计算能力。  
有关各节点类型性能详细信息，请参阅 [Amazon EC2 实例类型](https://aws.amazon.com/ec2/instance-types/)。

**--data-tiering-enabled**  
如果您使用的是 r6gd 节点类型，请设置此参数。如果您不想使用数据分层功能，则设置 `--no-data-tiering-enabled`。有关更多信息，请参阅 [ElastiCache 中的数据分层](data-tiering.md)。

**CacheParameterGroup**  
指定与您的引擎版本对应的参数组。如果您运行的是 Redis OSS 3.2.4 或更高版本，请指定 `default.redis3.2` 参数组或者从 `default.redis3.2` 派生的参数组来创建 Valkey 或 Redis OSS（已禁用集群模式）复制组。有关更多信息，请参阅 [Valkey 和 Redis OSS 参数](ParameterGroups.Engine.md#ParameterGroups.Redis)。

**--network-type**  
`ipv4`、`ipv` 或 `dual-stack`。如果选择双堆栈，则必须将 `--IpDiscovery` 参数设置为 `ipv4` 或 `ipv6`。

**引擎**  
redis

**EngineVersion**  
6.0

节点的名称会通过将 `-00`*\$1* 添加到复制组名称的后面，从复制组名称得出。例如，通过使用复制组名称 `myReplGroup`，主集群的名称将为 `myReplGroup-001` 以及只读副本的名称将为 `myReplGroup-002` 到 `myReplGroup-006`。

如果要在复制组上启用传输中加密或静态加密，请添加 `TransitEncryptionEnabled=true` 和/或 `AtRestEncryptionEnabled=true` 参数并满足以下条件。
+ 您的复制组必须运行 Redis OSS 版本 3.2.6 或 4.0.10。
+ 复制组必须在 Amazon VPC 中创建。
+ 还必须包含参数 `CacheSubnetGroup`。
+ 还必须提供 `AuthToken` 参数以及客户为对此集群执行操作所需的 AUTH 令牌指定的字符串值（密码）。

以下操作使用三个节点（一个主节点和两个副本节点）创建 Valkey 或 Redis OSS（已禁用集群模式）复制组 `myReplGroup`。

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=CreateReplicationGroup 
   &CacheNodeType=cache.m4.large
   &CacheParameterGroup=default.redis6.x
   &Engine=redis
   &EngineVersion=6.0
   &NumCacheClusters=3
   &ReplicationGroupDescription=test%20group
   &ReplicationGroupId=myReplGroup
   &Version=2015-02-02
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &X-Amz-Credential=<credential>
```

有关其他信息和可能要使用的参数，请参阅 ElastiCache API 主题 [CreateReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CreateReplicationGroup.html)。

# 从头开始在 Valkey 或 Redis OSS（已启用集群模式）中创建复制组
<a name="Replication.CreatingReplGroup.NoExistingCluster.Cluster"></a>

您可以使用 ElastiCache 控制台、AWS CLI 或 ElastiCache API 创建 Valkey 或 Redis OSS（已启用集群模式）集群（API/CLI：*复制组*）。Valkey 或 Redis OSS（已启用集群模式）复制组可以有 1 到 500 个分片（API/CLI：节点组）；每个分片中可以有一个主节点，以及最多 5 个只读副本。您可以创建具有更多分片和更少副本的集群，每个集群最多可包含 90 个节点。此集群配置的范围可以从 90 个分片和 0 个副本到 15 个分片和 5 个副本，这是允许的最大副本数。

如果引擎为 Valkey 或 Redis OSS 5.0.6 或更高版本，您可以将每个集群的节点或分片限制增至最多 500 个。例如，您可以选择配置一个 500 节点的集群，范围介于 83 个分片（一个主分片和 5 个副本分片）和 500 个分片（一个主分片，无副本分片）之间。确保可提供足够的 IP 地址来满足增长需求。常见的陷阱包括子网组中的子网 CIDR 范围太小，或者子网被其他集群共享和大量使用。有关更多信息，请参阅 [创建子网组](SubnetGroups.Creating.md)。

 对于低于 5.0.6 的版本，每个集群的限制为 250。

若要请求提高限制，请参阅 [AWS Service Limits](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html) 并选择限制类型 **Nodes per cluster per instance type（每个实例类型的每个集群的节点数）**。

**Topics**
+ [使用 ElastiCache 控制台](#Replication.CreatingReplGroup.NoExistingCluster.Cluster.CON)
+ [从头开始创建 Valkey 或 Redis OSS（已启用集群模式）复制组（AWS CLI）](#Replication.CreatingReplGroup.NoExistingCluster.Cluster.CLI)
+ [从头开始在 Valkey 或 Redis OSS（已启用集群模式）中创建复制组（ElastiCache API）](#Replication.CreatingReplGroup.NoExistingCluster.Cluster.API)

## 创建 Valkey 或 Redis OSS（已启用集群模式）集群（控制台）
<a name="Replication.CreatingReplGroup.NoExistingCluster.Cluster.CON"></a>

要创建 Valkey 或 Redis OSS（已启用集群模式）集群，请参阅[创建 Valkey 或 Redis OSS（已启用集群模式）集群（控制台）](Clusters.Create.md#Clusters.Create.CON.RedisCluster)。请确保启用集群模式 **Cluster Mode enabled (Scale Out)（启用集群模式（横向扩展））**，并在每个模式中指定至少两个分片和一个副本节点。

## 从头开始创建 Valkey 或 Redis OSS（已启用集群模式）复制组（AWS CLI）
<a name="Replication.CreatingReplGroup.NoExistingCluster.Cluster.CLI"></a>

以下过程为使用 AWS CLI 创建 Valkey 或 Redis OSS（已启用集群模式）复制组。

在从头开始创建 Valkey 或 Redis OSS（已启用集群模式）复制组时，会通过单次调用 AWS CLI `create-replication-group` 命令创建该复制组及其所有节点。包括以下参数。

**--replication-group-id**  
正在创建的复制组的名称。  
Valkey 或 Redis OSS（已启用集群模式）复制组命名约束如下：  
+ 必须包含 1 – 40 个字母数字字符或连字符。
+ 必须以字母开头。
+ 不能包含两个连续连字符。
+ 不能以连字符结束。

**--replication-group-description**  
复制组的描述。

**--cache-node-type**  
复制组中的每个节点的节点类型。  
ElastiCache 支持以下节点类型。一般而言，与其上一代类型对应项相比，最新一代类型以更低的成本提供了更多内存和计算能力。  
有关各节点类型性能详细信息，请参阅 [Amazon EC2 实例类型](https://aws.amazon.com/ec2/instance-types/)。

**--data-tiering-enabled**  
如果您使用的是 r6gd 节点类型，请设置此参数。如果您不想使用数据分层功能，则设置 `--no-data-tiering-enabled`。有关更多信息，请参阅 [ElastiCache 中的数据分层](data-tiering.md)。

**--cache-parameter-group**  
指定 `default.redis6.x.cluster.on` 参数组或者派生自 `default.redis6.x.cluster.on` 的参数组以创建 Valkey 或 Redis OSS（已启用集群模式）复制组。有关更多信息，请参阅 [Redis OSS 6.x 参数更改](ParameterGroups.Engine.md#ParameterGroups.Redis.6-x)。

**--engine**  
redis

**--engine-version**  
3.2.4

**--num-node-groups**  
此复制组中的节点组数量。有效值为 1 到 500。  
每个集群的节点/分片限制最高可提高到 500。若要请求提高限制，请参阅 [AWS Service Limits](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html) 并选择限制类型“Nodes per cluster per instance type（每个实例类型的每个集群的节点数）”。

**--replicas-per-node-group**  
各节点组中的副本节点数量。有效值为 0 到 5。

**--network-type**  
`ipv4`、`ipv` 或 `dual-stack`。如果选择双堆栈，则必须将 `--IpDiscovery` 参数设置为 `ipv4` 或 `ipv6`。

如果要在复制组上启用传输中加密或静态加密，请添加 `--transit-encryption-enabled` 和/或 `--at-rest-encryption-enabled` 参数并满足以下条件。
+ 您的复制组必须运行 Redis OSS 版本 3.2.6 或 4.0.10。
+ 复制组必须在 Amazon VPC 中创建。
+ 还必须包含参数 `--cache-subnet-group`。
+ 还必须提供 `--auth-token` 参数以及客户为对此集群执行操作所需的 AUTH 令牌指定的字符串值（密码）。

以下操作创建具有三个节点组/分片（--num-node-groups）的 Valkey 或 Redis OSS（已启用集群模式）复制组 `sample-repl-group`，每个节点组/分片具有三个节点，即一个主节点和两个只读副本（--replicas-per-node-group）。

对于 Linux、macOS 或 Unix：

```
aws elasticache create-replication-group \
   --replication-group-id sample-repl-group \
   --replication-group-description "Demo cluster with replicas" \
   --num-node-groups 3 \
   --replicas-per-node-group 2 \
   --cache-node-type cache.m4.large \ 
   --engine redis \   
   --security-group-ids SECURITY_GROUP_ID \    
   --cache-subnet-group-name SUBNET_GROUP_NAME>
```

对于 Windows：

```
aws elasticache create-replication-group ^
   --replication-group-id sample-repl-group ^
   --replication-group-description "Demo cluster with replicas" ^
   --num-node-groups 3 ^
   --replicas-per-node-group 2 ^
   --cache-node-type cache.m4.large ^ 
   --engine redis ^   
   --security-group-ids SECURITY_GROUP_ID ^      
   --cache-subnet-group-name SUBNET_GROUP_NAME>
```

之前的命令生成以下输出。

```
{
    "ReplicationGroup": {
        "Status": "creating", 
        "Description": "Demo cluster with replicas", 
        "ReplicationGroupId": "sample-repl-group", 
        "SnapshotRetentionLimit": 0, 
        "AutomaticFailover": "enabled", 
        "SnapshotWindow": "05:30-06:30", 
        "MemberClusters": [
            "sample-repl-group-0001-001", 
            "sample-repl-group-0001-002", 
            "sample-repl-group-0001-003", 
            "sample-repl-group-0002-001", 
            "sample-repl-group-0002-002", 
            "sample-repl-group-0002-003", 
            "sample-repl-group-0003-001", 
            "sample-repl-group-0003-002", 
            "sample-repl-group-0003-003"
        ], 
        "PendingModifiedValues": {}
    }
}
```

在您从头开始创建 Valkey 或 Redis OSS（已启用集群模式）复制组时，您可以使用 `--node-group-configuration` 参数配置集群中的每个分片，如下例中所示，其中配置了两个节点组（控制台：分片）。第一个分片有两个节点：一个主节点和一个只读副本节点。第二个分片有三个节点：一个主节点和两个只读副本节点。

**--node-group-configuration**  
各节点组的配置。`--node-group-configuration` 参数包括以下字段。  
+ `PrimaryAvailabilityZone` – 此节点组的主节点所在的可用区。如果忽略此参数，ElastiCache 会选择主节点的可用区。

  **示例：** us-west-2a。
+ `ReplicaAvailabilityZones` – 只读副本所在可用区的列表，以逗号分隔。此列表中的可用区数量必须与 `ReplicaCount` 的值匹配。如果忽略此参数，ElastiCache 会选择复制节点的可用区。

  **示例：**"us-west-2a,us-west-2b,us-west-2c"
+ `ReplicaCount` – 此节点组中的副本节点数量。
+ `Slots` – 指定节点组的键空间的字符串。字符串的格式为 `startKey-endKey`。如果忽略此参数，ElastiCache 会在所有节点组之间均匀分配键。

  **示例：** "0-4999"

   

以下操作创建具有两个节点组/分片（`--num-node-groups`）的 Valkey 或 Redis OSS（已启用集群模式）复制组 `new-group`。与前例不同，各节点组配置为彼此不同 (`--node-group-configuration`)。

对于 Linux、macOS 或 Unix：

```
aws elasticache create-replication-group \
  --replication-group-id new-group \
  --replication-group-description "Sharded replication group" \
  --engine redis \    
  --snapshot-retention-limit 8 \
  --cache-node-type cache.m4.medium \
  --num-node-groups 2 \
  --node-group-configuration \
      "ReplicaCount=1,Slots=0-8999,PrimaryAvailabilityZone='us-east-1c',ReplicaAvailabilityZones='us-east-1b'" \
      "ReplicaCount=2,Slots=9000-16383,PrimaryAvailabilityZone='us-east-1a',ReplicaAvailabilityZones='us-east-1a','us-east-1c'"
```

对于 Windows：

```
aws elasticache create-replication-group ^
  --replication-group-id new-group ^
  --replication-group-description "Sharded replication group" ^
  --engine redis ^    
  --snapshot-retention-limit 8 ^
  --cache-node-type cache.m4.medium ^
  --num-node-groups 2 ^
  --node-group-configuration \
      "ReplicaCount=1,Slots=0-8999,PrimaryAvailabilityZone='us-east-1c',ReplicaAvailabilityZones='us-east-1b'" \
      "ReplicaCount=2,Slots=9000-16383,PrimaryAvailabilityZone='us-east-1a',ReplicaAvailabilityZones='us-east-1a','us-east-1c'"
```

之前的操作生成以下输出。

```
{
    "ReplicationGroup": {
        "Status": "creating", 
        "Description": "Sharded replication group", 
        "ReplicationGroupId": "rc-rg", 
        "SnapshotRetentionLimit": 8, 
        "AutomaticFailover": "enabled", 
        "SnapshotWindow": "10:00-11:00", 
        "MemberClusters": [
            "rc-rg-0001-001", 
            "rc-rg-0001-002", 
            "rc-rg-0002-001", 
            "rc-rg-0002-002", 
            "rc-rg-0002-003"
        ], 
        "PendingModifiedValues": {}
    }
}
```

有关其他信息和可能要使用的参数，请参阅 AWS CLI 主题 [create-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/create-replication-group.html)。

## 从头开始在 Valkey 或 Redis OSS（已启用集群模式）中创建复制组（ElastiCache API）
<a name="Replication.CreatingReplGroup.NoExistingCluster.Cluster.API"></a>

以下过程使用 ElastiCache API 创建 Valkey 或 Redis OSS（已启用集群模式）复制组。

在从头开始创建 Valkey 或 Redis OSS（已启用集群模式）复制组时，会通过单次调用 ElastiCache API `CreateReplicationGroup` 操作来创建该复制组及其所有节点。包括以下参数。

**ReplicationGroupId**  
正在创建的复制组的名称。  
Valkey 或 Redis OSS（已启用集群模式）复制组命名约束如下：  
+ 必须包含 1 – 40 个字母数字字符或连字符。
+ 必须以字母开头。
+ 不能包含两个连续连字符。
+ 不能以连字符结束。

**ReplicationGroupDescription**  
复制组的描述。

**NumNodeGroups**  
您希望对此复制组创建的节点组数量。有效值为 1 到 500。

**ReplicasPerNodeGroup**  
各节点组中的副本节点数量。有效值为 0 到 5。

**NodeGroupConfiguration**  
各节点组的配置。`NodeGroupConfiguration` 参数包括以下字段。  
+ `PrimaryAvailabilityZone` – 此节点组的主节点所在的可用区。如果忽略此参数，ElastiCache 会选择主节点的可用区。

  **示例：** us-west-2a。
+ `ReplicaAvailabilityZones` – 只读副本所在可用区的列表。此列表中的可用区数量必须与 `ReplicaCount` 的值匹配。如果忽略此参数，ElastiCache 会选择复制节点的可用区。
+ `ReplicaCount` – 此节点组中的副本节点数量。
+ `Slots` – 指定节点组的键空间的字符串。字符串的格式为 `startKey-endKey`。如果忽略此参数，ElastiCache 会在所有节点组之间均匀分配键。

  **示例：** "0-4999"

   

**CacheNodeType**  
复制组中的每个节点的节点类型。  
ElastiCache 支持以下节点类型。一般而言，与其上一代类型对应项相比，最新一代类型以更低的成本提供了更多内存和计算能力。  
有关各节点类型性能详细信息，请参阅 [Amazon EC2 实例类型](https://aws.amazon.com/ec2/instance-types/)。

**--data-tiering-enabled**  
如果您使用的是 r6gd 节点类型，请设置此参数。如果您不想使用数据分层功能，则设置 `--no-data-tiering-enabled`。有关更多信息，请参阅 [ElastiCache 中的数据分层](data-tiering.md)。

**CacheParameterGroup**  
指定 `default.redis6.x.cluster.on` 参数组或者派生自 `default.redis6.x.cluster.on` 的参数组以创建 Valkey 或 Redis OSS（已启用集群模式）复制组。有关更多信息，请参阅 [Redis OSS 6.x 参数更改](ParameterGroups.Engine.md#ParameterGroups.Redis.6-x)。

**--network-type**  
`ipv4`、`ipv` 或 `dual-stack`。如果选择双堆栈，则必须将 `--IpDiscovery` 参数设置为 `ipv4` 或 `ipv6`。

**引擎**  
redis

**EngineVersion**  
6.0

如果要在复制组上启用传输中加密或静态加密，请添加 `TransitEncryptionEnabled=true` 和/或 `AtRestEncryptionEnabled=true` 参数并满足以下条件。
+ 您的复制组必须运行 Redis OSS 版本 3.2.6 或 4.0.10。
+ 复制组必须在 Amazon VPC 中创建。
+ 还必须包含参数 `CacheSubnetGroup`。
+ 还必须提供 `AuthToken` 参数以及客户为对此集群执行操作所需的 AUTH 令牌指定的字符串值（密码）。

添加换行符以便于阅读。

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=CreateReplicationGroup 
   &CacheNodeType=cache.m4.large
   &CacheParemeterGroup=default.redis6.xcluster.on
   &Engine=redis
   &EngineVersion=6.0
   &NumNodeGroups=3
   &ReplicasPerNodeGroup=2
   &ReplicationGroupDescription=test%20group
   &ReplicationGroupId=myReplGroup
   &Version=2015-02-02
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &X-Amz-Credential=<credential>
```

有关其他信息和可能要使用的参数，请参阅 ElastiCache API 主题 [CreateReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CreateReplicationGroup.html)。

# 查看复制组的详细信息
<a name="Replication.ViewDetails"></a>

有时候您可能希望查看复制组的详细信息。您可以使用 ElastiCache 控制台、AWS CLI for ElastiCache 或 ElastiCache API。Valkey 或 Redis OSS（已禁用集群模式）和 Valkey 或 Redis OSS（已启用集群模式）的控制台流程不同。

**Contents**
+ [查看具有副本的 Valkey 或 Redis OSS（已禁用集群模式）](Replication.ViewDetails.Redis.md)
  + [使用 ElastiCache 控制台](Replication.ViewDetails.Redis.md#Replication.ViewDetails.Redis.CON)
  + [使用 AWS CLI](Replication.ViewDetails.Redis.md#Replication.ViewDetails.Redis.CLI)
  + [使用 ElastiCache API](Replication.ViewDetails.Redis.md#Replication.ViewDetails.Redis.API)
+ [查看复制组：Valkey 或 Redis OSS（已启用集群模式）](Replication.ViewDetails.RedisCluster.md)
  + [使用 ElastiCache 控制台](Replication.ViewDetails.RedisCluster.md#Replication.ViewDetails.RedisCluster.CON)
  + [使用 AWS CLI](Replication.ViewDetails.RedisCluster.md#Replication.ViewDetails.RedisCluster.CLI)
  + [使用 ElastiCache API](Replication.ViewDetails.RedisCluster.md#Replication.ViewDetails.RedisCluster.API)
+ [查看复制组的详细信息 (AWS CLI)](Replication.ViewDetails.CLI.md)
+ [查看复制组的详细信息 (ElastiCache API)](Replication.ViewDetails.API.md)

# 查看具有副本的 Valkey 或 Redis OSS（已禁用集群模式）
<a name="Replication.ViewDetails.Redis"></a>

您可以使用 ElastiCache 控制台、AWS CLI for ElastiCache 或 ElastiCache API 查看 Valkey 或 Redis OSS（已禁用集群模式）集群的详细信息（API/CLI：*复制组*）。

**Contents**
+ [使用 ElastiCache 控制台](#Replication.ViewDetails.Redis.CON)
+ [使用 AWS CLI](#Replication.ViewDetails.Redis.CLI)
+ [使用 ElastiCache API](#Replication.ViewDetails.Redis.API)

## 查看 Valkey 或 Redis OSS（已禁用集群模式）复制组（控制台）
<a name="Replication.ViewDetails.Redis.CON"></a>

要使用 ElastiCache 控制台查看具有副本的 Valkey 或 Redis OSS（已禁用集群模式）集群的详细信息，请参阅主题[查看 Valkey 或 Redis OSS（已禁用集群模式）详细信息（控制台）](Clusters.ViewDetails.md#Clusters.ViewDetails.CON.Redis)。

## 查看 Valkey 或 Redis OSS（已禁用集群模式）复制组（AWS CLI）
<a name="Replication.ViewDetails.Redis.CLI"></a>

有关演示 Valkey 或 Redis OSS（已禁用集群模式）复制组的详细信息的 AWS CLI 示例，请参阅[查看复制组的详细信息 (AWS CLI)](Replication.ViewDetails.CLI.md)。

## 查看 Valkey 或 Redis OSS（已禁用集群模式）复制组（ElastiCache API）
<a name="Replication.ViewDetails.Redis.API"></a>

有关演示 Valkey 或 Redis OSS（已禁用集群模式）复制组的详细信息的 ElastiCache API 示例，请参阅[查看复制组的详细信息 (ElastiCache API)](Replication.ViewDetails.API.md)。

# 查看复制组：Valkey 或 Redis OSS（已启用集群模式）
<a name="Replication.ViewDetails.RedisCluster"></a>

## 查看 Valkey 或 Redis OSS（已启用集群模式）集群（控制台）
<a name="Replication.ViewDetails.RedisCluster.CON"></a>

要使用 ElastiCache 控制台查看 Valkey 或 Redis OSS（已启用集群模式）集群的详细信息，请参阅[查看 Valkey 或 Redis OSS（已启用集群模式）集群的详细信息（控制台）](Clusters.ViewDetails.md#Clusters.ViewDetails.CON.RedisCluster)。

## 查看 Valkey 或 Redis OSS（已启用集群模式）集群的详细信息（AWS CLI）
<a name="Replication.ViewDetails.RedisCluster.CLI"></a>

有关演示 Valkey 或 Redis OSS（已启用集群模式）复制组的详细信息的 ElastiCache CLI 示例，请参阅[查看复制组的详细信息 (AWS CLI)](Replication.ViewDetails.CLI.md)。

## 查看 Valkey 或 Redis OSS（已启用集群模式）集群的详细信息（ElastiCache API）
<a name="Replication.ViewDetails.RedisCluster.API"></a>

有关演示 Valkey 或 Redis OSS（已启用集群模式）复制组的详细信息的 ElastiCache API 示例，请参阅[查看复制组的详细信息 (ElastiCache API)](Replication.ViewDetails.API.md)。

# 查看复制组的详细信息 (AWS CLI)
<a name="Replication.ViewDetails.CLI"></a>

您可以使用 AWS CLI `describe-replication-groups` 命令查看复制组的详细信息。使用以下可选参数来细化列表。忽略该参数将返回最多 100 个复制组的详细信息。

**可选参数**
+ `--replication-group-id` – 使用此参数列出特定复制组的详细信息。如果指定的复制组有多个节点组，则将按照节点组分组返回的结果。
+ `--max-items` – 使用此参数限制列出的复制组数量。`--max-items` 的值不能低于 20 或超过 100。

**Example**  
以下代码列出了最多 100 个复制组的详细信息。  

```
aws elasticache describe-replication-groups
```
以下代码列出了 `sample-repl-group` 的详细信息。  

```
aws elasticache describe-replication-groups --replication-group-id sample-repl-group
```
以下代码列出了 `sample-repl-group` 的详细信息。  

```
aws elasticache describe-replication-groups --replication-group-id sample-repl-group
```
以下代码列出了最多 25 个复制组的详细信息。  

```
aws elasticache describe-replication-groups --max-items 25
```
该操作输出类似以下的内容（JSON 格式）。  

```
{
   "ReplicationGroups": [
     {
       "Status": "available", 
       "Description": "test", 
       "NodeGroups": [
         {
            "Status": "available", 
               "NodeGroupMembers": [
                  {
                     "CurrentRole": "primary", 
                     "PreferredAvailabilityZone": "us-west-2a", 
                     "CacheNodeId": "0001", 
                     "ReadEndpoint": {
                        "Port": 6379, 
                        "Address": "rg-name-001.1abc4d.0001.usw2.cache.amazonaws.com"
                     }, 
                     "CacheClusterId": "rg-name-001"
                  }, 
                  {
                     "CurrentRole": "replica", 
                     "PreferredAvailabilityZone": "us-west-2b", 
                     "CacheNodeId": "0001", 
                     "ReadEndpoint": {
                        "Port": 6379, 
                        "Address": "rg-name-002.1abc4d.0001.usw2.cache.amazonaws.com"
                     }, 
                     "CacheClusterId": "rg-name-002"
                  }, 
                  {
                     "CurrentRole": "replica", 
                     "PreferredAvailabilityZone": "us-west-2c", 
                     "CacheNodeId": "0001", 
                     "ReadEndpoint": {
                        "Port": 6379, 
                        "Address": "rg-name-003.1abc4d.0001.usw2.cache.amazonaws.com"
                     }, 
                     "CacheClusterId": "rg-name-003"
                  }
               ], 
               "NodeGroupId": "0001", 
               "PrimaryEndpoint": {
                  "Port": 6379, 
                  "Address": "rg-name.1abc4d.ng.0001.usw2.cache.amazonaws.com"
               }
            }
         ], 
         "ReplicationGroupId": "rg-name", 
         "AutomaticFailover": "enabled", 
         "SnapshottingClusterId": "rg-name-002", 
         "MemberClusters": [
            "rg-name-001", 
            "rg-name-002", 
            "rg-name-003"
         ], 
         "PendingModifiedValues": {}
      }, 
      {
      ... some output omitted for brevity
      }
   ]
}
```

有关更多信息，请参阅 AWS CLI for ElastiCache 主题 [describe-replication-groups](https://docs.aws.amazon.com/cli/latest/reference/elasticache/describe-replication-groups.html)。

# 查看复制组的详细信息 (ElastiCache API)
<a name="Replication.ViewDetails.API"></a>

您可以使用 AWS CLI `DescribeReplicationGroups` 操作查看复制的详细信息。使用以下可选参数来细化列表。忽略该参数将返回最多 100 个复制组的详细信息。

**可选参数**
+ `ReplicationGroupId` – 使用此参数列出特定复制组的详细信息。如果指定的复制组有多个节点组，则将按照节点组分组返回的结果。
+ `MaxRecords` – 使用此参数限制列出的复制组数量。`MaxRecords` 的值不能低于 20 或超过 100。默认值为 100。

**Example**  
以下代码列出了最多 100 个复制组的详细信息。  

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=DescribeReplicationGroups
   &Version=2015-02-02
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &X-Amz-Credential=<credential>
```
以下代码列出了 `myReplGroup` 的详细信息。  

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=DescribeReplicationGroups
   &ReplicationGroupId=myReplGroup
   &Version=2015-02-02
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &X-Amz-Credential=<credential>
```
以下代码列出了最多 25 个集群的详细信息。  

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=DescribeReplicationGroups
   &MaxRecords=25
   &Version=2015-02-02
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &X-Amz-Credential=<credential>
```

有关更多信息，请参阅 ElastiCache API 参考主题 [DescribeReplicationGroups](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DescribeReplicationGroups.html)。

# 查找复制组端点
<a name="Replication.Endpoints"></a>

应用程序可以连接到复制组中的任何节点，前提是它具有该节点的 DNS 终端节点和端口号。根据您运行的是 Valkey 或 Redis（已禁用集群模式）还是 Valkey 或 Redis（已启用集群模式）复制组，您可能会关注不同的端点。

**Valkey 或 Redis OSS（已禁用集群模式）**  
具有副本的 Valkey 或 Redis（已禁用集群模式）集群有三种类型的端点：*主端点*、*读取器端点*和*节点端点*。主端点是一个 DNS 名称，始终解析为集群中的主节点。主端点不受集群更改的影响，如将只读副本提升为主角色。对于写入活动，我们建议您的应用程序连接到主端点。

读取器端点将在 ElastiCache 集群中的所有只读副本之间均匀地分配指向端点的传入连接。应用程序何时创建连接或应用程序如何（重复）使用连接等附加因素将决定流量分配。读取器端点会在添加或删除副本时实时跟踪集群更改。您可以将 ElastiCache for Redis OSS 集群的多个只读副本置于不同的 AWS 可用区（AZ）中以确保读取器端点的高可用性。

**注意**  
读取器端点不是负载均衡器。它是一个 DNS 记录，将以循环方式解析为副本节点之一的 IP 地址。

对于读取活动，应用程序还可以连接到集群中的任何节点。与主端点不同，节点端点会解析为特定端点。如果您在您的集群中进行更改（例如添加或删除副本），则必须在您的应用程序中更新节点端点。

**Valkey 或 Redis OSS（已启用集群模式）**  
带有副本的 Valkey 或 Redis OSS（已启用集群模式）集群有多个分片（API/CLI：节点组），这意味着它们也有多个主节点，因此其端点结构与 Valkey 或 Redis OSS（已禁用集群模式）集群的不同。Valkey 或 Redis OSS（已启用集群模式）具有一个*配置端点*，其“知道”集群中的所有主端点和节点端点。您的应用程序连接到配置终端节点。只要您的应用程序对集群的配置端点进行写入或读取，Valkey 和 Redis OSS 在后台确定密钥所属的分片以及分片所使用的端点。这对于您的应用程序是完全透明的。

您可以使用 ElastiCache 控制台、AWS CLI 或 ElastiCache API 查找集群的端点。

**查找复制组的终端节点**

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

# 修改复制组
<a name="Replication.Modify"></a>

**重要约束**  
目前， ElastiCache 支持对 Valkey 或 Redis OSS（已启用集群模式）复制组进行有限的修改，例如使用 API 操作 (`ModifyReplicationGroup`CLI:`modify-replication-group`) 更改引擎版本。您可以使用 API 操作 [https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyReplicationGroupShardConfiguration.html](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyReplicationGroupShardConfiguration.html)（CLI：[https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-replication-group-shard-configuration.html](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-replication-group-shard-configuration.html)）修改 Valkey 或 Redis OSS（已启用集群模式）集群中的分片（节点组）数量。有关更多信息，请参阅 [扩缩 Valkey 或 Redis OSS（已启用集群模式）集群](scaling-redis-cluster-mode-enabled.md)。  
要对 Valkey 或 Redis OSS（已启用集群模式）集群进行其他修改，您需要使用集成了更改的新集群重新创建新集群。
您可以将 Valkey 或 Redis OSS（已禁用集群模式）和 Valkey 或 Redis OSS（已启用集群模式）集群和复制组升级到较新的引擎版本。不过，您不能降级到较早的引擎版本，除非删除现有集群或复制组并重新创建它。有关更多信息，请参阅 [的版本管理 ElastiCache](VersionManagement.md)。
您可以使用控制台、[ModifyReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyReplicationGroup.html)API 或 CL [modify-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-replication-group.html)I 命令将已禁用集群模式的 Valkey 或 Redis OSS 集群升级为启用集群模式的现有 ElastiCache 集群，如下例所示。也可以按照[修改集群模式](modify-cluster-mode.md)中的步骤进行操作。

您可以使用 ElastiCache 控制台、或 API 修改 Valkey 或 Redis OSS（已禁用集群模式）集群的 AWS CLI设置。 ElastiCache 目前， ElastiCache 支持对 Valkey 或 Redis OSS（已启用集群模式）复制组进行有限数量的修改。其他修改要求您创建当前复制组的备份，然后使用此备份为新 Valkey 或 Redis OSS（已启用集群模式）复制组制作种子的方式进行修改。

**Topics**
+ [使用 AWS 管理控制台](#Replication.Modify.CON)
+ [使用 AWS CLI](#Replication.Modify.CLI)
+ [使用 ElastiCache API](#Replication.Modify.API)

## 使用 AWS 管理控制台
<a name="Replication.Modify.CON"></a>

要修改 Valkey 或 Redis OSS（已禁用集群模式）集群，请参阅[修改 ElastiCache 集群](Clusters.Modify.md)。

## 使用 AWS CLI
<a name="Replication.Modify.CLI"></a>

以下是该`modify-replication-group`命令的 AWS CLI 示例。您可以使用同样的命令对复制组进行其他修改。

**在现有 Valkey 或 Redis OSS 复制组上启用多可用区：**

对于 Linux、macOS 或 Unix：

```
aws elasticache modify-replication-group \
   --replication-group-id myReplGroup \
   --multi-az-enabled = true
```

对于 Windows：

```
aws elasticache modify-replication-group ^
   --replication-group-id myReplGroup ^
   --multi-az-enabled
```

**将集群模式从已禁用修改为已启用：**

要将集群模式从*已禁用*修改为*已启用*，必须先将集群模式设置为*兼容*。兼容模式让 Valkey 或 Redis 客户端在启用集群模式和禁用集群模式的情况下都能进行连接。在将所有 Valkey 或 Redis OSS 客户端迁移到使用*已启用*集群模式后，就可以完成集群模式配置并将集群模式设置为已启用。

对于 Linux、macOS 或 Unix：

将集群模式设置为*兼容*。

```
aws elasticache modify-replication-group \
   --replication-group-id myReplGroup \
   --cache-parameter-group-name myParameterGroupName \
   --cluster-mode compatible
```

将集群模式设置为*已启用*。

```
aws elasticache modify-replication-group \
   --replication-group-id myReplGroup \
   --cluster-mode enabled
```

对于 Windows：

将集群模式设置为*兼容*。

```
aws elasticache modify-replication-group ^
   --replication-group-id myReplGroup ^
   --cache-parameter-group-name myParameterGroupName ^
   --cluster-mode compatible
```

将集群模式设置为*已启用*。

```
aws elasticache modify-replication-group ^
   --replication-group-id myReplGroup ^
   --cluster-mode enabled
```

有关该 AWS CLI `modify-replication-group`命令的更多信息，请参阅 For *Redis OSS 用户指南*中的[modify-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-replication-group.html)ElastiCache 或[修改集群模式]()。

## 使用 ElastiCache API
<a name="Replication.Modify.API"></a>

以下 ElastiCache API 操作在现有 Valkey 或 Redis OSS 复制组上启用多可用区。您可以使用同样的操作对复制组进行其他修改。

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=ModifyReplicationGroup
   &AutomaticFailoverEnabled=true  
   &Mutli-AZEnabled=true  
   &ReplicationGroupId=myReplGroup
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20141201T220302Z
   &Version=2014-12-01
   &X-Amz-Algorithm=&AWS;4-HMAC-SHA256
   &X-Amz-Date=20141201T220302Z
   &X-Amz-SignedHeaders=Host
   &X-Amz-Expires=20141201T220302Z
   &X-Amz-Credential=<credential>
   &X-Amz-Signature=<signature>
```

有关 ElastiCache API `ModifyReplicationGroup` 操作的更多信息，请参阅[ModifyReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyReplicationGroup.html)。

# 删除复制组
<a name="Replication.DeletingRepGroup"></a>

如果您不再需要某个具有副本的集群（在 API/CLI 中称作*复制组*），可将其删除。在删除复制组时，ElastiCache 会删除该组中的所有节点。

此操作开始执行后，就无法中断或取消。

**警告**  
当您删除 ElastiCache for Redis OSS 集群时，您的手动快照会保留。您还可以选择在删除集群前创建最后一个快照。自动缓存快照不会保留。
创建最终快照需要 `CreateSnapshot` 权限。如果没有此权限，API 调用将失败，并出现 `Access Denied` 异常。

## 删除复制组（控制台）
<a name="Replication.DeletingRepGroup.CON"></a>

要删除具有副本的集群，请参阅[删除中的集群 ElastiCache](Clusters.Delete.md)。

## 删除复制组 (AWS CLI)
<a name="Replication.DeletingRepGroup.CLI"></a>

使用命令 [delete-replication-group](https://docs.aws.amazon.com/AmazonElastiCache/latest/CommandLineReference/CLIReference-cmd-DeleteReplicationGroup.html) 删除复制组。

```
aws elasticache delete-replication-group --replication-group-id my-repgroup 
```

系统会提示您确认您的决定。输入 *y*（是）立即开始操作。此过程一经启动便无法撤销。

```
						
   After you begin deleting this replication group, all of its nodes will be deleted as well.
   Are you sure you want to delete this replication group? [Ny]y

REPLICATIONGROUP  my-repgroup  My replication group  deleting
```

## 删除复制组 (ElastiCache API)
<a name="Replication.DeletingRepGroup.API"></a>

调用带 [DeleteReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DeleteReplicationGroup.html) 参数的 `ReplicationGroup`。

**Example**  

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=DeleteReplicationGroup
   &ReplicationGroupId=my-repgroup
   &Version=2014-12-01
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20141201T220302Z
   &X-Amz-Algorithm=&AWS;4-HMAC-SHA256
   &X-Amz-Date=20141201T220302Z
   &X-Amz-SignedHeaders=Host
   &X-Amz-Expires=20141201T220302Z
   &X-Amz-Credential=<credential>
   &X-Amz-Signature=<signature>
```

**注意**  
如果您将 `RetainPrimaryCluster` 参数设置为 `true`，则会删除所有只读副本，但是将保留主集群。

# 更改副本数量
<a name="increase-decrease-replica-count"></a>

您可以使用 AWS 管理控制台、AWS CLI 或 ElastiCache API 动态地增加或减少 Valkey 或 Redis OSS 复制组中的只读副本数量。如果您的复制组为 Valkey 或 Redis OSS（已启用集群模式）复制组，则可以选择要在其中增加或减少副本数量的分片（节点组）。

要动态更改您的复制组中的副本数量，请从下表中选择符合您情况的操作。


| 要执行的操作 | 对于 Valkey 或 Redis OSS（已启用集群模式） | 对于 Valkey 或 Redis OSS（已禁用集群模式） | 
| --- | --- | --- | 
|  添加副本  |  [增加分区中的副本数量](increase-replica-count.md)  |  [增加分区中的副本数量](increase-replica-count.md) [为 Valkey 或 Redis OSS（已禁用集群模式）添加只读副本](Replication.AddReadReplica.md)  | 
|  删除副本  |  [减少分区中的副本数量](decrease-replica-count.md)  |  [减少分区中的副本数量](decrease-replica-count.md) [为 Valkey 或 Redis OSS（已禁用集群模式）删除只读副本](Replication.RemoveReadReplica.md)  | 

# 增加分区中的副本数量
<a name="increase-replica-count"></a>

您可以增加 Valkey 或 Redis OSS（已启用集群模式）分片或 Valkey 或 Redis OSS（已禁用集群模式）复制组中的副本数量，最多不超过 5 个。您可以使用 AWS 管理控制台、AWS CLI 或 ElastiCache API 执行此操作。

**Topics**
+ [使用 AWS 管理控制台](#increase-replica-count-con)
+ [使用 AWS CLI](#increase-replica-count-cli)
+ [使用 ElastiCache API](#increase-replica-count-api)

## 使用 AWS 管理控制台
<a name="increase-replica-count-con"></a>

以下过程使用控制台增加 Valkey 或 Redis OSS（已启用集群模式）复制组中的副本数量。

**增加分片中的副本数量**

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

1. 在导航窗格中，选择 **Valkey** 或 **Redis OSS**，然后选择要向其添加副本的复制组的名称。

1. 选中要将副本添加到的每个分片对应的框。

1. 选择 **Add replicas (添加副本)**。

1. 完成 **Add Replicas to Shards (将副本添加到分片)** 页面：
   + 对于 **New number of replicas/shard (新副本/分片数量)**，输入您希望所有选定的分片应具有的副本数量。此值必须大于或造型 **Current Number of Replicas per shard (每个分片的当前副本数量)** 且小于或等于 5。我们建议使用至少两个副本作为有效的最小值。
   + 对于 **Availability Zones（可用区）**，选择 **No preference（无首选项）**以让 ElastiCache 为每个新副本选择可用区，或者选择 **Specify Availability Zones（指定可用区）**以为每个新副本选择可用区。

     如果选择 **Specify Availability Zones (指定可用区)**，对于每个新副本，请使用列表指定可用区。

1. 选择 **Add (添加)** 以添加副本，或选择 **Cancel (取消)** 以取消该操作。

## 使用 AWS CLI
<a name="increase-replica-count-cli"></a>

要增加 Valkey 或 Redis OSS 分片中的副本数量，请使用带有以下参数的 `increase-replica-count` 命令：
+ `--replication-group-id` – 必需。确定要在其中增加副本数量的复制组。
+ `--apply-immediately` 或 `--no-apply-immediately` – 必需。指定是立即增加副本数量 (`--apply-immediately`) 还是在下一维护时段增加副本数量 (`--no-apply-immediately`)。当前不支持 `--no-apply-immediately`。
+ `--new-replica-count` – 可选。指定完成时所希望的副本节点数量（最多 5 个）。对其中仅有一个节点组的 Valkey 或 Redis OSS（已禁用集群模式）复制组或您希望其中的所有节点组均有相同副本数量的 Valkey 或 Redis OSS（已启用集群模式）复制组使用此参数。如果此值小于或等于节点组中的当前副本数量，则调用失败并返回异常。
+ `--replica-configuration` – 可选。允许您单独地为每个节点组设置副本和可用区的数量。对您希望单独配置其中每个节点组的 Valkey 或 Redis OSS（已启用集群模式）组使用此参数。

  `--replica-configuration` 具有三位可选成员：
  + `NodeGroupId` – 您要配置的节点组的四位数 ID。对于 Valkey 或 Redis OSS（已禁用集群模式）复制组，分片 ID 始终为 `0001`。若要查找 Valkey 或 Redis OSS（已启用集群模式）节点组（分片）ID，请参阅 [查找分区的 ID](Shards.md#shard-find-id)。
  + `NewReplicaCount` – 您希望在此操作结束时此节点组中所具有的副本数量。此值必须大于当前副本数量，最多为 5 个。如果此值小于或等于节点组中的当前副本数量，则调用失败并返回异常。
  + `PreferredAvailabilityZones` – `PreferredAvailabilityZone` 字符串的列表，指定复制组的节点即将位于的可用区。`PreferredAvailabilityZone` 值的数字必须等于 `NewReplicaCount` 的值再加上 1 以形成主节点。如果忽略 `--replica-configuration` 的此成员，ElastiCache for Redis OSS 会为每个新副本选择可用区。

**重要**  
您必须在调用中包含 `--new-replica-count` 或 `--replica-configuration` 参数，但不能同时包含这两项。

**Example**  
以下示例将复制组 `sample-repl-group` 中的副本数量增加到 3 个。在完成此示例后，每个节点组中将有 3 个副本。无论是具有单个节点组的 Valkey 或 Redis OSS（已禁用集群模式）复制组，还是具多个节点组的 Valkey 或 Redis OSS（已禁用集群模式）复制组，此数字都适用。  
对于 Linux、macOS 或 Unix：  

```
aws elasticache increase-replica-count \
    --replication-group-id sample-repl-group \
    --new-replica-count 3 \
    --apply-immediately
```
对于 Windows：  

```
aws elasticache increase-replica-count ^
    --replication-group-id sample-repl-group ^
    --new-replica-count 3 ^
    --apply-immediately
```
以下示例将复制组 `sample-repl-group` 中的副本数量增加到两个指定节点组指定的值。假定存在多个节点组，则这是一个 Valkey 或 Redis OSS（已启用集群模式）复制组。指定可选 `PreferredAvailabilityZones` 时，所列可用区的数量必须等于 `NewReplicaCount` 的值再加上 1。此方法适用于由 `NodeGroupId` 标识的组的主节点。  
对于 Linux、macOS 或 Unix：  

```
aws elasticache increase-replica-count \
    --replication-group-id sample-repl-group \
    --replica-configuration \
        NodeGroupId=0001,NewReplicaCount=2,PreferredAvailabilityZones=us-east-1a,us-east-1c,us-east-1b \
        NodeGroupId=0003,NewReplicaCount=3,PreferredAvailabilityZones=us-east-1a,us-east-1b,us-east-1c,us-east-1c \
    --apply-immediately
```
对于 Windows：  

```
aws elasticache increase-replica-count ^
    --replication-group-id sample-repl-group ^
    --replica-configuration ^
        NodeGroupId=0001,NewReplicaCount=2,PreferredAvailabilityZones=us-east-1a,us-east-1c,us-east-1b ^
        NodeGroupId=0003,NewReplicaCount=3,PreferredAvailabilityZones=us-east-1a,us-east-1b,us-east-1c,us-east-1c \
    --apply-immediately
```

有关使用 CLI 增加副本数量的更多信息，请参阅 *Amazon ElastiCache 命令行参考* 中的 [increase-replica-count](https://docs.aws.amazon.com/cli/latest/reference/elasticache/increase-replica-count.html)。

## 使用 ElastiCache API
<a name="increase-replica-count-api"></a>

要增加 Valkey 或 Redis OSS 分片中的副本数量，请使用带有以下参数的 `IncreaseReplicaCount` 操作：
+ `ReplicationGroupId` – 必需。确定要在其中增加副本数量的复制组。
+ `ApplyImmediately` – 必需。指定是立即增加副本数量 (`ApplyImmediately=True`) 还是在下一维护时段增加副本数量 (`ApplyImmediately=False`)。当前不支持 `ApplyImmediately=False`。
+ `NewReplicaCount` – 可选。指定完成时所希望的副本节点数量（最多 5 个）。对其中仅有一个节点组的 Valkey 或 Redis OSS（已禁用集群模式）复制组或您希望其中的所有节点组均有相同副本数量的 Valkey 或 Redis OSS（已启用集群模式）复制组使用此参数。如果此值小于或等于节点组中的当前副本数量，则调用失败并返回异常。
+ `ReplicaConfiguration` – 可选。允许您单独地为每个节点组设置副本和可用区的数量。对您希望单独配置其中每个节点组的 Valkey 或 Redis OSS（已启用集群模式）组使用此参数。

  `ReplicaConfiguraion` 具有三位可选成员：
  + `NodeGroupId` – 您要配置的节点组的四位数 ID。对于 Valkey 或 Redis OSS（已禁用集群模式）复制组，节点组（分片）ID 始终为 `0001`。若要查找 Valkey 或 Redis OSS（已启用集群模式）节点组（分片）ID，请参阅 [查找分区的 ID](Shards.md#shard-find-id)。
  + `NewReplicaCount` – 您希望在此操作结束时此节点组中所具有的副本数量。此值必须大于当前副本数量，且最多为 5 个。如果此值小于或等于节点组中的当前副本数量，则调用失败并返回异常。
  + `PreferredAvailabilityZones` – `PreferredAvailabilityZone` 字符串的列表，指定复制组的节点即将位于的可用区。`PreferredAvailabilityZone` 值的数字必须等于 `NewReplicaCount` 的值再加上 1 以形成主节点。如果忽略 `ReplicaConfiguration` 的此成员，ElastiCache for Redis OSS 会为每个新副本选择可用区。

**重要**  
您必须在调用中包含 `NewReplicaCount` 或 `ReplicaConfiguration` 参数，但不能同时包含这两项。

**Example**  
以下示例将复制组 `sample-repl-group` 中的副本数量增加到 3 个。在完成此示例后，每个节点组中将有 3 个副本。无论是具有单个节点组的 Valkey 或 Redis OSS（已禁用集群模式）复制组，还是具多个节点组的 Valkey 或 Redis OSS（已禁用集群模式）复制组，此数字都适用。  

```
https://elasticache.us-west-2.amazonaws.com/
      ?Action=IncreaseReplicaCount
      &ApplyImmediately=True
      &NewReplicaCount=3
      &ReplicationGroupId=sample-repl-group
      &Version=2015-02-02
      &SignatureVersion=4
      &SignatureMethod=HmacSHA256
      &Timestamp=20150202T192317Z
      &X-Amz-Credential=<credential>
```
以下示例将复制组 `sample-repl-group` 中的副本数量增加到两个指定节点组指定的值。假定存在多个节点组，则这是一个 Valkey 或 Redis OSS（已启用集群模式）复制组。指定可选 `PreferredAvailabilityZones` 时，所列可用区的数量必须等于 `NewReplicaCount` 的值再加上 1。此方法适用于由 `NodeGroupId` 标识的组的主节点。  

```
https://elasticache.us-west-2.amazonaws.com/
      ?Action=IncreaseReplicaCount
      &ApplyImmediately=True
      &ReplicaConfiguration.ConfigureShard.1.NodeGroupId=0001
      &ReplicaConfiguration.ConfigureShard.1.NewReplicaCount=2
      &ReplicaConfiguration.ConfigureShard.1.PreferredAvailabilityZones.PreferredAvailabilityZone.1=us-east-1a
      &ReplicaConfiguration.ConfigureShard.1.PreferredAvailabilityZones.PreferredAvailabilityZone.2=us-east-1c
      &ReplicaConfiguration.ConfigureShard.1.PreferredAvailabilityZones.PreferredAvailabilityZone.3=us-east-1b
      &ReplicaConfiguration.ConfigureShard.2.NodeGroupId=0003
      &ReplicaConfiguration.ConfigureShard.2.NewReplicaCount=3
      &ReplicaConfiguration.ConfigureShard.2.PreferredAvailabilityZones.PreferredAvailabilityZone.1=us-east-1a
      &ReplicaConfiguration.ConfigureShard.2.PreferredAvailabilityZones.PreferredAvailabilityZone.2=us-east-1b
      &ReplicaConfiguration.ConfigureShard.2.PreferredAvailabilityZones.PreferredAvailabilityZone.3=us-east-1c
      &ReplicaConfiguration.ConfigureShard.2.PreferredAvailabilityZones.PreferredAvailabilityZone.4=us-east-1c
      &ReplicationGroupId=sample-repl-group
      &Version=2015-02-02
      &SignatureVersion=4
      &SignatureMethod=HmacSHA256
      &Timestamp=20150202T192317Z
      &X-Amz-Credential=<credential>
```

有关使用 API 增加副本数量的更多信息，请参阅 *Amazon ElastiCache API 参考*中的 [IncreaseReplicaCount](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_IncreaseReplicaCount.html)。

# 减少分区中的副本数量
<a name="decrease-replica-count"></a>

您可以减少 Valkey 或 Redis OSS（已启用集群模式）分片中的副本数量，或 Valkey 或 Redis OSS（已禁用集群模式）复制组中的副本数量：
+ 对于 Valkey 或 Redis OSS（已禁用集群模式），如果启用了多可用区，则可以将副本数量减少到 1 个；如果未启用，则可以将副本数量减少到 0。
+ 对于 Valkey 或 Redis OSS（已启用集群模式），您可以将副本数量减少到 0。但是，如果您的主节点发生故障，则无法故障转移到副本。

您可以使用 AWS 管理控制台、AWS CLI 或 ElastiCache API 来减少节点组（分区）或复制组中的副本数量。

**Topics**
+ [使用 AWS 管理控制台](#decrease-replica-count-con)
+ [使用 AWS CLI](#decrease-replica-count-cli)
+ [使用 ElastiCache API](#decrease-replica-count-api)

## 使用 AWS 管理控制台
<a name="decrease-replica-count-con"></a>

以下过程使用控制台减少 Valkey 或 Redis OSS（已启用集群模式）复制组中的副本数量。

**减少 Valkey 或 Redis OSS 分片中的副本数量**

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

1. 在导航窗格中，选择 **Valkey** 或 **Redis OSS**，然后选择要从其中删除副本的复制组的名称。

1. 选中要从其中删除副本的每个分片对应的框。

1. 选择 **Delete replicas (删除副本)**。

1. 完成 **Delete Replicas from Shards (从分片中删除副本)** 页面：

   1. 对于 **New number of replicas/shard (新副本/分片数量)**，输入您希望选定的分片应具有的副本数量。此数字必须大于或等于 1。我们建议每个分片使用至少两个副本作为有效的最小值。

   1. 选择 **Delete (删除)** 以删除副本，或选择 **Cancel (取消)** 以取消该操作。

**重要**  
如果您未指定要删除的副本节点，ElastiCache for Redis OSS 会自动选择副本节点来进行删除。在此过程中，ElastiCache for Redis OSS 会尝试为您的复制组保留多可用区架构，然后保留具有最小复制滞后的副本以及主节点。
无法删除复制组中的主节点。如果指定主节点进行删除，此操作会失败并显示指示已选中主节点进行删除的错误事件。

## 使用 AWS CLI
<a name="decrease-replica-count-cli"></a>

要减少 Valkey 或 Redis OSS 分片中的副本数量，请使用带有以下参数的 `decrease-replica-count` 命令：
+ `--replication-group-id` – 必需。确定要在其中减少副本数量的复制组。
+ `--apply-immediately` 或 `--no-apply-immediately` – 必需。指定是立即减少副本数量（`--apply-immediately`）还是在下一维护时段减少副本数量（`--no-apply-immediately`）。当前不支持 `--no-apply-immediately`。
+ `--new-replica-count` – 可选。指定希望的副本节点数。`--new-replica-count` 的值必须为小于节点组中的当前副本数量的有效值。有关允许的最小值，请参阅[减少分区中的副本数量](#decrease-replica-count)。如果 `--new-replica-count` 的值不满足此要求，则调用失败。
+ `--replicas-to-remove` – 可选。包含指定要删除的副本节点的节点 ID 的列表。
+ `--replica-configuration` – 可选。允许您单独地为每个节点组设置副本和可用区的数量。对您希望单独配置其中每个节点组的 Valkey 或 Redis OSS（已启用集群模式）组使用此参数。

  `--replica-configuration` 具有三位可选成员：
  + `NodeGroupId` – 您要配置的节点组的四位数 ID。对于 Valkey 或 Redis OSS（已禁用集群模式）复制组，分片 ID 始终为 `0001`。若要查找 Valkey 或 Redis OSS（已启用集群模式）节点组（分片）ID，请参阅 [查找分区的 ID](Shards.md#shard-find-id)。
  + `NewReplicaCount` – 指定希望的副本节点数的可选参数。`NewReplicaCount` 的值必须为小于节点组中的当前副本数量的有效值。有关允许的最小值，请参阅[减少分区中的副本数量](#decrease-replica-count)。如果 `NewReplicaCount` 的值不满足此要求，则调用失败。
  + `PreferredAvailabilityZones` – `PreferredAvailabilityZone` 字符串的列表，指定复制组的节点所在的可用区。`PreferredAvailabilityZone` 值的数字必须等于 `NewReplicaCount` 的值再加上 1 以形成主节点。如果忽略 `--replica-configuration` 的此成员，ElastiCache for Redis OSS 会为每个新副本选择可用区。

**重要**  
您必须包含且只能包含 `--new-replica-count`、`--replicas-to-remove` 或 `--replica-configuration` 参数之一。

**Example**  
以下示例使用 `--new-replica-count` 将复制组 `sample-repl-group` 中的副本数量减少为 1 个。在完成此示例后，每个节点组中将有一个副本。无论是具有单个节点组的 Valkey 或 Redis OSS（已禁用集群模式）复制组，还是具多个节点组的 Valkey 或 Redis OSS（已禁用集群模式）复制组，此数字都适用。  
对于 Linux、macOS 或 Unix：  

```
aws elasticache decrease-replica-count
    --replication-group-id sample-repl-group \
    --new-replica-count 1 \
    --apply-immediately
```
对于 Windows：  

```
aws elasticache decrease-replica-count ^
    --replication-group-id sample-repl-group ^
    --new-replica-count 1 ^
    --apply-immediately
```
以下示例通过从节点组中删除两个指定的副本（`sample-repl-group` 和 `0001`）来减少复制 `0003` 中的副本数量。  
对于 Linux、macOS 或 Unix：  

```
aws elasticache decrease-replica-count \
    --replication-group-id sample-repl-group \
    --replicas-to-remove 0001,0003 \
    --apply-immediately
```
对于 Windows：  

```
aws elasticache decrease-replica-count ^
    --replication-group-id sample-repl-group ^
    --replicas-to-remove 0001,0003 \
    --apply-immediately
```
以下示例使用 `--replica-configuration` 将复制组 `sample-repl-group` 中的副本数量减少为两个指定节点组指定的值。假定存在多个节点组，则这是一个 Valkey 或 Redis OSS（已启用集群模式）复制组。指定可选 `PreferredAvailabilityZones` 时，所列可用区的数量必须等于 `NewReplicaCount` 的值再加上 1。此方法适用于由 `NodeGroupId` 标识的组的主节点。  
对于 Linux、macOS 或 Unix：  

```
aws elasticache decrease-replica-count \
    --replication-group-id sample-repl-group \
    --replica-configuration \
        NodeGroupId=0001,NewReplicaCount=1,PreferredAvailabilityZones=us-east-1a,us-east-1c \
        NodeGroupId=0003,NewReplicaCount=2,PreferredAvailabilityZones=us-east-1a,us-east-1b,us-east-1c \
    --apply-immediately
```
对于 Windows：  

```
aws elasticache decrease-replica-count ^
    --replication-group-id sample-repl-group ^
    --replica-configuration ^
        NodeGroupId=0001,NewReplicaCount=2,PreferredAvailabilityZones=us-east-1a,us-east-1c ^
        NodeGroupId=0003,NewReplicaCount=3,PreferredAvailabilityZones=us-east-1a,us-east-1b,us-east-1c \
    --apply-immediately
```

有关使用 CLI 减少副本数量的更多信息，请参阅 *Amazon ElastiCache 命令行参考*中的 [decrease-replica-count](https://docs.aws.amazon.com/cli/latest/reference/elasticache/decrease-replica-count.html)。

## 使用 ElastiCache API
<a name="decrease-replica-count-api"></a>

要减少 Valkey 或 Redis OSS 分片中的副本数量，请使用带有以下参数的 `DecreaseReplicaCount` 操作：
+ `ReplicationGroupId` – 必需。确定要在其中减少副本数量的复制组。
+ `ApplyImmediately` – 必需。指定是立即减少副本数量（`ApplyImmediately=True`）还是在下一维护时段减少副本数量（`ApplyImmediately=False`）。当前不支持 `ApplyImmediately=False`。
+ `NewReplicaCount` – 可选。指定希望的副本节点数。`NewReplicaCount` 的值必须为小于节点组中的当前副本数量的有效值。有关允许的最小值，请参阅[减少分区中的副本数量](#decrease-replica-count)。如果 `--new-replica-count` 的值不满足此要求，则调用失败。
+ `ReplicasToRemove` – 可选。包含指定要删除的副本节点的节点 ID 的列表。
+ `ReplicaConfiguration` – 可选。包含节点组列表，这些节点组允许您单独地为每个节点组设置副本和可用区的数量。对您希望单独配置其中每个节点组的 Valkey 或 Redis OSS（已启用集群模式）组使用此参数。

  `ReplicaConfiguraion` 具有三位可选成员：
  + `NodeGroupId` – 您要配置的节点组的四位数 ID。对于 Valkey 或 Redis OSS（已禁用集群模式）复制组，节点组 ID 始终为 `0001`。若要查找 Valkey 或 Redis OSS（已启用集群模式）节点组（分片）ID，请参阅 [查找分区的 ID](Shards.md#shard-find-id)。
  + `NewReplicaCount` – 您希望在此操作结束时此节点组中所具有的副本数量。如果启用了多可用区，则此值必须小于当前副本数量（最少为 1 个）；如果未启用具有自动故障转移功能的多可用区，则此值为 0。如果此值大于或等于节点组中的当前副本数量，则调用失败并返回异常。
  + `PreferredAvailabilityZones` – `PreferredAvailabilityZone` 字符串的列表，指定复制组的节点所在的可用区。`PreferredAvailabilityZone` 值的数字必须等于 `NewReplicaCount` 的值再加上 1 以形成主节点。如果忽略 `ReplicaConfiguration` 的此成员，ElastiCache for Redis OSS 会为每个新副本选择可用区。

**重要**  
您必须包含且只能包含 `NewReplicaCount`、`ReplicasToRemove` 或 `ReplicaConfiguration` 参数之一。

**Example**  
以下示例使用 `NewReplicaCount` 将复制组 `sample-repl-group` 中的副本数量减少为 1 个。在完成此示例后，每个节点组中将有一个副本。无论是具有单个节点组的 Valkey 或 Redis OSS（已禁用集群模式）复制组，还是具多个节点组的 Valkey 或 Redis OSS（已禁用集群模式）复制组，此数字都适用。  

```
https://elasticache.us-west-2.amazonaws.com/
      ?Action=DecreaseReplicaCount
      &ApplyImmediately=True
      &NewReplicaCount=1
      &ReplicationGroupId=sample-repl-group
      &Version=2015-02-02
      &SignatureVersion=4
      &SignatureMethod=HmacSHA256
      &Timestamp=20150202T192317Z
      &X-Amz-Credential=<credential>
```
以下示例通过从节点组中删除两个指定的副本（`sample-repl-group` 和 `0001`）来减少复制 `0003` 中的副本数量。  

```
https://elasticache.us-west-2.amazonaws.com/
      ?Action=DecreaseReplicaCount
      &ApplyImmediately=True
      &ReplicasToRemove.ReplicaToRemove.1=0001
      &ReplicasToRemove.ReplicaToRemove.2=0003
      &ReplicationGroupId=sample-repl-group
      &Version=2015-02-02
      &SignatureVersion=4
      &SignatureMethod=HmacSHA256
      &Timestamp=20150202T192317Z
      &X-Amz-Credential=<credential>
```
以下示例使用 `ReplicaConfiguration` 将复制组 `sample-repl-group` 中的副本数量减少为两个指定节点组指定的值。假定存在多个节点组，则这是一个 Valkey 或 Redis OSS（已启用集群模式）复制组。指定可选 `PreferredAvailabilityZones` 时，所列可用区的数量必须等于 `NewReplicaCount` 的值再加上 1。此方法适用于由 `NodeGroupId` 标识的组的主节点。  

```
https://elasticache.us-west-2.amazonaws.com/
      ?Action=DecreaseReplicaCount
      &ApplyImmediately=True
      &ReplicaConfiguration.ConfigureShard.1.NodeGroupId=0001
      &ReplicaConfiguration.ConfigureShard.1.NewReplicaCount=1
      &ReplicaConfiguration.ConfigureShard.1.PreferredAvailabilityZones.PreferredAvailabilityZone.1=us-east-1a
      &ReplicaConfiguration.ConfigureShard.1.PreferredAvailabilityZones.PreferredAvailabilityZone.2=us-east-1c
      &ReplicaConfiguration.ConfigureShard.2.NodeGroupId=0003
      &ReplicaConfiguration.ConfigureShard.2.NewReplicaCount=2
      &ReplicaConfiguration.ConfigureShard.2.PreferredAvailabilityZones.PreferredAvailabilityZone.1=us-east-1a
      &ReplicaConfiguration.ConfigureShard.2.PreferredAvailabilityZones.PreferredAvailabilityZone.2=us-east-1b
      &ReplicaConfiguration.ConfigureShard.2.PreferredAvailabilityZones.PreferredAvailabilityZone.4=us-east-1c
      &ReplicationGroupId=sample-repl-group
      &Version=2015-02-02
      &SignatureVersion=4
      &SignatureMethod=HmacSHA256
      &Timestamp=20150202T192317Z
      &X-Amz-Credential=<credential>
```

有关使用 API 减少副本数量的更多信息，请参阅 *Amazon ElastiCache API 参考*中的 [DecreaseReplicaCount](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DecreaseReplicaCount.html)。

# 为 Valkey 或 Redis OSS（已禁用集群模式）添加只读副本
<a name="Replication.AddReadReplica"></a>

以下主题中的信息仅适用于 Valkey 或 Redis OSS（已禁用集群模式）复制组。

随着您的读取流量的增加，您可能需要跨多个节点分布这些读取操作，并且减少任一节点上的读取压力。在本主题中，您可以了解如何向 Valkey 或 Redis OSS（已禁用集群模式）集群添加只读副本。

Valkey 或 Redis OSS（已禁用集群模式）复制组最多可以有五个只读副本。如果您尝试向已有 5 个只读副本的复制组添加只读副本，则此操作将失败。

有关向 Valkey 或 Redis OSS（已启用集群模式）复制组添加副本的信息，请参阅以下内容：
+ [扩缩 Valkey 或 Redis OSS（已启用集群模式）集群](scaling-redis-cluster-mode-enabled.md)
+ [增加分区中的副本数量](increase-replica-count.md)

您可以使用 ElastiCache 控制台、AWS CLI 或 ElastiCache API 向 Valkey 或 Redis OSS（已禁用集群模式）集群添加只读副本。

**相关主题**
+ [向 ElastiCache 集群添加节点](Clusters.AddNode.md)
+ [向复制组添加只读副本 (AWS CLI)](#Replication.AddReadReplica.CLI)
+ [使用 API 向复制组添加只读副本](#Replication.AddReadReplica.API)

## 向复制组添加只读副本 (AWS CLI)
<a name="Replication.AddReadReplica.CLI"></a>

要向 Valkey 或 Redis OSS（已禁用集群模式）复制组添加只读副本，请使用 AWS CLI `create-cache-cluster` 命令，其中参数 `--replication-group-id` 指定要向其添加集群（节点）的复制组。

以下示例创建集群 `my-read replica` 并将其添加到复制组 `my-replication-group`。该只读副本的节点类型、参数组、安全组、维护时段及其他设置与 `my-replication-group` 中的其他节点的相同。

对于 Linux、macOS 或 Unix：

```
aws elasticache create-cache-cluster \
      --cache-cluster-id my-read-replica \
      --replication-group-id my-replication-group
```

对于 Windows：

```
aws elasticache create-cache-cluster ^
      --cache-cluster-id my-read-replica ^
      --replication-group-id my-replication-group
```

有关使用 CLI 添加只读副本的更多信息，请参阅 *Amazon ElastiCache 命令行参考*中的 [create-cache-cluster](https://docs.aws.amazon.com/cli/latest/reference/elasticache/create-cache-cluster.html)。

## 使用 API 向复制组添加只读副本
<a name="Replication.AddReadReplica.API"></a>

要向 Valkey 或 Redis OSS（已禁用集群模式）复制组添加只读副本，请使用 ElastiCache `CreateCacheCluster` 操作，其中参数 `ReplicationGroupId` 指定要向其添加集群（节点）的复制组。

以下示例创建集群 `myReadReplica` 并将其添加到复制组 `myReplicationGroup`。该只读副本的节点类型、参数组、安全组、维护时段及其他设置与 `myReplicationGroup` 中的其他节点的相同。

```
https://elasticache.us-west-2.amazonaws.com/
      ?Action=CreateCacheCluster
      &CacheClusterId=myReadReplica
      &ReplicationGroupId=myReplicationGroup
      &Version=2015-02-02
      &SignatureVersion=4
      &SignatureMethod=HmacSHA256
      &Timestamp=20150202T192317Z
      &X-Amz-Credential=<credential>
```

有关使用 API 添加只读副本的更多信息，请参阅 *Amazon ElastiCache API 参考*中的 [CreateCacheCluster](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CreateCacheCluster.html)。

# 为 Valkey 或 Redis OSS（已禁用集群模式）删除只读副本
<a name="Replication.RemoveReadReplica"></a>

以下主题中的信息仅适用于 Valkey 或 Redis OSS（已禁用集群模式）复制组。

由于 Valkey 或 Redis OSS 复制组上的读取流量是不断变化的，您可能需要添加或移除只读副本。从 复制组中移除节点的过程与删除集群的过程一样，但存在一些限制：
+ 您无法从复制组中移除主集群。如果要删除主集群，请执行以下操作：

  1. 将只读副本提升为主集群。有关将只读副本提升为主集群的更多信息，请参阅[将 Valkey 或 Redis OSS（已禁用集群模式）复制组的只读副本提升为主节点](Replication.PromoteReplica.md)。

  1. 删除旧的主集群。有关此方法的限制，请参阅下一要点。
+ 如果在复制组上启用了多可用区，则无法从复制组中移除上一个只读副本。在此情况下，请执行以下操作：

  1. 通过禁用多可用区来修改复制组。有关更多信息，请参阅 [修改复制组](Replication.Modify.md)。

  1. 删除只读副本。

您可以使用 ElastiCache 控制台、AWS CLI for ElastiCache 或 ElastiCache API 删除 Valkey 或 Redis OSS（已禁用集群模式）复制组中的只读副本。

有关从 Valkey 或 Redis OSS 复制组中删除集群的说明，请参阅以下内容：
+ [使用AWS 管理控制台](Clusters.Delete.md#Clusters.Delete.CON)
+ [使用AWS CLI删除集 ElastiCache 群](Clusters.Delete.md#Clusters.Delete.CLI)
+ [使用 ElastiCache API](Clusters.Delete.md#Clusters.Delete.API)
+ [扩缩 Valkey 或 Redis OSS（已启用集群模式）集群](scaling-redis-cluster-mode-enabled.md)
+ [减少分区中的副本数量](decrease-replica-count.md)

# 将 Valkey 或 Redis OSS（已禁用集群模式）复制组的只读副本提升为主节点
<a name="Replication.PromoteReplica"></a>

以下主题中的信息仅适用于 Valkey 或 Redis OSS（已禁用集群模式）复制组。

您可以使用 AWS 管理控制台、AWS CLI 或 ElastiCache API 将 Valkey 或 Redis OSS（已禁用集群模式）只读副本提升为主节点。在 复制组上启用了具有自动故障转移功能的多可用区的同时，您无法将只读副本提升为主集群。若要在启用了多可用区的复制组上将 Valkey 或 Redis OSS（已禁用集群模式）副本提升为主节点，请执行以下操作：

1. 修改复制组以禁用多可用区（执行此操作不要求所有集群都位于同一个可用区）。有关更多信息，请参阅 [修改复制组](Replication.Modify.md)。

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

1. 修改复制组以重新启用多可用区。

在运行 Redis OSS 2.6.13 或更早版本的复制组上，多可用区不可用。

## 使用 AWS 管理控制台
<a name="Replication.PromoteReplica.CON"></a>

以下过程使用控制台将副本节点提升为主集群。

**将只读副本提升为主节点（控制台）**

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

1. 如果要提升的副本是启用了多可用区的 Valkey 或 Redis OSS（已禁用集群模式）复制组中的成员，请先修改复制组以禁用多可用区，然后再继续。有关更多信息，请参阅 [修改复制组](Replication.Modify.md)。

1. 选择 **Valkey** 或 **Redis OSS**，然后从集群列表中选择要修改的复制组。该复制组必须运行“Redis”引擎，而不是“集群化 Redis”引擎，而且必须具有 2 个或更多个节点。

1. 从节点列表中，选择要提升为主集群的副本节点，然后对于 **Actions (操作)**，选择 **Promote (提升)**。

1. 在 **Promote Read Replica (提升只读副本)** 对话框中，执行以下操作：

   1. 对于 **Apply Immediately (立即应用)**，选择 **Yes (是)** 立即提升只读副本，或者选择 **No (否)** 在集群的下一维护时段提升它。

   1. 选择 **Promote** 提升只读副本，或选择 **Cancel** 取消该操作。

1. 如果在开始提升过程之前集群已启用多可用区，请等待直到复制组的状态为 **available (可用)**，然后修改集群以重新启用多可用区。有关更多信息，请参阅 [修改复制组](Replication.Modify.md)。

## 使用 AWS CLI
<a name="Replication.PromoteReplica.CLI"></a>

当复制组启用多可用区时，您无法将只读副本提升为主集群。在某些情况下，要提升的副本可能是启用了多可用区的复制组的成员。在这些情况下，您必须先修改复制组以禁用多可用区，然后再继续。执行此操作不要求所有集群都位于同一个可用区。有关修改复制组的更多信息，请参阅[修改复制组](Replication.Modify.md)。

以下 AWS CLI 命令修改复制组 `sample-repl-group`，并使只读副本 `my-replica-1` 成为复制组中的主集群。

对于 Linux、macOS 或 Unix：

```
aws elasticache modify-replication-group \
   --replication-group-id sample-repl-group \
   --primary-cluster-id my-replica-1
```

对于 Windows：

```
aws elasticache modify-replication-group ^
   --replication-group-id sample-repl-group ^
   --primary-cluster-id my-replica-1
```

有关修改复制组的更多信息，请参阅 *Amazon ElastiCache 命令行参考*中的 [modify-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-replication-group.html)。

## 使用 ElastiCache API
<a name="Replication.PromoteReplica.API"></a>

当复制组启用多可用区时，您无法将只读副本提升为主集群。在某些情况下，要提升的副本可能是启用了多可用区的复制组的成员。在这些情况下，您必须先修改复制组以禁用多可用区，然后再继续。执行此操作不要求所有集群都位于同一个可用区。有关修改复制组的更多信息，请参阅[修改复制组](Replication.Modify.md)。

以下 ElastiCache API 操作修改复制组 `myReplGroup`，并使只读副本 `myReplica-1` 成为复制组中的主节点。

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=ModifyReplicationGroup
   &ReplicationGroupId=myReplGroup
   &PrimaryClusterId=myReplica-1  
   &Version=2014-12-01
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20141201T220302Z
   &X-Amz-Algorithm=&AWS;4-HMAC-SHA256
   &X-Amz-Date=20141201T220302Z
   &X-Amz-SignedHeaders=Host
   &X-Amz-Expires=20141201T220302Z
   &X-Amz-Credential=<credential>
   &X-Amz-Signature=<signature>
```

有关修改复制组的更多信息，请参阅 *Amazon ElastiCache API 参考*中的 [ModifyReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyReplicationGroup.html)。