

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

# 在中管理基于节点的集群 ElastiCache
<a name="manage-self-designed-cluster"></a>

ElastiCache 提供了两个部署选项，即无服务器缓存和基于节点的集群。每个选项都有各自的功能和要求。

此部分中的主题可帮助您管理基于节点的集群。

**注意**  
这些主题不适用于 ElastiCache 无服务器。

**Topics**
+ [自动扩缩 Valkey 和 Redis OSS 集群](AutoScaling.md)
+ [修改集群模式](modify-cluster-mode.md)
+ [使用全球数据存储跨AWS区域复制](Redis-Global-Datastore.md)
+ [使用复制组时的高可用性](Replication.md)
+ [管理 ElastiCache 集群维护](maintenance-window.md)
+ [使用 ElastiCache 参数组配置引擎参数](ParameterGroups.md)

# 自动扩缩 Valkey 和 Redis OSS 集群
<a name="AutoScaling"></a>

## 先决条件
<a name="AutoScaling-Prerequisites"></a>

ElastiCache Auto Scaling 仅限于以下内容：
+ 运行 Valkey 7.2 和更高版本或运行 Redis OSS 6.0 和更高版本的 Valkey 或 Redis OSS（已启用集群模式）集群
+ 运行 Valkey 7.2 和更高版本或运行 Redis OSS 7.0.7 和更高版本的数据分层（已启用集群模式）集群 
+ 实例大小-大、 XLarge、2 XLarge
+ 实例类型系列 - R7g、R6g、R6gd、R5、M7g、M6g、M5、C7gn
+ 在全球数据存储、Out ElastiCache posts 或 Local Zones 中运行的集群不支持 Auto Scaling。

## 使用 Valkey 或 Redis OSS 的 ElastiCache Auto Scaling 自动管理容量
<a name="AutoScaling-Managing"></a>

ElastiCache 使用 Valkey 或 Redis OSS 进行自动缩放是指能够自动增加或减少服务中所需的分片或副本。 ElastiCache ElastiCache 利用 Application Auto Scaling 服务来提供此功能。有关更多信息，请参阅 [Application Auto Scaling](https://docs.aws.amazon.com/autoscaling/application/userguide/what-is-application-auto-scaling.html)。要使用自动扩展，您需要定义并应用使用您分配的 CloudWatch 指标和目标值的扩展策略。 ElastiCache auto scaling 使用该策略来增加或减少实例数量以响应实际工作负载。

您可以使用AWS 管理控制台来应用基于预定义指标的扩展策略。枚举中对 `predefined metric` 进行了定义，因此您可在代码中按名称指定或在AWS 管理控制台中使用它。自定义指标不可用于使用AWS 管理控制台的选择。或者，您可以使用AWS CLI或 Application Auto Scaling API 来应用基于预定义或自定义指标的扩展策略。

ElastiCache 适用于 Valkey 和 Redis 的 OSS 支持缩放以下维度：
+ **分片** – 自动添加/删除集群中的分片，类似于手动在线重新分片。在这种情况下， ElastiCacheauto scaling 会代表您触发缩放。
+ **副本** — 自动在add/remove replicas in the cluster similar to manual Increase/Decrease replica operations. ElastiCache auto scaling for Valkey and Redis OSS adds/removes集群中的所有分片上均匀地进行复制。

ElastiCache 适用于 Valkey 和 Redis 的 OSS 支持以下类型的自动扩展策略：
+ [目标跟踪扩缩策略](AutoScaling-Scaling-Policies-Target.md)— 根据特定指标 shards/replicas 的目标值增加或减少服务运行的次数。这与恒温器保持家里温度的方式类似。您选择一个温度，恒温器将完成所有其他工作。
+ [为您的应用程序计划扩展。](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-scheduled-scaling.html) — ElastiCache 对于 Valkey 和 Redis，OSS auto scaling 可以根据日期和时间增加或减少服务运行的次数。 shards/replicas 

![\[Valkey 和 Redis ElastiCache OSS 的自动缩放图片\]](http://docs.aws.amazon.com/zh_cn/AmazonElastiCache/latest/dg/images/Auto-scaling.png)


以下步骤总结了 ElastiCache Valkey 和 Redis OSS 的自动缩放流程，如上图所示：

1. 您可以为复制组创建 ElastiCache auto Scaling 策略。

1. ElastiCache auto scaling 会代表你创建一对 CloudWatch 警报。每对告警代表指标的上限和下限。当集群的实际利用率持续偏离您的目标利用率时，就会触发这些 CloudWatch 警报。您现在可以在控制台中查看告警。

1. 如果配置的指标值在特定时间段内超过您的目标利用率（或低于目标），则 CloudWatch 会触发警报，调用 auto scaling 来评估您的扩展策略。

1. ElastiCache auto scaling 会发出修改请求以调整您的集群容量。

1. ElastiCache 处理修改请求，动态增加（或减少）集群 Shards/Replicas 容量，使其接近您的目标利用率。

 要理解 ElastiCache Auto Scaling 的工作原理，假设你有一个名为的集群`UsersCluster`。通过监控的 CloudWatch 指标`UsersCluster`，您可以确定流量达到峰值时集群所需的最大分片数以及流量处于最低点时所需的最小分片。您还可以决定`UsersCluster`群集 CPU 利用率的目标值。 ElastiCache auto scaling 使用其目标跟踪算法来确保根据需要调整的`UsersCluster`预配置分片，以便利用率保持在或接近目标值。

**注意**  
扩展可能需要很长时间，并且需要额外的群集资源才能使分片重新平衡。 ElastiCache 只有当实际工作负载持续升高（或降低）几分钟时，Auto Scaling 才会修改资源设置。自动扩缩目标跟踪算法旨在使目标使用率长期达到或接近选定值。

# 弹性伸缩策略
<a name="AutoScaling-Policies"></a>

扩展策略包含以下组件：
+ 目标指标 – ElastiCache for Valkey and Redis OSS 自动扩缩使用的 CloudWatch 指标，用于确定何时扩缩以及扩缩多少。
+ 最小和最大容量 – 可扩展的最小和最大分区或副本数。
**重要**  
创建弹性伸缩策略时，如果当前容量高于配置的最大容量，我们会在策略创建过程中横向缩减为最大容量。同样，如果当前容量低于配置的最小容量，我们将横向扩展到最小容量。
+ 冷却时间 – 在完成一个横向缩减或横向扩展活动后开始另一个横向扩展活动之前等待的时间（秒）。
+ 服务相关角色 – 与特定 AWS 服务关联的 AWS Identity and Access Management (IAM) 角色。服务相关角色包含服务代表您调用其他 AWS 服务所需的一切权限。ElastiCache 自动扩缩会自动为您生成此角色，即 `AWSServiceRoleForApplicationAutoScaling_ElastiCacheRG`。
+ 启用或禁用横向缩减活动 – 能够为策略启用或禁用横向缩减活动。

**Topics**
+ [弹性伸缩目标指标](#AutoScaling-TargetMetric)
+ [最小和最大容量](#AutoScaling-MinMax)
+ [冷却时间](#AutoScaling-Cooldown)
+ [启用或禁用缩减活动](#AutoScaling-enable-disable-scale-in)

## 弹性伸缩目标指标
<a name="AutoScaling-TargetMetric"></a>

在这种类型的策略中，预定义或自定义指标以及指标目标值是在目标跟踪扩展策略配置中指定的。ElastiCache for Valkey and Redis OSS 自动扩缩可创建和管理触发扩缩策略的 CloudWatch 警报，并根据指标和目标值计算扩缩调整。扩展策略根据需要添加或删除分区/副本，以便将指标保持在指定的目标值或该值附近。除了将指标保持在目标值附近以外，目标跟踪扩展策略还会根据由于工作负载变化而造成的指标波动进行调整。这种策略还会最大限度减少集群的可用分区/副本数的快速波动。

例如，考虑使用具有预定义的平均 `ElastiCachePrimaryEngineCPUUtilization` 指标的扩展策略。这种策略可以将 CPU 使用率保持在指定的使用率百分比（如 70%）或该值附近。

**注意**  
对于每个集群，您只能针对每个目标指标创建一个弹性伸缩策略。

## 最小和最大容量
<a name="AutoScaling-MinMax"></a>

**分片**

您可以指定 ElastiCache for Valkey and Redis OSS 自动扩缩可以扩缩的最大分片数量。此值必须小于或等于 250 且最小为 1。您还可以指定由自动扩缩管理的最小分片数。此值必须至少为 1，且等于或小于为最大分区数 (250) 指定的值。

**副本**

您还可以指定由 ElastiCache for Valkey and Redis OSS 自动扩缩管理的最大副本数。此值必须小于或等于 5。您还可以指定由自动扩缩管理的副本的最小数量。此值必须至少为 1，且等于或小于为最大副本数 (5) 指定的值。

要确定典型流量所需的最小和最大分区/副本数，请使用模型的预期通信速率测试弹性伸缩配置。

**注意**  
ElastiCache 自动扩缩策略会增加集群容量，直到其达到您定义的最大大小或直到服务限额适用为止。若要请求提高限制，请参阅 [AWS Service Limits](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html) 并选择限制类型 **Nodes per cluster per instance type（每个实例类型的每个集群的节点数）**。

**重要**  
在无流量时横向缩减。如果变体的流量变为零，ElastiCache 会自动横向缩减到指定的最小实例数。

## 冷却时间
<a name="AutoScaling-Cooldown"></a>

您可以添加影响集群扩展的冷却时间，以优化目标跟踪扩缩策略的响应速度。冷却时间阻止后续扩展或缩减请求，直至冷却时间到期。这会减慢横向缩减请求在 ElastiCache for Valkey and Redis OSS 集群中删除分片/副本的速度，以及横向扩展请求创建分片/副本的速度。您可以指定以下冷却时间：
+ 横向缩减活动会减少集群中的分片/副本数量。缩减冷却时间指定在完成一个缩减活动后开始另一个缩减活动之前等待的时间 (秒)。
+ 横向扩展活动会增加集群中分片/副本的数量。扩展冷却时间指定在完成一个扩展活动后开始另一个扩展活动之前等待的时间 (秒)。

如果未指定横向缩减或横向扩展冷却时间，则默认横向扩展冷却时间为 600 秒，默认横向缩减冷却时间为 900 秒。

## 启用或禁用缩减活动
<a name="AutoScaling-enable-disable-scale-in"></a>

您可以为策略启用或禁用缩减活动。启用横向缩减活动允许扩展策略删除分区/副本。在启用缩减活动时，扩展策略中的缩减冷却时间将应用于缩减活动。禁用横向缩减活动将禁止扩展策略删除分区/副本。

**注意**  
横向扩展活动始终处于启用状态，以便扩缩策略可以根据需要创建 ElastiCache 分片/副本。

## 自动扩缩需要的 IAM 权限
<a name="AutoScaling-IAM-permissions"></a>

ElastiCache 对于 Valkey 和 Redis，OSS Auto Scaling 是通过 ElastiCache、 CloudWatch和 Application Auto Scaling 的组合实现的。 APIs使用创建和更新集群 ElastiCache，使用创建警报 CloudWatch，使用Application Auto Scaling创建扩展策略。除了用于创建和更新集群的标准 IAM 权限外，访问 A ElastiCache uto Scaling 设置的 IAM 用户还必须拥有支持动态扩展的服务的相应权限。在这个最新的策略中，我们通过 `elasticache:ModifyCacheCluster` 操作增加了对 Memcached 垂直扩缩的支持。IAM 用户必须具有使用以下示例策略中的操作的权限。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "application-autoscaling:*",
                "elasticache:DescribeReplicationGroups",
                "elasticache:ModifyReplicationGroupShardConfiguration",
                "elasticache:IncreaseReplicaCount",
                "elasticache:DecreaseReplicaCount",
                "elasticache:DescribeCacheClusters",
                "elasticache:DescribeCacheParameters",
                "cloudwatch:DeleteAlarms",
                "cloudwatch:DescribeAlarmHistory",
                "cloudwatch:DescribeAlarms",
                "cloudwatch:DescribeAlarmsForMetric",
                "cloudwatch:GetMetricStatistics",
                "cloudwatch:ListMetrics",
                "cloudwatch:PutMetricAlarm",
                "cloudwatch:DisableAlarmActions",
                "cloudwatch:EnableAlarmActions",
                "iam:CreateServiceLinkedRole",
                "sns:CreateTopic",
                "sns:Subscribe",
                "sns:Get*",
                "sns:List*"
            ],
            "Resource": "arn:aws:iam::123456789012:role/autoscaling-roles-for-cluster"
        }
    ]
}
```

------

## 服务相关角色
<a name="AutoScaling-SLR"></a>

 ElastiCache 适用于 Valkey 和 Redis 的 OSS 自动扩展服务还需要描述您的集群和 CloudWatch 警报的权限，以及代表您修改 ElastiCache 目标容量的权限。如果您为集群启用自动扩缩服务，系统就会创建一个名为 `AWSServiceRoleForApplicationAutoScaling_ElastiCacheRG` 的服务相关角色。此服务相关角色授予 ElastiCache auto Scaling 权限，用于描述策略的警报、监控队列的当前容量以及修改队列的容量。服务相关角色是 a ElastiCache uto Scaling 的默认角色。有关更多信息，请参阅《[Application Auto Scaling 用户指南》中的 Redis OSS 自动扩展的服务关联角色](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-service-linked-roles.html)。 ElastiCache 

## Auto Scaling 最佳实践
<a name="AutoScaling-best-practices"></a>

在注册 Auto Scaling 功能之前，我们建议执行以下操作：

1. **仅使用一个跟踪指标** – 确定您的集群是具有 CPU 密集型工作负载还是数据密集型工作负载，并使用相应的预定义指标来定义扩展策略。
   + 引擎 CPU：`ElastiCachePrimaryEngineCPUUtilization`（分片维度）或 `ElastiCacheReplicaEngineCPUUtilization`（副本维度）
   + 数据库使用情况：`ElastiCacheDatabaseCapacityUsageCountedForEvictPercentage` 此扩展策略在集群上将 maxmemory-policy 设置为 noeviction 时效果最佳。

   我们建议您避免在集群上使用每个维度使用多个策略。 ElastiCache 对于 Valkey 和 Redis，如果任何目标跟踪策略已准备好进行横向扩展，则自动缩放将扩展可扩展的目标，但只有在所有目标跟踪策略（启用缩小部分的情况下）都准备好进行缩减时，才会缩小规模。如果多个策略指示可扩展目标同时横向扩展或缩减，ElastiCache for Redis 会根据为横向缩减和横向扩展提供最大容量的策略进行扩展。

1. **目标跟踪的自定义指标** – 在对目标跟踪使用自定义指标时要谨慎，因为自动扩缩最适合与为策略所选的指标变化成比例的横向扩展/缩减。如果这些指标未随用于策略创建的扩缩操作成比例变化，则可能会导致持续的横向扩展或横向缩减操作，从而可能会影响可用性或成本。

    对于数据分层集群（r6gd 系列实例类型），请避免使用基于内存的指标进行扩缩。

1. **计划扩展** — 如果您确定自己的工作负载是确定性的（ high/low 在特定时间到达），我们建议您使用计划扩展，并根据需要配置目标容量。目标跟踪最适合以通过在您需要更多资源时横向扩展，并在需要较少资源时横向缩减的方式按所需目标指标运行的非确定性工作负载和集群。

1. **禁用 Scale-In** — Target Tracking 上的自动缩放最适合工作负载逐渐增加 increase/decrease 的集群，因为指标 spikes/dip 中可能会触发连续的向外扩展/向内波动。为了避免这种振荡，您可以先禁用横向缩减，之后可以随时根据需要手动横向缩减。

1. **测试您的应用程序**-我们建议您使用估计 Min/Max 的工作负载测试应用程序，以确定集群 shards/replicas 所需的绝对最小值和最大值，同时创建扩展策略以避免可用性问题。Auto Scaling 可以横向扩展至为目标配置的最大阈值，也可以横向缩减至配置的最小阈值。

1. **定义目标值**-您可以分析四周内集群利用率的相应 CloudWatch 指标，以确定目标值阈值。如果您仍然不确定要选择哪个值，我们建议您从支持的最小预定义指标值开始。

1. AutoScaling on Target Tracking 最适合在各个 shards/replicas 维度上均匀分布工作负载的集群。分布不均可能导致：
   + 由于一些热分片/副本的工作 spike/dip 负载，不需要时进行扩展。
   + 因整体平均值接近目标（即使具有热分片/副本）而在需要扩展时不执行扩展。

**注意**  
扩展集群时， ElastiCache 会自动将其中一个现有节点（随机选择）中加载的函数复制到新节点。如果您的集群有 Valkey 或 Redis OSS 7.0 或更高版本，并且您的应用程序使用 [Functions](https://valkey.io/topics/functions-intro/)，我们建议您在横向扩展之前将所有函数加载到所有分片，这样您的集群就不会在不同的分片上有不同的函数。

注册后 AutoScaling，请注意以下几点：
+ Auto Scaling 支持的配置存在限制，因此我们建议不要更改已注册 Auto Scaling 的复制组的配置。示例如下：
  + 手动将实例类型修改为不支持的类型。
  + 将复制组与全局数据存储关联。
  + 更改 `ReservedMemoryPercent` 参数。
  + 在策略创建期间手动配置 increasing/decreasing shards/replicas beyond the Min/Max容量。

# 对分区使用弹性伸缩
<a name="AutoScaling-Using-Shards"></a>

利用 ElastiCache 的自动扩缩，您可以在 Valkey 或 Redis OSS 引擎中使用跟踪策略和计划策略。

下面提供了有关目标跟踪和计划策略以及如何使用 AWS 管理控制台 AWS CLI 和 API 应用它们的详细信息。

**Topics**
+ [目标跟踪扩缩策略](AutoScaling-Scaling-Policies-Target.md)
+ [添加扩展策略](AutoScaling-Scaling-Adding-Policy-Shards.md)
+ [注册可扩展目标](AutoScaling-Scaling-Registering-Policy-CLI.md)
+ [定义扩缩策略](AutoScaling-Scaling-Defining-Policy-API.md)
+ [禁用横向缩减活动](AutoScaling-Scaling-Disabling-Scale-in.md)
+ [应用扩缩策略](AutoScaling-Scaling-Applying-a-Scaling-Policy.md)
+ [编辑扩展策略](AutoScaling-Scaling-Editing-a-Scaling-Policy.md)
+ [删除扩展策略](AutoScaling-Scaling-Deleting-a-Scaling-Policy.md)
+ [将 CloudFormation 用于 Auto Scaling 策略](AutoScaling-with-Cloudformation-Shards.md)
+ [计划扩展](AutoScaling-with-Scheduled-Scaling-Shards.md)

# 目标跟踪扩缩策略
<a name="AutoScaling-Scaling-Policies-Target"></a>

在使用目标跟踪扩展策略时，您可以选择一个指标并设置一个目标值。ElastiCache for Valkey and Redis OSS 自动扩缩可创建和管理触发扩缩策略的 CloudWatch 警报，并根据指标和目标值计算扩缩调整。扩展策略根据需要添加或删除分区，以便将指标保持在指定的目标值或接近该值。除了将指标保持在目标值附近以外，目标跟踪扩展策略还会根据由于负载模式波动而造成的指标波动进行调节，并最大限度减少队列容量发生快速波动的情况。

例如，考虑使用具有已配置了目标值的预定义平均 `ElastiCachePrimaryEngineCPUUtilization` 指标的扩展策略。这种策略可以将 CPU 使用率保持在指定的目标值或接近该值。

## 预定义指标
<a name="AutoScaling-Scaling-Criteria-predfined-metrics"></a>

预定义指标是一种结构，用于指示给定 CloudWatch 指标的特定名称、维度和统计数据（`average`）。自动扩缩策略为您的集群定义下面的预定义指标之一：


****  

| 预定义指标名称 | CloudWatch 指标名称 | CloudWatch 指标维度 | 不符合条件的实例类型  | 
| --- | --- | --- | --- | 
| ElastiCachePrimaryEngineCPUUtilization |  `EngineCPUUtilization`  |  ReplicationGroupId，角色 = 主要  | 无 | 
| ElastiCacheDatabaseCapacityUsageCountedForEvictPercentage |  `DatabaseCapacityUsageCountedForEvictPercentage`  |  Valkey 或 Redis OSS 复制组指标  | 无 | 
| ElastiCacheDatabaseMemoryUsageCountedForEvictPercentage |  `DatabaseMemoryUsageCountedForEvictPercentage`  |  Valkey 或 Redis OSS 复制组指标  | R6gd | 

数据分层实例类型不能使用 `ElastiCacheDatabaseMemoryUsageCountedForEvictPercentage`，因为这些实例类型将数据同时存储在内存和 SSD 中。数据分层实例的预期使用案例是 100% 的内存使用率，并根据需要填满 SSD。

## 分区的弹性伸缩条件
<a name="AutoScaling-Scaling-Criteria"></a>

当服务检测到您的预定义指标等于或大于目标设置时，它会自动提高分片容量。ElastiCache for Valkey and Redis OSS 会按以下两个数字中的较大者来横向扩展集群分片：与目标之间差异的百分比和当前分片数的 20%。对于横向缩减，ElastiCache 不会自动横向缩减，除非整体指标值低于所定义的目标的 75%。

关于横向扩展示例，如果您的分区数为 50，以及
+ 在目标超出了 30% 的情况下，ElastiCache 将横向扩展 30%，最后的结果是每个集群 65 个分片。
+ 在目标超出了 10% 的情况下，ElastiCache 默认横向扩展最低 20%，最后的结果是每个集群 60 个分片。

对横向缩减示例，如果您选择的目标值是 60%，则 ElastiCache 会直到该指标小于或等于 45%（比目标 60% 低 25%）时才会自动横向缩减。

## 弹性伸缩注意事项
<a name="AutoScaling-Scaling-Considerations"></a>

请注意以下事项：
+ 目标跟踪扩展策略假设它应该在指定指标高于目标值时执行向外扩展。因此，不能使用目标跟踪扩展策略在指定指标低于目标值时向外扩展。ElastiCache for Valkey and Redis OSS 会在与集群现有分片目标数之间存在最小 20% 的偏差时横向扩展分片。
+ 当指定指标数据不足时，目标跟踪扩展策略不会执行扩展。它不会执行横向缩减，因为它不会将数据不足解读为使用率低。
+ 您可能会看到目标值与实际指标数据点之间存在差距。这是因为 ElastiCache 自动扩缩在确定要添加或移除多少容量时将始终通过向上或向下舍入保守地进行操作，以免添加的容量不足或删除的容量过多。
+ 为了确保应用程序可用性，服务会针对指标尽快按比例横向扩展，但横向缩减过程相对缓慢。
+ 您可以为 ElastiCache for Valkey and Redis OSS 集群提供多个目标跟踪扩缩策略，前提是每个策略使用不同的指标。ElastiCache 自动扩缩的目的是始终优先考虑可用性，因此其行为会有所不同，具体取决于目标跟踪策略是否已准备好横向扩展或横向缩减。如果任何目标跟踪策略已准备好进行扩展，它将扩展服务，但仅在所有目标跟踪策略（启用了缩减部分）准备好缩减时才执行缩减。
+ 请勿编辑或删除 ElastiCache 自动扩缩为目标跟踪扩缩策略管理的 CloudWatch 警报。在您删除扩缩策略时，ElastiCache 自动扩缩会自动删除警报。
+ ElastiCache 自动扩缩不会阻止您手动修改集群分片。这些手动调整不会影响附加到扩展策略的任何现有 CloudWatch 告警，但可能会影响可触发这些 CloudWatch 告警的指标。
+ 这些由弹性伸缩管理的 CloudWatch 告警是通过集群中所有分区的 AVG 指标来定义的。因此，拥有热分区可能会导致以下任一情况：
  + 因若干热分区上负载触发 CloudWatch 告警而导致在不需要扩展时执行扩展
  + 因所有分区的影响告警的聚合 AVG 指标不违例而在需要扩展时不执行扩展。
+ ElastiCache 对每个集群的节点的默认限制仍然适用。因此，当选择弹性伸缩时，如果您希望最大节点数超过默认限制，请在 [AWS Service Limits](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html) 请求提高限制，并选择限制类型 **Nodes per cluster per instance type**（每个实例类型的集群的节点数）。
+ 请确保您的 VPC 中有足够的 ENI（弹性网络接口）可用，横向扩展过程中需要弹性网络接口。有关更多信息，请参阅[弹性网络接口](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ElasticNetworkInterfaces.html)。
+ 如果 EC2 没有足够的可用容量，则 ElastiCache 自动扩缩将不会扩展，并将延迟到容量可用为止。
+ 在横向缩减期间，ElastiCache for Redis OSS 自动扩缩不会移除以下分片：插槽在序列化后的项目大小大于 256 MB。
+ 在横向缩减期间，如果生成的分区配置中可用的内存不足，则横向缩减不会删除分区。

# 添加扩展策略
<a name="AutoScaling-Scaling-Adding-Policy-Shards"></a>

您可以使用 AWS 管理控制台 添加扩展策略。

**向 ElastiCache for Valkey and Redis OSS 集群添加自动扩缩策略**

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

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

1. 选择您要向其中添加策略的集群（选择集群名称，而不是其左侧的按钮）。

1. 选择 **Auto Scaling policies**（弹性伸缩策略）选项卡。

1. 选择 **add dynamic scaling**（添加动态扩展）。

1. 对于 **Policy name（策略名称）**，输入一个策略名称。

1. 对于 **Scalable Dimension（可扩展维度）**，选择 **shards（分区）**。

1. 对于目标指标，请选择以下选项之一：
   + **Primary CPU Utilization（主 CPU 使用率）**，用于根据平均 CPU 使用率创建策略。
   + **Memory（内存）**，用于根据平均数据库内存创建策略。
   + **容量**，用于根据平均数据库使用量创建策略。“容量”指标包括用于数据分层实例的内存和 SSD 利用率，以及用于所有其他实例类型的内存利用率。

1. 对于目标值，请选择大于或等于 35 且小于或等于 70 的值。自动扩缩将在各 ElastiCache 分片上为选定的目标指标保持该值：
   + **主 CPU 利用率**：在主节点上保持 `EngineCPUUtilization` 指标的目标值。
   + **内存**：保持 `DatabaseMemoryUsageCountedForEvictPercentage` 指标的目标值。
   + **容量**保持 `DatabaseCapacityUsageCountedForEvictPercentage` 指标的目标值。

   将添加或删除集群分区以使指标接近于指定的值。

1. （可选）控制台不支持横向缩减或横向扩展冷却时间。请使用 AWS CLI 修改冷却时间值。

1. 对于**最小容量**，键入 ElastiCache 自动扩缩策略需要保持的最小分片数。

1. 对于**最大容量**，键入 ElastiCache 自动扩缩策略需要保持的最大分片数。此值必须小于或等于 250。

1. 选择**创建**。

# 注册可扩展目标
<a name="AutoScaling-Scaling-Registering-Policy-CLI"></a>

在 ElastiCache for Valkey and Redis OSS 集群上使用自动扩缩之前，您必须先为集群注册 ElastiCache 自动扩缩。这样做是为了定义应用于该集群的扩展维度和限制。ElastiCache 自动扩缩会连同 `elasticache:replication-group:NodeGroups` 可扩展维度一起动态扩缩集群，该维度表示每个集群分片的数量。

 **使用 AWS CLI** 

要注册您的 ElastiCache for Valkey and Redis OSS 集群，请使用具有以下参数的 [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html) 命令：
+ `--service-namespace` – 将该值设置为 `elasticache`
+ `--resource-id` – 集群的资源标识符。对于该参数，资源类型为 `ReplicationGroup`，唯一标识符为集群的名称，例如 `replication-group/myscalablecluster`。
+ `--scalable-dimension` – 将该值设置为 `elasticache:replication-group:NodeGroups`。
+ `--max-capacity ` – 由 ElastiCache 自动扩缩管理的最大分片数。有关 `--min-capacity`、`--max-capacity` 和集群中分区数之间关系的信息，请参阅 [最小和最大容量](AutoScaling-Policies.md#AutoScaling-MinMax)。
+ `--min-capacity ` – 由 ElastiCache 自动扩缩管理的最小分片数。有关 `--min-capacity`、`--max-capacity` 和集群中分区数之间关系的信息，请参阅 [最小和最大容量](AutoScaling-Policies.md#AutoScaling-MinMax)。

**Example**  
 在以下示例中，您注册一个名为 `myscalablecluster` 的 ElastiCache 集群。该注册表示应将集群动态扩展为具有 1 到 10 个分区。  
对于 Linux、macOS 或 Unix：  

```
aws application-autoscaling register-scalable-target \
    --service-namespace elasticache \
    --resource-id replication-group/myscalablecluster \
    --scalable-dimension elasticache:replication-group:NodeGroups \
    --min-capacity 1 \
    --max-capacity 10 \
```
对于 Windows：  

```
aws application-autoscaling register-scalable-target ^
    --service-namespace elasticache ^
    --resource-id replication-group/myscalablecluster ^
    --scalable-dimension elasticache:replication-group:NodeGroups ^
    --min-capacity 1 ^
    --max-capacity 10 ^
```

**使用 API**

要注册您的 ElastiCache 集群，请使用包含下列参数的 [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html) 命令：
+ ServiceNamespace – 将此值设置为 elasticache。
+ ResourceID – ElastiCache 集群的资源标识符。对于该参数，资源类型为 ReplicationGroup，唯一标识符为集群的名称，例如 `replication-group/myscalablecluster`。
+ ScalableDimension – 将此值设置为 `elasticache:replication-group:NodeGroups`。
+ MinCapacity – 由 ElastiCache 自动扩缩管理的最小分片数。有关 --min-capacity、--max-capacity 和集群中副本数之间关系的信息，请参阅 [最小和最大容量](AutoScaling-Policies.md#AutoScaling-MinMax)。
+ MaxCapacity – 由 ElastiCache 自动扩缩管理的最大分片数。有关 --min-capacity、--max-capacity 和集群中副本数之间关系的信息，请参阅 [最小和最大容量](AutoScaling-Policies.md#AutoScaling-MinMax)。

**Example**  
在以下示例中，您使用 Application Auto Scaling API 注册一个名为 `myscalablecluster` 的 ElastiCache 集群。该注册表示应将集群动态扩展为具有 1 到 5 个副本。  

```
POST / HTTP/1.1
Host: autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
Content-Length: 219
X-Amz-Target: AnyScaleFrontendService.RegisterScalableTarget
X-Amz-Date: 20160506T182145Z
User-Agent: aws-cli/1.10.23 Python/2.7.11 Darwin/15.4.0 botocore/1.4.8
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS
{
    "ServiceNamespace": "elasticache",
    "ResourceId": "replication-group/myscalablecluster",
    "ScalableDimension": "elasticache:replication-group:NodeGroups",
    "MinCapacity": 1,
    "MaxCapacity": 5
}
```

# 定义扩缩策略
<a name="AutoScaling-Scaling-Defining-Policy-API"></a>

目标跟踪扩展策略配置是由 JSON 块表示的，其中定义了指标和目标值。您可以在文本文件中将扩展策略配置保存为 JSON 块。在调用 AWS CLI 或 Application Auto Scaling API 时，您可以使用该文本文件。有关策略配置语法的更多信息，请参阅 Application Auto Scaling API 参考中的 [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)。

您可以使用以下选项定义目标跟踪扩缩策略配置：

**Topics**
+ [使用预定义的指标](#AutoScaling-Scaling-Predefined-Metric)
+ [使用自定义指标](#AutoScaling-Scaling-Custom-Metric)
+ [使用冷却时间](#AutoScaling-Scaling-Cooldown-periods)

## 使用预定义的指标
<a name="AutoScaling-Scaling-Predefined-Metric"></a>

通过使用预定义的指标，您可以快速为 ElastiCache for Valkey and Redis OSS 集群定义与 ElastiCache 自动扩缩中的目标跟踪搭配使用的目标跟踪扩缩策略。

目前，ElastiCache 在 NodeGroup 自动扩缩中支持以下预定义指标：
+ **ElastiCachePrimaryEngineCPUUtilization** – 集群中所有主节点在 CloudWatch 中 `EngineCPUUtilization` 指标的平均值。
+ **ElastiCacheDatabaseMemoryUsageCountedForEvictPercentage** – 集群中所有主节点在 CloudWatch 中 `DatabaseMemoryUsageCountedForEvictPercentage` 指标的平均值。
+ **ElastiCacheDatabaseCapacityUsageCountedForEvictPercentage** – 集群中所有主节点在 CloudWatch 中 `ElastiCacheDatabaseCapacityUsageCountedForEvictPercentage` 指标的平均值。

有关 `EngineCPUUtilization`、`DatabaseMemoryUsageCountedForEvictPercentage` 和 `DatabaseCapacityUsageCountedForEvictPercentage` 指标的更多信息，请参阅[使用 CloudWatch 指标监控使用情况](CacheMetrics.md)。要在扩展策略中使用预定义的指标，您需要为扩展策略创建一个目标跟踪配置。该配置必须包含 `PredefinedMetricSpecification` 以表示预定义的指标，并包含 TargetValue 以表示该指标的目标值。

**Example**  
以下示例说明了 ElastiCache for Valkey and Redis OSS 集群的典型目标跟踪扩缩策略配置。在该配置中，`ElastiCachePrimaryEngineCPUUtilization` 预定义指标用于根据集群中所有主节点的平均 CPU 使用率（40%）来调整该集群。  

```
{
    "TargetValue": 40.0,
    "PredefinedMetricSpecification":
    {
        "PredefinedMetricType": "ElastiCachePrimaryEngineCPUUtilization"
    }
}
```

## 使用自定义指标
<a name="AutoScaling-Scaling-Custom-Metric"></a>

 通过使用自定义指标，您可以定义满足您的自定义要求的目标跟踪扩展策略。您可以根据随扩展按比例变化的任何 ElastiCache 指标来定义自定义指标。并非所有 Elasticache 指标都适用于目标跟踪。指标必须是有效的使用率指标，它用于描述实例的繁忙程度。指标值必须随集群中分区数按比例增加或减少。要使用指标数据按比例横向扩展或缩减分区数，必须按比例进行这种增加或减少。

**Example**  
以下示例说明了扩缩策略的目标跟踪配置。在该配置中，一个自定义指标根据名为 `my-db-cluster` 的集群中所有分片的平均 CPU 使用率（50%）调整 ElastiCache for Redis OSS 集群。

```
{
    "TargetValue": 50,
    "CustomizedMetricSpecification":
    {
        "MetricName": "EngineCPUUtilization",
        "Namespace": "AWS/ElastiCache",
        "Dimensions": [
            {
                "Name": "ReplicationGroup","Value": "my-db-cluster"
            },
            {
                "Name": "Role","Value": "PRIMARY"
            }
        ],
        "Statistic": "Average",
        "Unit": "Percent"
    }
}
```

## 使用冷却时间
<a name="AutoScaling-Scaling-Cooldown-periods"></a>

您可以为 `ScaleOutCooldown` 指定一个值（秒）以添加横向扩展集群的冷却时间。同样，您可以为 `ScaleInCooldown` 添加一个值（秒）以添加横向缩减集群的冷却时间。有关更多信息，请参阅 Application Auto Scaling API 参考中的 [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)。

 以下示例说明了扩缩策略的目标跟踪配置。在该配置中，`ElastiCachePrimaryEngineCPUUtilization` 预定义指标用于根据该集群中所有主节点的平均 CPU 使用率（40%）调整 ElastiCache for Redis OSS 集群。该配置将缩减冷却时间指定为 10 分钟，并将扩展冷却时间指定为 5 分钟。

```
{
    "TargetValue": 40.0,
    "PredefinedMetricSpecification":
    {
        "PredefinedMetricType": "ElastiCachePrimaryEngineCPUUtilization"
    },
    "ScaleInCooldown": 600,
    "ScaleOutCooldown": 300
}
```

# 禁用横向缩减活动
<a name="AutoScaling-Scaling-Disabling-Scale-in"></a>

您可以禁用横向缩减活动，以阻止目标跟踪扩缩策略配置对您的集群进行横向缩减。禁用横向缩减活动将禁止扩展策略删除分区，同时仍允许扩展策略根据需要创建分区。

您可以为 `DisableScaleIn` 指定一个布尔值，以便为集群启用或禁用横向缩减活动。有关更多信息，请参阅 Application Auto Scaling API 参考中的 [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)。

以下示例说明了扩缩策略的目标跟踪配置。在该配置中，`ElastiCachePrimaryEngineCPUUtilization` 预定义指标用于根据 ElastiCache for Valkey and Redis OSS 集群中所有主节点的平均 CPU 使用率（40%）来调整该集群。该配置禁用扩缩策略的横向缩减活动。

```
{
    "TargetValue": 40.0,
    "PredefinedMetricSpecification":
    {
        "PredefinedMetricType": "ElastiCachePrimaryEngineCPUUtilization"
    },
    "DisableScaleIn": true
}
```

# 应用扩缩策略
<a name="AutoScaling-Scaling-Applying-a-Scaling-Policy"></a>

在为集群注册 ElastiCache for Valkey and Redis OSS 自动扩缩并定义扩缩策略后，您可以将扩缩策略应用于已注册的集群。要将扩缩策略应用于 ElastiCache for Redis OSS 集群，您可以使用 AWS CLI 或 Application Auto Scaling API。

## 使用 AWS CLI 应用扩展策略
<a name="AutoScaling-Scaling-Applying-a-Scaling-Policy-CLI"></a>

要将扩缩策略应用于 ElastiCache for Valkey and Redis OSS 集群，请使用具有以下参数的 [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html) 命令：
+ **--policy-name** – 扩展策略的名称。
+ **--policy-type** – 将此值设置为 `TargetTrackingScaling`。
+ **--resource-id** – 资源标识符。对于该参数，资源类型为 `ReplicationGroup`，唯一标识符为集群的名称，例如 `replication-group/myscalablecluster`。
+ **--service-namespace** – 将此值设置为 `elasticache`。
+ **--scalable-dimension** – 将此值设置为 `elasticache:replication-group:NodeGroups`。
+ **--target-tracking-scaling-policy-configuration** – 用于集群的目标跟踪扩缩策略配置。

在以下示例中，您使用 ElastiCache 自动扩缩对名为 `myscalablecluster` 的 ElastiCache for Valkey and Redis OSS 集群应用名为 `myscalablepolicy` 的目标跟踪扩缩策略。为此，请使用在名为 `config.json` 的文件中保存的策略配置。

对于 Linux、macOS 或 Unix：

```
aws application-autoscaling put-scaling-policy \
    --policy-name myscalablepolicy \
    --policy-type TargetTrackingScaling \
    --resource-id replication-group/myscalablecluster \
    --service-namespace elasticache \
    --scalable-dimension elasticache:replication-group:NodeGroups \
    --target-tracking-scaling-policy-configuration file://config.json
```

对于 Windows：

```
aws application-autoscaling put-scaling-policy ^
    --policy-name myscalablepolicy ^
    --policy-type TargetTrackingScaling ^
    --resource-id replication-group/myscalablecluster ^
    --service-namespace elasticache ^
    --scalable-dimension elasticache:replication-group:NodeGroups ^
    --target-tracking-scaling-policy-configuration file://config.json
```

## 使用 API 应用扩展策略
<a name="AutoScaling-Scaling-Applying-a-Scaling-Policy-API"></a>

要将扩缩策略应用于 ElastiCache for Valkey and Redis OSS 集群，请使用具有以下参数的 [PutScalingPolicy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html) AWS CLI 命令：
+ **--policy-name** – 扩展策略的名称。
+ **--resource-id** – 资源标识符。对于该参数，资源类型为 `ReplicationGroup`，唯一标识符为集群的名称，例如 `replication-group/myscalablecluster`。
+ **--service-namespace** – 将此值设置为 `elasticache`。
+ **--scalable-dimension** – 将此值设置为 `elasticache:replication-group:NodeGroups`。
+ **--target-tracking-scaling-policy-configuration** – 用于集群的目标跟踪扩缩策略配置。

在以下示例中，您使用 ElastiCache 自动扩缩对名为 `myscalablecluster` 的 ElastiCache 集群应用名为 `myscalablepolicy` 的目标跟踪扩缩策略。您使用的策略配置基于 `ElastiCachePrimaryEngineCPUUtilization` 预定义指标。

```
POST / HTTP/1.1
Host: autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
Content-Length: 219
X-Amz-Target: AnyScaleFrontendService.PutScalingPolicy
X-Amz-Date: 20160506T182145Z
User-Agent: aws-cli/1.10.23 Python/2.7.11 Darwin/15.4.0 botocore/1.4.8
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS
{
    "PolicyName": "myscalablepolicy",
    "ServiceNamespace": "elasticache",
    "ResourceId": "replication-group/myscalablecluster",
    "ScalableDimension": "elasticache:replication-group:NodeGroups",
    "PolicyType": "TargetTrackingScaling",
    "TargetTrackingScalingPolicyConfiguration": {
        "TargetValue": 40.0,
        "PredefinedMetricSpecification":
        {
            "PredefinedMetricType": "ElastiCachePrimaryEngineCPUUtilization"
        }
    }
}
```

# 编辑扩展策略
<a name="AutoScaling-Scaling-Editing-a-Scaling-Policy"></a>

您可以使用 AWS 管理控制台、AWS CLI 或 Application Auto Scaling API 编辑扩缩策略。

## 使用 AWS 管理控制台编辑扩展策略
<a name="AutoScaling-Scaling-Editing-a-Scaling-Policy-CON"></a>

**编辑 ElastiCache for Valkey and Redis OSS 集群的自动扩缩策略**

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

1. 在导航窗格中，选择相应的引擎。

1. 选择您要向其中添加策略的集群（选择集群名称，而不是其左侧的按钮）。

1. 选择 **Auto Scaling policies**（弹性伸缩策略）选项卡。

1. 在 **Scaling policies**（扩展策略）下，选择要更改的 Auto Scaling 策略左侧的按钮，然后选择 **Modify**（修改）。

1. 对该策略做出必要更改。

1. 选择**修改**。

## 使用 AWS CLI 或 API 编辑扩展策略
<a name="AutoScaling-Scaling-Editing-a-Scaling-Policy-CLI"></a>

您可以使用 AWS CLI 或 Application Auto Scaling API 按照与应用扩缩策略相同的方式编辑扩缩策略：
+ 在使用 AWS CLI 时，请在 `--policy-name` 参数中指定要编辑的策略名称。为要更改的参数指定新的值。
+ 在使用 Application Auto Scaling API 时，请在 `PolicyName` 参数中指定要编辑的策略名称。为要更改的参数指定新的值。

有关更多信息，请参阅 [应用扩缩策略](AutoScaling-Scaling-Applying-a-Scaling-Policy.md)。

# 删除扩展策略
<a name="AutoScaling-Scaling-Deleting-a-Scaling-Policy"></a>

您可以使用AWS 管理控制台、AWS CLI 或 Application Auto Scaling API 删除扩缩策略。

## 使用 AWS 管理控制台删除扩展策略
<a name="AutoScaling-Scaling-Editing-a-Scaling-Policy-CON"></a>

**删除 ElastiCache for Redis OSS 集群的自动扩缩策略**

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

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

1. 选择要编辑其 Auto Scaling 策略的集群（选择集群名称，而不是其左侧的按钮）。

1. 选择 **Auto Scaling policies**（弹性伸缩策略）选项卡。

1. 在 **Scaling policies**（扩展策略）下，选择 Auto Scaling 策略，然后选择 **Delete**（删除）。

## 使用 AWS CLI删除扩展策略
<a name="AutoScaling-Scaling-Deleting-a-Scaling-Policy-CLI"></a>

要删除 ElastiCache for Valkey and Redis OSS 集群的扩缩策略，请使用具有以下参数的 [delete-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/delete-scaling-policy.html) AWS CLI 命令：
+ **--policy-name** – 扩展策略的名称。
+ **--resource-id** – 资源标识符。对于该参数，资源类型为 `ReplicationGroup`，唯一标识符为集群的名称，例如 `replication-group/myscalablecluster`。
+ **--service-namespace** – 将此值设置为 `elasticache`。
+ **--scalable-dimension** – 将此值设置为 `elasticache:replication-group:NodeGroups`。

在以下示例中，您将从名为 `myscalablepolicy` 的集群中删除名为 `myscalablecluster` 的目标跟踪扩缩策略。

对于 Linux、macOS 或 Unix：

```
aws application-autoscaling delete-scaling-policy \
    --policy-name myscalablepolicy \
    --resource-id replication-group/myscalablecluster \
    --service-namespace elasticache \
    --scalable-dimension elasticache:replication-group:NodeGroups
```

对于 Windows：

```
aws application-autoscaling delete-scaling-policy ^
    --policy-name myscalablepolicy ^
    --resource-id replication-group/myscalablecluster ^
    --service-namespace elasticache ^
    --scalable-dimension elasticache:replication-group:NodeGroups
```

## 使用 API 删除扩展策略
<a name="AutoScaling-Scaling-Deleting-a-Scaling-Policy-API"></a>

要删除 ElastiCache for Valkey and Redis OSS 集群的扩缩策略，请使用具有以下参数的 [DeleteScalingPolicy](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/delete-scaling-policy.html) AWS CLI 命令：
+ **--policy-name** – 扩展策略的名称。
+ **--resource-id** – 资源标识符。对于该参数，资源类型为 `ReplicationGroup`，唯一标识符为集群的名称，例如 `replication-group/myscalablecluster`。
+ **--service-namespace** – 将此值设置为 `elasticache`。
+ **--scalable-dimension** – 将此值设置为 `elasticache:replication-group:NodeGroups`。

在以下示例中，您将从名为 `myscalablepolicy` 的集群中删除名为 `myscalablecluster` 的目标跟踪扩缩策略。

```
POST / HTTP/1.1
Host: autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
Content-Length: 219
X-Amz-Target: AnyScaleFrontendService.DeleteScalingPolicy
X-Amz-Date: 20160506T182145Z
User-Agent: aws-cli/1.10.23 Python/2.7.11 Darwin/15.4.0 botocore/1.4.8
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS
{
    "PolicyName": "myscalablepolicy",
    "ServiceNamespace": "elasticache",
    "ResourceId": "replication-group/myscalablecluster",
    "ScalableDimension": "elasticache:replication-group:NodeGroups"
}
```

# 将 CloudFormation 用于 Auto Scaling 策略
<a name="AutoScaling-with-Cloudformation-Shards"></a>

此代码段演示如何使用 [AWS::ApplicationAutoScaling::ScalableTarget](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalabletarget.html) 资源创建目标跟踪策略并将其应用于 [AWS::ElastiCache::ReplicationGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html) 资源。此示例利用 [Fn::Join](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-join.html) 和 [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) 内置函数，使用在同一模板中指定的 `AWS::ElastiCache::ReplicationGroup` 资源的逻辑名称来构建 `ResourceId` 属性。

```
ScalingTarget:
   Type: 'AWS::ApplicationAutoScaling::ScalableTarget'
   Properties:
     MaxCapacity: 3
     MinCapacity: 1
     ResourceId: !Sub replication-group/${logicalName}
     ScalableDimension: 'elasticache:replication-group:NodeGroups'
     ServiceNamespace: elasticache
     RoleARN: !Sub "arn:aws:iam::${AWS::AccountId}:role/aws-service-role/elasticache.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_ElastiCacheRG"

  ScalingPolicy:
    Type: "AWS::ApplicationAutoScaling::ScalingPolicy"
    Properties:
      ScalingTargetId: !Ref ScalingTarget
      ServiceNamespace: elasticache
      PolicyName: testpolicy
      PolicyType: TargetTrackingScaling
      ScalableDimension: 'elasticache:replication-group:NodeGroups'
      TargetTrackingScalingPolicyConfiguration:
        PredefinedMetricSpecification:
          PredefinedMetricType: ElastiCachePrimaryEngineCPUUtilization
        TargetValue: 40
```

# 计划扩展
<a name="AutoScaling-with-Scheduled-Scaling-Shards"></a>

按计划扩展使您可以按照可预测的需求变化来扩展应用程序。要使用计划扩缩，您需要创建计划操作，用于告知 ElastiCache for Valkey and Redis OSS 在特定时间执行扩缩活动。创建计划操作时，您需要指定现有集群、执行扩缩活动的时间、最小容量和最大容量。您可以创建仅扩展一次或按重复计划扩展的计划操作。

 您只能为已存在的集群创建计划操作。您不能在创建集群的同时创建计划操作。

有关计划操作创建、管理和删除的相关术语的详细信息，请参阅[计划操作创建、管理和删除的常用命令](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-scheduled-scaling.html#scheduled-scaling-commonly-used-commands) 

**创建定期计划：**

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

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

1. 选择要对其添加策略的集群。

1. 从 **Actions**（操作）下拉菜单中选择 **Manage Auto Scaling policies**（管理弹性伸缩策略）。

1. 选择 **Auto Scaling policies（Auto Scaling 策略）**选项卡。

1. **Auto scaling policies**（弹性伸缩策略）部分中会显示 **Add Scaling policy**（添加扩缩策略）对话框。选择 **Scheduled scaling（计划扩展）**。

1. 对于 **Policy name（策略名称）**，请输入策略的名称。

1. 对于 **Scalable Dimension（可扩展维度）**，选择 **Shards（分区）**。

1. 对于 **Target Shards（目标分区）**，请选择值。

1. 对于 **Recurrence（重复）**，请选择 **Recurring（定期）**。

1. 对于 **Frequency（频率）**，请选择相应的值。

1. 对于 **Start Date（开始日期）**和 **Start time（开始时间）**，请选择策略开始生效的时间。

1. 选择 **Add Policy（添加策略）**。

**创建一次性计划操作：**

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

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

1. 选择要对其添加策略的集群。

1. 从 **Actions**（操作）下拉菜单中选择 **Manage Auto Scaling policies**（管理弹性伸缩策略）。

1. 选择 **Auto Scaling policies（Auto Scaling 策略）**选项卡。

1. **Auto scaling policies**（弹性伸缩策略）部分中会显示 **Add Scaling policy**（添加扩缩策略）对话框。选择 **Scheduled scaling（计划扩展）**。

1. 对于 **Policy name（策略名称）**，请输入策略的名称。

1. 对于 **Scalable Dimension（可扩展维度）**，选择 **Shards（分区）**。

1. 对于 **Target Shards（目标分区）**，请选择值。

1. 对于 **Recurrence（重复）**，请选择 **Once（一次）**。

1. 对于 **Start Date（开始日期）**和 **Start time（开始时间）**，请选择策略开始生效的时间。

1. 对于 **End Date（结束日期）**，请选择策略生效结束日期。

1. 选择 **Add Policy（添加策略）**。

**删除计划操作**

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

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

1. 选择要对其添加策略的集群。

1. 从 **Actions**（操作）下拉菜单中选择 **Manage Auto Scaling policies**（管理弹性伸缩策略）。

1. 选择 **Auto Scaling policies（Auto Scaling 策略）**选项卡。

1. 在 **Auto Scaling policies**（弹性伸缩策略）部分，选择弹性伸缩策略，然后从 **Actions**（操作）对话中选择 **Delete（删除）**。

**使用 AWS CLI 管理计划扩展**

使用以下 application-autoscaling API：
+ [put-scheduled-action](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/put-scheduled-action.html) 
+ [describe-scheduled-actions](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/describe-scheduled-actions.html) 
+ [delete-scheduled-action](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/delete-scheduled-action.html) 

## 使用 CloudFormation 创建计划的操作
<a name="AutoScaling-with-Cloudformation-Declare-Scheduled-Action"></a>

此代码段演示如何使用 [AWS::ApplicationAutoScaling::ScalableTarget](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalabletarget.html) 资源创建目标跟踪策略并将其应用于 [AWS::ElastiCache::ReplicationGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html) 资源。此示例利用 [Fn::Join](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-join.html) 和 [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) 内置函数，使用在同一模板中指定的 `AWS::ElastiCache::ReplicationGroup` 资源的逻辑名称来构建 `ResourceId` 属性。

```
ScalingTarget:
   Type: 'AWS::ApplicationAutoScaling::ScalableTarget'
   Properties:
     MaxCapacity: 3
     MinCapacity: 1
     ResourceId: !Sub replication-group/${logicalName}
     ScalableDimension: 'elasticache:replication-group:NodeGroups'
     ServiceNamespace: elasticache
     RoleARN: !Sub "arn:aws:iam::${AWS::AccountId}:role/aws-service-role/elasticache.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_ElastiCacheRG"
     ScheduledActions:
       - EndTime: '2020-12-31T12:00:00.000Z'
         ScalableTargetAction:
           MaxCapacity: '5'
           MinCapacity: '2'
         ScheduledActionName: First
         Schedule: 'cron(0 18 * * ? *)'
```

# 将弹性伸缩与副本结合使用
<a name="AutoScaling-Using-Replicas"></a>

ElastiCache 复制组可以将一个或多个缓存设置为单个逻辑节点。

下面提供了有关目标跟踪和计划策略以及如何使用 AWS 管理控制台 AWS CLI 和 API 应用它们的详细信息。

# 目标跟踪扩缩策略
<a name="AutoScaling-Scaling-Policies-Replicas-Replicas"></a>

在使用目标跟踪扩展策略时，您可以选择一个指标并设置一个目标值。ElastiCache for Valkey and Redis OSS 自动扩缩可创建和管理触发扩缩策略的 CloudWatch 警报，并根据指标和目标值计算扩缩调整。扩展策略根据需要均匀地添加或删除所有分区的副本，以便将指标保持在指定的目标值或接近该值。除了将指标保持在目标值附近以外，目标跟踪扩展策略还会根据由于负载模式波动而造成的指标波动进行调节，并最大限度减少队列容量发生快速波动的情况。

## 副本的弹性伸缩条件
<a name="AutoScaling-Scaling-Criteria-Replicas"></a>

弹性伸缩策略为您的集群定义以下预定义指标：

`ElastiCacheReplicaEngineCPUUtilization`：ElastiCache 用来触发自动扩缩操作的所有副本的引擎 CPU 平均使用率阈值。您可以将此使用率目标设置为 35% 到 70% 之间。

当服务检测到 `ElastiCacheReplicaEngineCPUUtilization` 指标等于或大于“目标”设置时，其会自动提高所有分区的副本。ElastiCache 按等于以下两个数字之间较大者的计数来横向扩展集群副本：与目标之间差异的百分比和 1 个副本。对于横向缩减，ElastiCache 不会自动横向缩减，除非整体指标值低于所定义的目标的 75%。

关于横向扩展示例，如果您有 5 个分区，每个分区中有 1 个副本：

如果目标超出 30%，ElastiCache for Valkey 和 ElastiCache for Redis OSS 将在所有分片上横向扩展 1 个副本（max(0.3, default 1)），最后的结果是有 5 个分片，每个分片包含 2 个副本。

对于横向缩减示例，如果您选择的目标值是 60%，那么 ElastiCache for Valkey and Redis OSS 将在指标小于或等于 45%（比目标值 60% 低 25%）时开始自动横向缩减。

### 弹性伸缩注意事项
<a name="AutoScaling-Scaling-Considerations-Replicas"></a>

请注意以下事项：
+ 目标跟踪扩展策略假设它应该在指定指标高于目标值时执行向外扩展。因此，不能使用目标跟踪扩展策略在指定指标低于目标值时向外扩展。ElastiCache for Valkey and Redis OSS 会根据集群中所有分片上现有副本的最大值（偏离目标的偏差经四舍五入的百分比，默认为 1）来横向扩展副本。
+ 当指定指标数据不足时，目标跟踪扩展策略不会执行扩展。它不会执行向内扩展，因为它不会将数据不足解读为使用率低。
+ 您可能会看到目标值与实际指标数据点之间存在差距。这是因为 ElastiCache 自动扩缩在确定要添加或移除多少容量时将始终通过向上或向下舍入保守地进行操作，以免添加的容量不足或删除的容量过多。
+ 为了确保应用程序可用性，服务会针对指标尽快按比例横向扩展，但渐进式横向缩减，集群中所有分区的最大横向缩减副本数为 1。
+ 您可以为 ElastiCache for Valkey and Redis OSS 集群提供多个目标跟踪扩缩策略，前提是每个策略使用不同的指标。自动扩缩的目的是始终优先考虑可用性，因此其行为会有所不同，具体取决于目标跟踪策略是否已准备好横向扩展或横向缩减。如果任何目标跟踪策略已准备好进行扩展，它将扩展服务，但仅在所有目标跟踪策略（启用了缩减部分）准备好缩减时才执行缩减。
+ 请勿编辑或删除 ElastiCache 自动扩缩为目标跟踪扩缩策略管理的 CloudWatch 警报。在您删除扩缩策略或删除集群时，自动扩缩会自动删除警报。
+ ElastiCache 自动扩缩不会阻止您手动修改分片中的副本。这些手动调整不会影响附加到扩展策略的任何现有 CloudWatch 告警，但可能会影响可触发这些 CloudWatch 告警的指标。
+ 这些由弹性伸缩管理的 CloudWatch 告警是通过集群中所有分区的 AVG 指标来定义的。因此，拥有热分区可能会导致以下任一情况：
  + 因若干热分区上负载触发 CloudWatch 告警而导致在不需要扩展时执行扩展
  + 因所有分区的影响告警的聚合 AVG 指标不违例而在需要扩展时不执行扩展。
+ ElastiCache 对每个集群的节点的默认限制仍然适用。因此，当选择弹性伸缩时，如果您希望最大节点数超过默认限制，请在 [AWS Service Limits](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html) 请求提高限制，并选择限制类型 **Nodes per cluster per instance type**（每个实例类型的集群的节点数）。
+ 请确保您的 VPC 中有足够的 ENI（弹性网络接口）可用，横向扩展过程中需要弹性网络接口。有关更多信息，请参阅[弹性网络接口](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ElasticNetworkInterfaces.html)。
+ 如果 EC2 没有足够的可用容量，则 ElastiCache 自动扩缩会直到容量可用或您手动将集群修改为具有足够容量的实例类型才会横向扩展。
+ ElastiCache 自动扩缩不支持扩缩集群 `ReservedMemoryPercent` 低于 25% 的副本。有关更多信息，请参阅 [管理 Valkey 和 Redis OSS 的预留内存](redis-memory-management.md)。

# 添加扩展策略
<a name="AutoScaling-Adding-Policy-Replicas"></a>

您可以使用 AWS 管理控制台 添加扩展策略。

**使用 AWS 管理控制台添加扩展策略**

向 ElastiCache for Valkey and Redis OSS 添加自动扩缩策略

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

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

1. 选择您要向其中添加策略的集群（选择集群名称，而不是其左侧的按钮）。

1. 选择 **Auto Scaling policies**（弹性伸缩策略）选项卡。

1. 选择 **add dynamic scaling**（添加动态扩展）。

1. 在 **Scaling policies**（扩展策略）下，选择 **Add dynamic scaling**（添加动态扩展）。

1. 对于 **Policy name（策略名称）**，请输入策略的名称。

1. 对于 **Scalable Dimension（可扩展维度）**，从对话框中选择 **Replicas（副本）**。

1. 对于目标值，请键入要在 ElastiCache 副本上保持的 CPU 使用率的平均百分比。此值必须介于 35 到 70 之间。将添加或删除集群副本以使指标接近于指定的值。

1. （可选）控制台不支持横向缩减或横向扩展冷却时间。请使用 AWS CLI 修改冷却时间值。

1. 对于**最小容量**，请键入 ElastiCache 自动扩缩策略需要保持的最小副本数。

1. 对于**最大容量**，请键入 ElastiCache 自动扩缩策略需要保持的最大副本数。此值必须大于或等于 5。

1. 选择**创建**。

# 注册可扩展目标
<a name="AutoScaling-Register-Policy"></a>

您可以应用基于预定义或自定义指标的扩展策略。为此，您可以使用 AWS CLI 或 Application Auto Scaling API。第一步是为 ElastiCache for Valkey and Redis OSS 复制组注册自动扩缩。

在集群上使用 ElastiCache 自动扩缩之前，您必须先为集群注册 ElastiCache 自动扩缩。这样做是为了定义应用于该集群的扩展维度和限制。ElastiCache 自动扩缩会连同 `elasticache:replication-group:Replicas` 可扩缩维度一起动态扩缩集群，该维度表示每个分片的集群副本数量。

**使用 CLI**：

要注册您的 ElastiCache 集群，请使用包含下列参数的 [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html) 命令：
+ --service-namespace – 将此值设置为 elasticache。
+ --resource-id – ElastiCache 集群的资源标识符。对于该参数，资源类型为 ReplicationGroup，唯一标识符为集群的名称，例如 `replication-group/myscalablecluster`。
+ --scalable-dimension – 将此值设置为 `elasticache:replication-group:Replicas`。
+ --min-capacity – 由 ElastiCache 自动扩缩管理的最小副本数。有关 --min-capacity、--max-capacity 和集群中副本数之间关系的信息，请参阅 [最小和最大容量](AutoScaling-Policies.md#AutoScaling-MinMax)。
+ --max-capacity – 由 ElastiCache 自动扩缩管理的最大副本数。有关 --min-capacity、--max-capacity 和集群中副本数之间关系的信息，请参阅 [最小和最大容量](AutoScaling-Policies.md#AutoScaling-MinMax)。

**Example**  
在以下示例中，您注册一个名为 `myscalablecluster` 的 ElastiCache 集群。该注册表示应将集群动态扩展为具有 1 到 5 个副本。  
对于 Linux、macOS 或 Unix：  

```
aws application-autoscaling register-scalable-target \
    --service-namespace elasticache \
    --resource-id replication-group/myscalablecluster \
    --scalable-dimension elasticache:replication-group:Replicas \
    --min-capacity 1 \
    --max-capacity 5 \
```
对于 Windows：  

```
aws application-autoscaling register-scalable-target ^
    --service-namespace elasticache ^
    --resource-id replication-group/myscalablecluster ^
    --scalable-dimension elasticache:replication-group:Replicas ^
    --min-capacity 1 ^
    --max-capacity 5 ^
```

**使用 API**

要注册您的 ElastiCache 集群，请使用包含下列参数的 [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html) 命令：
+ ServiceNamespace – 将此值设置为 elasticache。
+ ResourceID – ElastiCache 集群的资源标识符。对于该参数，资源类型为 ReplicationGroup，唯一标识符为集群的名称，例如 `replication-group/myscalablecluster`。
+ ScalableDimension – 将此值设置为 `elasticache:replication-group:Replicas`。
+ MinCapacity – 由 ElastiCache 自动扩缩管理的最小副本数。有关 --min-capacity、--max-capacity 和集群中副本数之间关系的信息，请参阅 [最小和最大容量](AutoScaling-Policies.md#AutoScaling-MinMax)。
+ MaxCapacity – 由 ElastiCache 自动扩缩管理的最大副本数。有关 --min-capacity、--max-capacity 和集群中副本数之间关系的信息，请参阅 [最小和最大容量](AutoScaling-Policies.md#AutoScaling-MinMax)。

**Example**  
在以下示例中，您使用 Application Auto Scaling API 注册了一个名为 `myscalablecluster` 的集群。该注册表示应将集群动态扩展为具有 1 到 5 个副本。

```
POST / HTTP/1.1
Host: autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
Content-Length: 219
X-Amz-Target: AnyScaleFrontendService.RegisterScalableTarget
X-Amz-Date: 20160506T182145Z
User-Agent: aws-cli/1.10.23 Python/2.7.11 Darwin/15.4.0 botocore/1.4.8
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS
{
    "ServiceNamespace": "elasticache",
    "ResourceId": "replication-group/myscalablecluster",
    "ScalableDimension": "elasticache:replication-group:Replicas",
    "MinCapacity": 1,
    "MaxCapacity": 5
}
```

# 定义扩缩策略
<a name="AutoScaling-Defining-Policy"></a>

目标跟踪扩展策略配置是由 JSON 块表示的，其中定义了指标和目标值。您可以在文本文件中将扩展策略配置保存为 JSON 块。在调用 AWS CLI 或 Application Auto Scaling API 时，您可以使用该文本文件。有关策略配置语法的更多信息，请参阅 *Application Auto Scaling API 参考*中的 [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/ApplicationAutoScaling/latest/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)。

您可以使用以下选项定义目标跟踪扩缩策略配置：

**Topics**
+ [使用预定义的指标](#AutoScaling-Predefined-Metric)
+ [编辑扩展策略](AutoScaling-Editing-Policy.md)
+ [删除扩展策略](AutoScaling-Deleting-Policy.md)
+ [将 CloudFormation 用于 Auto Scaling 策略](AutoScaling-with-Cloudformation.md)
+ [计划扩展](AutoScaling-with-Scheduled-Scaling-Replicas.md)

## 使用预定义的指标
<a name="AutoScaling-Predefined-Metric"></a>

目标跟踪扩展策略配置是由 JSON 块表示的，其中定义了指标和目标值。您可以在文本文件中将扩展策略配置保存为 JSON 块。在调用 AWS CLI 或 Application Auto Scaling API 时，您可以使用该文本文件。有关策略配置语法的更多信息，请参阅 *Application Auto Scaling API 参考*中的 [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/ApplicationAutoScaling/latest/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)。

您可以使用以下选项定义目标跟踪扩缩策略配置：

**Topics**
+ [使用预定义的指标](#AutoScaling-Predefined-Metric)
+ [使用自定义指标](#AutoScaling-Custom-Metric)
+ [使用冷却时间](#AutoScaling-Using-Cooldowns)
+ [禁用横向缩减活动](#AutoScaling-Disabling-Scalein)
+ [向 ElastiCache for Valkey and Redis OSS 集群应用扩缩策略](#AutoScaling-Applying-Policy)

### 使用预定义的指标
<a name="AutoScaling-Predefined-Metric"></a>

通过使用预定义的指标，您可以快速为 ElastiCache for Valkey and Redis OSS 集群定义与 ElastiCache 自动扩缩中的目标跟踪搭配使用的目标跟踪扩缩策略。目前，ElastiCache 支持 ElastiCache 副本自动扩缩中的以下预定义指标：

`ElastiCacheReplicaEngineCPUUtilization` – 集群中所有副本在 CloudWatch 中的 EngineCPUUtilization 指标的平均值。您可以在 CloudWatch 中在 ElastiCache `ReplicationGroupId, Role` 下找到聚合指标值，获得所需的 ReplicationGroupId 和角色副本。

要在扩展策略中使用预定义的指标，您需要为扩展策略创建一个目标跟踪配置。该配置必须包含 `PredefinedMetricSpecification` 以表示预定义的指标，并包含 `TargetValue` 以表示该指标的目标值。

### 使用自定义指标
<a name="AutoScaling-Custom-Metric"></a>

通过使用自定义指标，您可以定义满足您的自定义要求的目标跟踪扩展策略。您可以根据随扩缩按比例变化的任何 ElastiCache for Valkey and Redis OSS 指标来定义自定义指标。并非所有 Elasticache 指标都适用于目标跟踪。指标必须是有效的使用率指标，它用于描述实例的繁忙程度。指标值必须随集群中的副本数按比例增加或减少。要使用指标数据按比例增加或减少副本数，必须按比例进行这种增加或减少。

**Example**  
以下示例说明了扩缩策略的目标跟踪配置。在该配置中，自定义指标根据名为 `my-db-cluster` 的集群中所有副本的平均 CPU 使用率（50%）来调整该集群。  

```
{"TargetValue": 50,
    "CustomizedMetricSpecification":
    {"MetricName": "EngineCPUUtilization",
        "Namespace": "AWS/ElastiCache",
        "Dimensions": [
            {"Name": "ReplicationGroup","Value": "my-db-cluster"},
            {"Name": "Role","Value": "REPLICA"}
        ],
        "Statistic": "Average",
        "Unit": "Percent"
    }
}
```

### 使用冷却时间
<a name="AutoScaling-Using-Cooldowns"></a>

您可以为 `ScaleOutCooldown` 指定一个值（秒）以添加横向扩展集群的冷却时间。同样，您可以为 `ScaleInCooldown` 添加一个值（秒）以添加横向缩减集群的冷却时间。有关 `ScaleInCooldown` 和 `ScaleOutCooldown` 的更多信息，请参阅 *Application Auto Scaling API 参考*中的 [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/ApplicationAutoScaling/latest/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)。以下示例说明了扩缩策略的目标跟踪配置。在该配置中，`ElastiCacheReplicaEngineCPUUtilization` 预定义指标用于根据集群中所有副本的平均 CPU 使用率（40%）来调整该集群。该配置将缩减冷却时间指定为 10 分钟，并将扩展冷却时间指定为 5 分钟。

```
{"TargetValue": 40.0,
    "PredefinedMetricSpecification":
    {"PredefinedMetricType": "ElastiCacheReplicaEngineCPUUtilization"
    },
    "ScaleInCooldown": 600,
    "ScaleOutCooldown": 300
}
```

### 禁用横向缩减活动
<a name="AutoScaling-Disabling-Scalein"></a>

您可以禁用横向缩减活动，以禁止目标跟踪扩缩策略配置横向缩减 ElastiCache for Valkey and Redis OSS 集群。禁用横向缩减活动将禁止扩展策略删除副本，同时仍允许扩展策略根据需要添加副本。

您可以为 `DisableScaleIn` 指定一个布尔值，以便为集群启用或禁用横向缩减活动。有关 `DisableScaleIn` 的更多信息，请参阅 *Application Auto Scaling API 参考*中的 [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/ApplicationAutoScaling/latest/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)。

**Example**  
以下示例说明了扩缩策略的目标跟踪配置。在该配置中，`ElastiCacheReplicaEngineCPUUtilization` 预定义指标根据集群中所有副本的平均 CPU 使用率（40%）调整该集群。该配置禁用扩缩策略的横向缩减活动。

```
{"TargetValue": 40.0,
    "PredefinedMetricSpecification":
    {"PredefinedMetricType": "ElastiCacheReplicaEngineCPUUtilization"
    },
    "DisableScaleIn": true
}
```

### 向 ElastiCache for Valkey and Redis OSS 集群应用扩缩策略
<a name="AutoScaling-Applying-Policy"></a>

在为集群注册 ElastiCache for Valkey and Redis OSS 自动扩缩并定义扩缩策略后，您可以将扩缩策略应用于已注册的集群。要将扩缩策略应用于 ElastiCache for Valkey and Redis OSS 集群，您可以使用 AWS CLI 或 Application Auto Scaling API。

**使用 AWS CLI**

要将扩缩策略应用于 ElastiCache for Valkey and Redis OSS 集群，请使用具有以下参数的 [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/put-scaling-policy.html) 命令：
+ --policy-name – 扩缩策略的名称。
+ --policy-type – 将此值设置为 `TargetTrackingScaling`。
+ --resource-id – 集群的资源标识符。对于该参数，资源类型为 ReplicationGroup，唯一标识符为集群的名称，例如 `replication-group/myscalablecluster`。
+ --service-namespace – 将此值设置为 elasticache。
+ --scalable-dimension – 将此值设置为 `elasticache:replication-group:Replicas`。
+ --target-tracking-scaling-policy-configuration – 用于集群的目标跟踪扩缩策略配置。

**Example**  
在以下示例中，您将使用 ElastiCache 自动扩缩对名为 `myscalablecluster` 的集群应用名为 `myscalablepolicy` 的目标跟踪扩缩策略。为此，请使用在名为 `config.json` 的文件中保存的策略配置。

对于 Linux、macOS 或 Unix：

```
aws application-autoscaling put-scaling-policy \
    --policy-name myscalablepolicy \
    --policy-type TargetTrackingScaling \
    --resource-id replication-group/myscalablecluster \
    --service-namespace elasticache \
    --scalable-dimension elasticache:replication-group:Replicas \
    --target-tracking-scaling-policy-configuration file://config.json
```

```
{"TargetValue": 40.0,
    "PredefinedMetricSpecification":
    {"PredefinedMetricType": "ElastiCacheReplicaEngineCPUUtilization"
    },
    "DisableScaleIn": true
}
```

对于 Windows：

```
aws application-autoscaling put-scaling-policy ^
    --policy-name myscalablepolicy ^
    --policy-type TargetTrackingScaling ^
    --resource-id replication-group/myscalablecluster ^
    --service-namespace elasticache ^
    --scalable-dimension elasticache:replication-group:Replicas ^
    --target-tracking-scaling-policy-configuration file://config.json
```

**使用 API**

要使用 Application Auto Scaling API 将扩缩策略应用于 ElastiCache 集群，请使用具有以下参数的 [PutScalingPolicy](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html) Application Auto Scaling API 操作：
+ PolicyName – 扩展策略的名称。
+ PolicyType – 将此值设置为 `TargetTrackingScaling`。
+ ResourceID – 集群的资源标识符。对于此参数，资源类型为 ReplicationGroup，唯一标识符为 ElastiCache for Redis OSS 集群的名称，例如 `replication-group/myscalablecluster`。
+ ServiceNamespace – 将此值设置为 elasticache。
+ ScalableDimension – 将此值设置为 `elasticache:replication-group:Replicas`。
+ TargetTrackingScalingPolicyConfiguration – 用于集群的目标跟踪扩缩策略配置。

**Example**  
在以下示例中，您将使用 ElastiCache 自动扩缩对名为 `myscalablecluster` 的集群应用名为 `scalablepolicy` 的目标跟踪扩缩策略。您使用的策略配置基于 `ElastiCacheReplicaEngineCPUUtilization` 预定义指标。

```
POST / HTTP/1.1
Host: autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
Content-Length: 219
X-Amz-Target: AnyScaleFrontendService.PutScalingPolicy
X-Amz-Date: 20160506T182145Z
User-Agent: aws-cli/1.10.23 Python/2.7.11 Darwin/15.4.0 botocore/1.4.8
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS
{
    "PolicyName": "myscalablepolicy",
    "ServiceNamespace": "elasticache",
    "ResourceId": "replication-group/myscalablecluster",
    "ScalableDimension": "elasticache:replication-group:Replicas",
    "PolicyType": "TargetTrackingScaling",
    "TargetTrackingScalingPolicyConfiguration": {
        "TargetValue": 40.0,
        "PredefinedMetricSpecification":
        {
            "PredefinedMetricType": "ElastiCacheReplicaEngineCPUUtilization"
        }
    }
}
```

# 编辑扩展策略
<a name="AutoScaling-Editing-Policy"></a>

您可以使用 AWS 管理控制台、AWS CLI 或 Application Auto Scaling API 编辑扩缩策略。

**使用 AWS 管理控制台编辑扩展策略**

您只能通过 AWS 管理控制台 使用预定义类型指标编辑策略

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

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

1. 选择您要向其中添加策略的集群（选择集群名称，而不是其左侧的按钮）。

1. 选择 **Auto Scaling policies**（弹性伸缩策略）选项卡。

1. 在 **Scaling policies**（扩展策略）下，选择要更改的 Auto Scaling 策略左侧的按钮，然后选择 **Modify**（修改）。

1. 对该策略做出必要更改。

1. 选择 **Modify**(修改)。

1. 对该策略进行更改。

1. 选择 **Modify**(修改)。

**使用 AWS CLI 或 Application Auto Scaling API 编辑扩缩策略**

您可以使用 AWS CLI 或 Application Auto Scaling API 按照与应用扩缩策略相同的方式编辑扩缩策略：
+ 在使用 Application Auto Scaling API 时，请在 `PolicyName` 参数中指定要编辑的策略名称。为要更改的参数指定新的值。

有关更多信息，请参阅 [向 ElastiCache for Valkey and Redis OSS 集群应用扩缩策略](AutoScaling-Defining-Policy.md#AutoScaling-Applying-Policy)。

# 删除扩展策略
<a name="AutoScaling-Deleting-Policy"></a>

您可以使用 AWS 管理控制台、AWS CLI 或 Application Auto Scaling API 删除扩缩策略

**使用 AWS 管理控制台删除扩展策略**

您只能通过 AWS 管理控制台 使用预定义类型指标编辑策略

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

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

1. 选择要删除其弹性伸缩策略的集群。

1. 选择 **Auto Scaling policies**（弹性伸缩策略）选项卡。

1. 在 **Scaling policies**（扩展策略）下，选择 Auto Scaling 策略，然后选择 **Delete**（删除）。

**使用 AWS CLI 或 Application Auto Scaling API 删除扩缩策略**

您可以使用 AWS CLI 或 Application Auto Scaling API 从 ElastiCache 集群中删除扩缩策略。

** CLI**

要删除 ElastiCache for Valkey and Redis OSS 集群的扩缩策略，请使用具有以下参数的 [delete-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/delete-scaling-policy.html) 命令：
+ --policy-name – 扩缩策略的名称。
+ --resource-id – 集群的资源标识符。对于该参数，资源类型为 ReplicationGroup，唯一标识符为集群的名称，例如 `replication-group/myscalablecluster`。
+ --service-namespace – 将此值设置为 elasticache。
+ --scalable-dimension – 将此值设置为 `elasticache:replication-group:Replicas`。

**Example**  
在以下示例中，您从名为 `myscalablecluster` 的 ELC 集群中删除名为 `myscalablepolicy` 的目标跟踪扩缩策略。

对于 Linux、macOS 或 Unix：

```
aws application-autoscaling delete-scaling-policy \
    --policy-name myscalablepolicy \
    --resource-id replication-group/myscalablecluster \
    --service-namespace elasticache \
    --scalable-dimension elasticache:replication-group:Replicas \
```

对于 Windows：

```
aws application-autoscaling delete-scaling-policy ^
    --policy-name myscalablepolicy ^
    --resource-id replication-group/myscalablecluster ^
    --service-namespace elasticache ^
    --scalable-dimension elasticache:replication-group:Replicas ^
```

**API**

要删除 ElastiCache for Valkey and Redis OSS 集群的扩缩策略，请使用具有以下参数的 [DeleteScalingPolicy](https://docs.aws.amazon.com/ApplicationAutoScaling/latest/APIReference/API_DeleteScalingPolicy.html) Application Auto Scaling API 操作：
+ PolicyName – 扩展策略的名称。
+ ResourceID – 集群的资源标识符。对于该参数，资源类型为 ReplicationGroup，唯一标识符为集群的名称，例如 `replication-group/myscalablecluster`。
+ ServiceNamespace – 将此值设置为 elasticache。
+ ScalableDimension – 将此值设置为 `elasticache:replication-group:Replicas`。

在以下示例中，您将使用 Application Auto Scaling API 从名为 `myscalablecluster` 的集群中删除名为 `myscalablepolicy` 的目标跟踪扩缩策略。

```
POST / HTTP/1.1
>>>>>>> mainline
Host: autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
Content-Length: 219
X-Amz-Target: AnyScaleFrontendService.DeleteScalingPolicy
X-Amz-Date: 20160506T182145Z
User-Agent: aws-cli/1.10.23 Python/2.7.11 Darwin/15.4.0 botocore/1.4.8
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS
{
    "PolicyName": "myscalablepolicy",
    "ServiceNamespace": "elasticache",
    "ResourceId": "replication-group/myscalablecluster",
    "ScalableDimension": "elasticache:replication-group:Replicas"
}
```

# 将 CloudFormation 用于 Auto Scaling 策略
<a name="AutoScaling-with-Cloudformation"></a>

此代码段演示如何使用 [AWS::ApplicationAutoScaling::ScalableTarget](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalabletarget.html) 资源创建计划操作并将其应用于 [AWS::ElastiCache::ReplicationGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html) 资源。此示例利用 [Fn::Join](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-join.html) 和 [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) 内置函数，使用在同一模板中指定的 `AWS::ElastiCache::ReplicationGroup` 资源的逻辑名称来构建 `ResourceId` 属性。

```
ScalingTarget:
   Type: 'AWS::ApplicationAutoScaling::ScalableTarget'
   Properties:
     MaxCapacity: 0
     MinCapacity: 0
     ResourceId: !Sub replication-group/${logicalName}
     ScalableDimension: 'elasticache:replication-group:Replicas'
     ServiceNamespace: elasticache
     RoleARN: !Sub "arn:aws:iam::${AWS::AccountId}:role/aws-service-role/elasticache.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_ElastiCacheRG"

  ScalingPolicy:
    Type: "AWS::ApplicationAutoScaling::ScalingPolicy"
    Properties:
      ScalingTargetId: !Ref ScalingTarget
      ServiceNamespace: elasticache
      PolicyName: testpolicy
      PolicyType: TargetTrackingScaling
      ScalableDimension: 'elasticache:replication-group:Replicas'
      TargetTrackingScalingPolicyConfiguration:
        PredefinedMetricSpecification:
          PredefinedMetricType: ElastiCacheReplicaEngineCPUUtilization
        TargetValue: 40
```

# 计划扩展
<a name="AutoScaling-with-Scheduled-Scaling-Replicas"></a>

按计划扩展使您可以按照可预测的需求变化来扩展应用程序。要使用计划扩缩，您需要创建计划操作，用于告知 ElastiCache for Valkey and Redis OSS 在特定时间执行扩缩活动。创建计划操作时，您需要指定现有的 ElastiCache 集群、执行扩缩活动的时间、最小容量和最大容量。您可以创建仅扩展一次或按重复计划扩展的计划操作。

 您只能为已存在的 ElastiCache 集群创建计划操作。您不能在创建集群的同时创建计划操作。

有关计划操作创建、管理和删除的相关术语的详细信息，请参阅[计划操作创建、管理和删除的常用命令](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-scheduled-scaling.html#scheduled-scaling-commonly-used-commands) 

**创建一次性计划操作：**

类似于分区维度。请参阅[计划扩展](AutoScaling-with-Scheduled-Scaling-Shards.md)。

**删除计划操作**

类似于分区维度。请参阅[计划扩展](AutoScaling-with-Scheduled-Scaling-Shards.md)。

**使用 AWS CLI 管理计划扩展**

使用以下 application-autoscaling API：
+ [put-scheduled-action](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scheduled-action.html) 
+ [describe-scheduled-actions](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scheduled-actions.html) 
+ [delete-scheduled-action](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/delete-scheduled-action.html) 

## 使用 CloudFormation 创建弹性伸缩策略
<a name="AutoScaling-with-Cloudformation-Update-Action"></a>

此代码段演示如何使用 [AWS::ApplicationAutoScaling::ScalableTarget](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalabletarget.html) 资源创建计划操作并将其应用于 [AWS::ElastiCache::ReplicationGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html) 资源。此示例利用 [Fn::Join](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-join.html) 和 [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) 内置函数，使用在同一模板中指定的 `AWS::ElastiCache::ReplicationGroup` 资源的逻辑名称来构建 `ResourceId` 属性。

```
ScalingTarget:
   Type: 'AWS::ApplicationAutoScaling::ScalableTarget'
   Properties:
     MaxCapacity: 0
     MinCapacity: 0
     ResourceId: !Sub replication-group/${logicalName}
     ScalableDimension: 'elasticache:replication-group:Replicas'
     ServiceNamespace: elasticache
     RoleARN: !Sub "arn:aws:iam::${AWS::AccountId}:role/aws-service-role/elasticache.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_ElastiCacheRG"
     ScheduledActions:
       - EndTime: '2020-12-31T12:00:00.000Z'
         ScalableTargetAction:
           MaxCapacity: '5'
           MinCapacity: '2'
         ScheduledActionName: First
         Schedule: 'cron(0 18 * * ? *)'
```

# 修改集群模式
<a name="modify-cluster-mode"></a>

Valkey 或 Redis OSS 是一种分布式内存数据库，支持分片和复制。ElastiCache（兼容 Valkey 或 Redis OSS）集群是分布式实现，它允许在多个节点间对数据进行分区。ElastiCache for Redis OSS 集群有两种操作模式：“已启用集群模式”（CME）和“已禁用集群模式”（CMD）。在 CME 中，Valkey 和 Redis OSS 引擎充当具有多个分片和节点的分布式数据库，而在 CMD 中，Valkey 和 Redis OSS 充当单个节点。

从 CMD 迁移到 CME 之前，必须满足以下条件：

**重要**  
集群模式配置只能从“已禁用集群模式”更改为“已启用集群模式”。无法还原此配置。
+ 集群只能在数据库 0 中拥有密钥。
+ 应用程序必须使用能够使用集群协议的 Valkey 或 Redis OSS 客户端，并使用配置端点。
+ 必须在至少有 1 个副本的集群上启用自动失效转移。
+ 迁移所需的最低引擎版本为 Valkey 7.2 及更高版本，或 Redis OSS 7.0 及更高版本。

要从 CMD 迁移到 CME，必须将集群模式配置从“已禁用集群模式”更改为“已启用集群模式”。这是一个两步过程，可确保迁移过程中集群的可用性。

**注意**  
您需要为参数组提供已启用集群的配置，也就是说，cluster-enabled 参数设置为 `yes`。如果您使用的是原定设置参数组，则 ElastiCache for Redis OSS 将自动选择具有已启用集群的配置的相应原定设置参数组。对于 CMD 集群，cluster-enabled 参数值设置为 `no`。当集群移至兼容模式时，作为修改操作的一部分，cluster-enabled 参数值将更新为 `yes`。  
有关更多信息，请参阅 [使用 ElastiCache 参数组配置引擎参数](ParameterGroups.md)。

1. **准备** – 创建一个测试 CME 集群，并确保您的堆栈已准备好使用它。ElastiCache for Redis OSS 无法验证您是否准备就绪。有关更多信息，请参阅 [创建 Valkey 或 Redis OSS 集群](Clusters.Create.md)。

1. **将现有 CMD 集群配置修改为“与集群模式兼容”**– 在此模式下，将部署单个分片，ElastiCache for Redis OSS 既可以用作单个节点，也可以用作单个分片集群。兼容模式意味着客户端应用程序可以使用任一协议与集群通信。在此模式下，必须重新配置应用程序才能开始使用 Valkey 或 Redis OSS 集群协议和配置端点。要将 Valkey 或 Redis OSS 集群模式更改为“与集群模式兼容”，请执行以下步骤：
**注意**  
在兼容模式下，不允许对集群执行其他修改操作，例如扩缩和引擎版本。此外，在 [ModifyReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyReplicationGroup.html) 请求中定义集群模式参数时，无法修改参数（不包括 `cacheParameterGroupName`）。

   1. 使用 AWS 管理控制台时，请参阅[修改复制组](Replication.Modify.md)并将集群模式设置为**兼容**

   1. 使用 API，请参阅 [ModifyReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyReplicationGroup.html) 并将 `ClusterMode` 参数更新为 `compatible`。

   1. 使用 AWS CLI，请参阅 [modify-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-replication-group.html) 并将 `cluster-mode` 参数更新为 `compatible`。

   将 Valkey 或 Redis OSS 集群模式更改为“与集群模式兼容”后，[DescribeReplicationGroups](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DescribeReplicationGroups.html) API 将返回 ElastiCache for Redis OSS 集群配置端点。集群配置端点是应用程序可以用来连接到集群的单个端点。有关更多信息，请参阅 [查找 ElastiCache 中的缓存连接端点](Endpoints.md)。

1. **将集群配置修改为“已启用集群模式”** - 在将集群模式设置为“与集群模式兼容”后，第二步是将集群配置修改为“已启用集群模式”。在此模式下，单个分片正在运行，客户现在可以扩缩其集群或修改其他集群配置。

   要将集群模式更改为已启用，请执行以下步骤：

   开始之前，请确保您的 Valkey 或 Redis OSS 客户端已迁移到使用集群协议，并且集群的配置端点未在使用中。

   1. 使用 AWS 管理控制台时，请参阅[修改复制组](Replication.Modify.md)并将集群模式设置为**已启用**。

   1. 使用 API，请参阅 [ModifyReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyReplicationGroup.html) 并将 `ClusterMode` 参数更新为 `enabled`。

   1. 使用 AWS CLI，请参阅 [modify-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-replication-group.html) 并将 `cluster-mode` 参数更新为 `enabled`。

   在将集群模式更改为已启用后，端点将按照 Valkey 或 Redis OSS 集群规范进行配置。[DescribeReplicationGroups](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DescribeReplicationGroups.html) API 将返回集群模式参数（值为 `enabled`）和现在可供应用程序用于连接到集群的集群端点。

   请注意，一旦集群模式更改为已启用，集群端点就会发生变化。请确保使用新端点更新您的应用程序。

您也可以选择从“与集群模式兼容”恢复为“已禁用集群模式”（CMD）并保留原始配置。

**将集群配置从“与集群模式兼容”修改为“已禁用集群模式”**

1. 使用 AWS 管理控制台时，请参阅[修改复制组](Replication.Modify.md)并将集群模式设置为**已禁用**

1. 使用 API，请参阅 [ModifyReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyReplicationGroup.html) 并将 `ClusterMode` 参数更新为 `disabled`。

1. 使用 AWS CLI，请参阅 [modify-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-replication-group.html) 并将 `cluster-mode` 参数更新为 `disabled`。

将集群模式更改为已禁用后，[DescribeReplicationGroups](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DescribeReplicationGroups.html) API 会将集群模式参数返回为 `disabled`。

# 使用全球数据存储跨AWS区域复制
<a name="Redis-Global-Datastore"></a>

**注意**  
全局数据存储目前仅适用于基于节点的集群。

通过使用全球数据存储功能，您可以跨区域进行完全托管、快速、可靠和安全的 Valkey 或 Redis OSS 集群复制。AWS使用此功能，您可以创建跨区域只读副本集群，以实现跨AWS区域的低延迟读取和灾难恢复。

在以下部分中，您可以找到有关如何使用全局数据存储的说明。

**Topics**
+ [概述](#Redis-Global-Data-Stores-Overview)
+ [先决条件和限制](Redis-Global-Datastores-Getting-Started.md)
+ [使用全局数据存储（控制台）](Redis-Global-Datastores-Console.md)
+ [使用全局数据存储 (CLI)](Redis-Global-Datastores-CLI.md)

## 概述
<a name="Redis-Global-Data-Stores-Overview"></a>

每个*全局数据存储* 是一个或多个相互复制的集群的集合。

全局数据存储包含以下项：
+ **主（主动）集群** – 主集群接受复制到全局数据存储中的所有集群的写入。主集群也接受读取请求。
+ **辅助（被动）集群** – 辅助集群仅接受读取请求并从主集群复制数据更新。辅助群集必须与主群集位于不同的AWS区域。

在中 ElastiCache 为 Valkey 或 Redis OSS 创建全局数据存储时，它会自动将您的数据从主集群复制到辅助集群。您可以选择应复制 Valkey 或 Redis OSS 数据的AWS区域，然后在该区域中创建辅助集群。AWS ElastiCache 然后设置并管理两个集群之间数据的自动、异步复制。

为 Valkey 或 Redis OSS 使用全局数据存储具有以下优势：
+ **地理本地性能**-通过在其他AWS区域设置远程副本集群并在它们之间同步数据，可以减少该AWS区域的数据访问延迟。全球数据存储可以通过提供跨区域的低延迟地理本地读取来帮助提高应用程序的响应能力。AWS
+ **灾难恢复** – 如果全局数据存储中的主集群出现性能降级，则可以将辅助集群提升为新的主集群。您可以通过连接到任何包含辅助群集的AWS区域来实现此目的。

下图显示了全局数据存储的工作方式。

![\[全局数据存储\]](http://docs.aws.amazon.com/zh_cn/AmazonElastiCache/latest/dg/images/Global-DataStore.png)


# 先决条件和限制
<a name="Redis-Global-Datastores-Getting-Started"></a>

开始使用全局数据存储之前，请注意以下事项：
+ 以下AWS 区域支持全局数据存储：
  + **非洲** - 开普敦
  + **亚太地区** - 香港、海得拉巴、雅加达、马来西亚、墨尔本、孟买、大阪、首尔、新加坡、悉尼、泰国和东京 
  + **加拿大** - 加拿大（中部）和加拿大西部（卡尔加里）
  + **中国**- 北京和宁夏
  + **欧洲** - 法兰克福、伦敦、爱尔兰、米兰、巴黎、西班牙、斯德哥尔摩和苏黎世
  + **AWSGovCloud** - 美国西部和美国东部
  + **以色列** - 特拉维夫
  + **中东** - 巴林和阿联酋
  + **美国** - 东部（弗吉尼亚州北部和俄亥俄州）和美国西部（北加利福尼亚和俄勒冈州）
  + **南美洲** - 墨西哥（中部）和圣保罗
+  全局数据存储中的所有集群（主集群和辅助集群）应具有相同数量的主节点、节点类型、引擎版本和分区数（如果启用了集群模式）。全局数据存储中的每个集群可以有不同数量的读取副本，以适应该集群本地的读取流量。

  如果您计划使用现有的单节点集群，则必须启用复制。
+ 大型及以上大小的实例支持全局数据存储。
+ 您可以设置从一个 AWS 区域中的主集群复制到最多两个其他 AWS 区域中的辅助集群。
**注意**  
中国（北京）区域和中国（宁夏）区域除外，只能在这两个区域之间进行复制。
+ 您只能在 VPC 集群中使用全局数据存储。有关更多信息，请参阅 [用于访问 Amazon VPC 中的 ElastiCache 缓存的访问模式](elasticache-vpc-accessing.md)。使用 EC2-Classic 时，不支持全局数据存储。有关更多信息，请参阅《Amazon EC2 用户指南》**中的 [EC2-Classic](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/ec2-classic-platform.html)。
**注意**  
目前，无法在 [将 Local Zones 与 ElastiCache 结合使用](Local_zones.md) 中使用全局数据存储。
+ ElastiCache 不支持从一个 AWS 区域到另一个区域的自动故障转移。如果需要，您可以手动提升辅助集群。有关示例，请参阅[将辅助集群提升为主集群](Redis-Global-Datastores-Console.md#Redis-Global-Datastores-Console-Promote-Secondary)。
+ 要从现有数据引导，请使用现有集群作为主集群来创建全局数据存储。我们不支持将现有集群添加为辅助集群。将集群添加为辅助集群的过程会擦除数据，这可能会导致数据丢失。
+ 当您修改属于全局数据存储的某个集群的本地参数组时，参数更新应用于所有集群。
+ 您可以垂直（向上扩展和向下扩展）和水平扩展（向内扩展和向外扩展）区域集群。您可以通过修改全局数据存储来扩展集群。然后，全局数据存储中的所有区域集群都会在不中断的情况下扩展。有关更多信息，请参阅 [缩放 ElastiCache](Scaling.md)。
+ 全局数据存储支持[静态加密](at-rest-encryption.md)、[传输中加密](in-transit-encryption.md)和 [AUTH](auth.md)。
+ 全局数据存储不支持 Internet 协议版本 6（IPv6）。
+  全局数据存储支持 AWS KMS 密钥。有关更多信息，请参阅 *AWS Key Management Service 开发人员指南*中的 [AWS 密钥管理服务概念](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)。

**注意**  
全局数据存储支持[发布/订阅消息收发](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/elasticache-use-cases.html#elasticache-for-redis-use-cases-messaging)，且具有以下规定：  
如已禁用集群模式，则完全支持发布/订阅。在主 AWS 区域的主集群上发布的事件会传播到辅助 AWS 区域。
如已启用集群模式，则以下情况适用：  
对于不在键空间中的已发布事件，只有同一 AWS 区域中的订阅者才会收到事件。
对于已发布的键空间事件，所有 AWS 区域中的订阅者都会接收事件。

# 使用全局数据存储（控制台）
<a name="Redis-Global-Datastores-Console"></a>

要使用控制台创建全局数据存储，请遵循以下两步过程：

1. 通过使用现有集群或创建新集群来创建主集群。引擎必须是 Valkey 7.2 或更高版本，或者是 Redis OSS 5.0.6 或更高版本。

1. 在不同 AWS 区域中添加最多两个辅助集群（也必须使用 Valkey 7.2 或更高版本或者是 Redis 5.0.6 或更高版本）。

以下过程指导您如何为 Valkey 或 Redis OSS 创建全局数据存储以及使用 ElastiCache 控制台执行其他操作。

**Topics**
+ [使用现有集群创建全局数据存储](#Redis-Global-Datastores-Console-Create-Primary)
+ [使用新主集群创建新的全局数据存储](#Redis-Global-Datastores-Create-From-Scratch)
+ [查看全局数据存储详细信息](#Redis-Global-Datastores-Console-Details)
+ [将区域添加到全局数据存储](#Redis-Global-Datastores-Console-Create-Secondary)
+ [修改全局数据存储](#Redis-Global-Datastores-Console-Modify-Regional-Clusters)
+ [将辅助集群提升为主集群](#Redis-Global-Datastores-Console-Promote-Secondary)
+ [从全局数据存储中删除区域](#Redis-Global-Datastore-Console-Remove-Region)
+ [删除全局数据存储](#Redis-Global-Datastores-Console-Delete-GlobalDatastore)

## 使用现有集群创建全局数据存储
<a name="Redis-Global-Datastores-Console-Create-Primary"></a>

在这种情况下，使用现有集群作为新全局数据存储的主集群。然后，您可以在单独的 AWS 区域中创建辅助只读集群。此辅助集群接收来自主集群的自动和异步更新。

**重要**  
现有集群必须使用 Valkey 7.2 或更高版本，或者使用 Redis OSS 5.0.6 或更高版本。

**使用现有集群创建全局数据存储**

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

1. 在导航窗格中，选择**全局数据存储**，然后选择**创建全局数据存储**。

1. 在**主集群设置**页面上，执行以下操作：
   + 在**全局数据存储信息**字段中，输入新的全局数据存储的名称。
   + （可选）输入 **Description（描述）**值。

1. 在**区域集群**下，选择**使用现有区域集群**。

1. 在**现有集群**下，选择要使用的现有集群。

1. 使以下选项保持不变。它们会预先填入以匹配主集群配置，您无法对其进行更改。
   + 引擎版本
   + 节点类型
   + 参数组
**注意**  
ElastiCache 根据提供的参数组的值自动生成新参数组，并将新参数组应用于集群。使用这个新参数组修改全局数据存储上的参数。每个自动生成的参数组与一个（且只有一个）集群关联，因此只有一个全局数据存储。
   + 分片数量
   + 静态加密 – 对磁盘上存储的数据启用加密。有关更多信息，请参阅[静态加密](at-rest-encryption.md)。
**注意**  
您可以通过选择 **Customer Managed AWS KMS key（客户托管式 Amazon KMS 密钥）**并选择该密钥来提供不同的加密密钥。有关更多信息，请参阅[使用客户托管式 AWS KMS 密钥](at-rest-encryption.md#using-customer-managed-keys-for-elasticache-security)。
   + 传输中加密 – 对传输中的数据启用加密。有关更多信息，请参阅[传输中加密](in-transit-encryption.md)。对于 Valkey 7.2 及更高版本或 Redis OSS 6.0 及更高版本，如果您启用了传输中加密，则系统会提示您指定以下**访问控制**选项中的一个：
     + **No Access Control（无访问控制）**– 此选项为默认设置。表示无任何限制。
     + **User Group Access Control List（用户组访问控制列表）**– 选择具有对可用操作定义有用户集和权限的用户组。有关更多信息，请参阅 [使用控制台和 CLI 管理用户组](Clusters.RBAC.md#User-Groups)。
     + **Redis AUTH 默认用户** – Valkey 或 Redis OSS 服务器的身份验证机制。有关更多信息，请参阅 [AUTH](auth.md)。

1. （可选）根据需要更新剩余的辅助集群设置。这些设置会预先填入与主集群相同的值，但您可以对其进行更新，以满足该集群的特定要求。
   + 端口
   + 副本数量
   + 子网组
   + 首选可用区
   + 安全组
   + 客户托管式（AWS KMS 密钥）
   + AUTH 令牌
   + 启用自动备份
   + 备份保留期
   + 备份时段
   + 维护时段
   + SNS 主题通知

1. 选择**创建**。这样做会将全局数据存储的状态设置为 **Creating（正在创建）**。在主集群与全局数据存储关联且辅助集群处于 **Associating（正在关联）**状态后，状态将转换为 **Modifying（正在修改）**。

   主集群和辅助集群与全局数据存储关联后，状态会更改为 **Available（可用）**。此时，您有一个接受读取和写入的主集群和接受从主集群复制的读取数据的辅助集群。

   页面更新为指示集群是否属于全局数据存储，包括：
   + **Global Datastore（全局数据存储）**– 集群所属的全局数据存储的名称。
   + **Global Datastore Role（全局数据存储角色）**– 主集群或辅助集群的角色。

在不同的 AWS 区域中最多可以添加一个额外的辅助集群。有关更多信息，请参阅 [将区域添加到全局数据存储](#Redis-Global-Datastores-Console-Create-Secondary)。

## 使用新主集群创建新的全局数据存储
<a name="Redis-Global-Datastores-Create-From-Scratch"></a>

如果选择使用新集群创建全局数据存储，请按照以下过程操作。

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

1. 在导航窗格中，选择**全局数据存储**，然后选择**创建全局数据存储**。

1. 在 **Primary cluster settings**（主集群设置）中，执行以下操作：

   1. 对于 **Cluster mode**（集群模式），选择 **Enabled**（已启用）或 **Disabled**（已禁用）。

   1. 针对 **Global Datastore info**（全局数据存储信息），为 **Name**（名称）输入一个值。ElastiCache 使用后缀为全局数据存储生成唯一名称。您可以使用在此处指定的后缀搜索全局数据存储。

   1. （可选）为 **Global Datastore Description（全局数据存储描述）**输入一个值。

1. 在 **Regional cluster**（区域集群）中：

   1. 对于 **Region**（区域），选择一个可用的 AWS 区域。

   1. 选择 **Create new regional cluster**（创建新的区域集群）或 **Use existing regional cluster**（使用现有的区域集群）

   1. 如果选择 **Create new regional cluster**（创建新的区域集群），在 **Cluster info**（集群信息）下，输入集群的名称和可选描述。

   1. 在 **Location**（位置）下，我们建议您接受 **Multi-AZ**（多可用区）和 **Auto-failover**（自动失效转移）的默认设置。

1. 在 **Cluster settings**（集群设置）下

   1. 对于 **Engine version**（引擎版本），选择 5.0.6 或更高版本。

   1. 对于 **Port**（端口），使用默认端口 6379。如果您出于某个原因需要使用其他端口，请输入相应的端口号。

   1. 对于**参数组**，选择一个参数组或创建一个新参数组。参数组控制集群的运行时参数。有关参数组的更多信息，请参阅[Valkey 和 Redis OSS 参数](ParameterGroups.Engine.md#ParameterGroups.Redis) 和[创建 ElastiCache 参数组](ParameterGroups.Creating.md)。
**注意**  
当您选择要设置引擎配置值的参数组时，该参数组将应用于全局数据存储中的所有集群。在 **Parameter Groups（参数组）**页面上，是/否 **Global（全局）**属性指示参数组是否属于全局数据存储。

   1. 对于 **Node type（节点类型）**，请选择向下箭头（![\[Downward-pointing triangle icon, typically used to indicate a dropdown menu.\]](http://docs.aws.amazon.com/zh_cn/AmazonElastiCache/latest/dg/images/ElastiCache-DnArrow.png)）。在 **Change node type（更改节点类型）**对话框中，为所需节点类型选择 **Instance family（实例系列）**值。接着选择要用于此集群的节点类型，然后选择**保存**。

      有关更多信息，请参阅 [选择节点大小](CacheNodes.SelectSize.md)。

      如果您选择 r6gd 节点类型，则系统会自动启用数据分层。有关更多信息，请参阅 [ElastiCache 中的数据分层](data-tiering.md)。

   1. 如果您要创建 Valkey 或 Redis OSS（已禁用集群模式）集群：

      对于 **Number of replicas**（副本数量），为此集群选择所需的副本数。

   1. 如果您要创建 Valkey 或 Redis OSS（已启用集群模式）集群：

      1. 对于**分片数**，选择要用于此 Valkey 或 Redis OSS（已启用集群模式）集群的分片（分区/节点组）数。

         对于某些版本的 Valkey 或 Redis OSS（已启用集群模式），您可以动态更改集群中的分片数量：
         + **Redis OSS 3.2.10 及更高版本** – 如果您的集群运行 Redis OSS 3.2.10 或更高版本，则可以动态更改集群中的分片数量。有关更多信息，请参阅 [扩缩 Valkey 或 Redis OSS（已启用集群模式）集群](scaling-redis-cluster-mode-enabled.md)。
         + **其他 Redis OSS 版本** – 如果您的集群正在运行 3.2.10 版之前的 Redis OSS 版本，则还有另一种方法。在这种情况下，要更改集群中的分片数量，请使用新分片数量创建一个新集群。有关更多信息，请参阅 [从备份还原到新缓存](backups-restoring.md)。

      1. 对于**每个分片的副本数量**，请选择每个分片中需要的只读副本节点数。

         Valkey 或 Redis OSS（已启用集群模式）存在以下限制。
         + 如果启用了多可用区，请确保每个分片至少有一个副本。
         + 使用控制台创建集群时，每个分片的副本数相同。
         + 每个分片的只读副本数固定，无法更改。如果您需要增加或减少各分片（API/CLI：节点组）的副本数，您必须使用新的副本数量创建一个新集群。有关更多信息，请参阅 [教程：使用外部创建的备份为新的基于节点的集群制作种子](backups-seeding-redis.md)。

1. 对于 **Subnet group settings**（子网组设置），选择要应用到该集群的子网。ElastiCache 提供了一个默认 IPv4 子网组，或者您可以选择创建一个新的 IPv4 子网组。对于 IPv6，您需要创建一个带有 IPv6 CIDR 块的子网组。如果您选择**双堆栈**，则必须选择发现 IP 类型，即 IPv6 或 IPv4。

   有关更多信息，请参阅[在 VPC 中创建子网](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#AddaSubnet)。

1. 对于 **Availability zone placements**（可用区位置），您有两种选择：
   + **No preference（无首选项）**– 由 ElastiCache 选择可用区。
   + **Specify availability zones（指定可用区）**– 您为各集群指定可用区。

     如果您选择指定可用区，则需从列表中为各分片中的每个集群选择可用区。

   有关更多信息，请参阅 [为 ElastiCache 选择区域和可用区](RegionsAndAZs.md)。  
![\[图像：指定键空间和可用区\]](http://docs.aws.amazon.com/zh_cn/AmazonElastiCache/latest/dg/images/ElastiCache-ClusterOn-Slots-AZs.png)

   *指定键空间和可用区*

1. 选择 **Next**（下一步）

1. 在**高级 Valkey 和 Redis OSS 设置**下

   1. 对于 **Security**（安全）：

     1. 要加密您的数据，您有以下选项：
        + **Encryption at rest（静态加密）**– 对磁盘上存储的数据启用加密。有关更多信息，请参阅[静态加密](at-rest-encryption.md)。
**注意**  
您可以通过选择 **Customer Managed AWS KMS key（客户自主管理型 Amazon KMS key）**并选择该密钥来提供不同的加密密钥。有关更多信息，请参阅[使用 AWS KMS 客户自主管理型密钥](at-rest-encryption.md#using-customer-managed-keys-for-elasticache-security)。
        + **Encryption in-transit（传输中加密）**– 对传输中数据启用加密。有关更多信息，请参阅[传输中加密](in-transit-encryption.md)。对于 Valkey 7.2 及更高版本或 Redis OSS 6.0 及更高版本，如果您启用了传输中加密，则系统会提示您指定以下**访问控制**选项中的一个：
          + **No Access Control（无访问控制）**– 此选项为默认设置。这表示对用户访问集群的权限没有任何限制。
          + **User Group Access Control List（用户组访问控制列表）**– 选择具有集群访问权限的已定义用户组。有关更多信息，请参阅 [使用控制台和 CLI 管理用户组](Clusters.RBAC.md#User-Groups)。
          + **Redis AUTH 默认用户** – Valkey 或 Redis OSS 服务器的身份验证机制。有关更多信息，请参阅 [AUTH](auth.md)。
        + **AUTH** – Valkey 或 Redis OSS 服务器的身份验证机制。有关更多信息，请参阅 [AUTH](auth.md)。
**注意**  
对于 Redis OSS 3.2.6 及更高版本（版本 3.2.10 除外），只能选择 AUTH。

     1. 对于**安全组**，选择要用于该集群的安全组。*安全组* 充当防火墙来控制对集群的网络访问。您可以为 VPC 使用默认安全组或创建新安全组。

        有关安全组的更多信息，请参阅 *Amazon VPC 用户指南*中的[您的 VPC 的安全组](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)。

1. 如果需要定期计划自动备份，请选择**启用自动备份**，然后输入每个自动备份在被自动删除前保留的天数。如果您不希望定期计划自动备份，请清除 **Enable automatic backups** 复选框。不论是哪种情况，您始终可以选择创建手动备份。

   有关备份和还原的更多信息，请参阅[快照和还原](backups.md)。

1. （可选）指定维护时段。*maintenance window（维护时段）*是每周 ElastiCache 为您的集群计划系统维护的时间，通常以小时为时间长度。您可以允许 ElastiCache 选择维护时段的日期和时间 [*No preference*（无首选项）]，或者自行选择日期、时间和持续时间 [*Specify maintenance window*（指定维护时段）]。如果您从列表中选择了*指定维护时段*，请为您的维护时段选择*开始日期*、*开始时间*和*持续时间*（以小时为单位）。所有时间均为 UCT 时间。

   有关更多信息，请参阅 [管理 ElastiCache 集群维护](maintenance-window.md)。

1. （可选）对于 **Logs（日志）**：
   + 在 **Log format（日志格式）**下，选择 **Text（文本）**或 **JSON**。
   + 在 **Destination Type**（目标类型）下，选择 **CloudWatch Logs** 或 **Kinesis Firehose**。
   + 在**日志目标**下，选择**新建**，然后输入您的 CloudWatch Logs 日志组名称或 Firehose 流名称，或选择**选择现有**，然后选择您的 CloudWatch Logs 日志组名称或您的 Firehose 流名称，

1. 对于 **Tags**（标签），为了帮助您管理集群和其他 ElastiCache 资源，您可以标签的形式为每个资源分配您自己的元数据。有关更多信息，请参阅 [为资源添加 ElastiCache 标签](Tagging-Resources.md)。

1. 查看您的所有输入和选择，然后进行任意所需的更正。准备就绪后，选择 **Next**（下一步）。

1. 在前面步骤中配置集群后，您现在可以配置辅助集群详细信息。

1. 在 **Regional cluster**（区域集群）下，选择集群所在的 AWS 区域。

1. 在 **Cluster info**（集群信息）下，输入集群的名称和可选描述。

1. 以下选项已预先填入以匹配主集群配置，且无法更改：
   + 位置
   + 引擎版本
   + 实例类型
   + 节点类型
   + 分片数量
   + 参数组
**注意**  
ElastiCache 根据提供的参数组的值自动生成新参数组，并将新参数组应用于集群。使用这个新参数组修改全局数据存储上的参数。每个自动生成的参数组与一个（且只有一个）集群关联，因此只有一个全局数据存储。
   + 静态加密 – 对磁盘上存储的数据启用加密。有关更多信息，请参阅[静态加密](at-rest-encryption.md)。
**注意**  
您可以通过选择 **Customer Managed AWS KMS key（客户托管式 Amazon KMS 密钥）**并选择该密钥来提供不同的加密密钥。有关更多信息，请参阅[使用客户托管式 AWS KMS 密钥](at-rest-encryption.md#using-customer-managed-keys-for-elasticache-security)。
   + 传输中加密 – 对传输中的数据启用加密。有关更多信息，请参阅[传输中加密](in-transit-encryption.md)。对于 Valkey 7.2 及更高版本或 Redis OSS 6.4 及更高版本，如果您启用了传输中加密，则系统会提示您指定以下**访问控制**选项中的一个：
     + **No Access Control（无访问控制）**– 此选项为默认设置。这表示对用户访问集群的权限没有任何限制。
     + **User Group Access Control List（用户组访问控制列表）**– 选择具有集群访问权限的已定义用户组。有关更多信息，请参阅 [使用控制台和 CLI 管理用户组](Clusters.RBAC.md#User-Groups)。
     + **Redis AUTH 默认用户** – Valkey 或 Redis OSS 服务器的身份验证机制。有关更多信息，请参阅 [AUTH](auth.md)。
**注意**  
对于介于 4.0.2 和 6.0.4 之间的 Redis OSS 版本，当第一次支持传输中加密时，AUTH 是唯一的选择。

   剩下的辅助集群设置会预先填入与主集群相同的值，但您可以更新以下值来满足对该集群的特定要求：
   + 端口
   + 副本数量
   + 子网组
   + 首选可用区 
   + 安全组
   + 客户托管式（AWS KMS 密钥） 
   + AUTH 令牌
   + 启用自动备份
   + 备份保留期
   + 备份时段
   + 维护时段
   + SNS 主题通知

1. 选择**创建**。这会将全局数据存储的状态设置为 **Creating（正在创建）**。主集群和辅助集群与全局数据存储关联后，状态会更改为 **Available（可用）**。您有一个接受读取和写入的主集群和接受从主集群复制的读取数据的辅助集群。

   页面也会更新为指示集群是否属于全局数据存储，包括以下项：
   + **Global Datastore（全局数据存储）**– 集群所属的全局数据存储的名称。
   + **Global Datastore Role（全局数据存储角色）**– 主集群或辅助集群的角色。

在不同的 AWS 区域中最多可以添加一个额外的辅助集群。有关更多信息，请参阅 [将区域添加到全局数据存储](#Redis-Global-Datastores-Console-Create-Secondary)。

## 查看全局数据存储详细信息
<a name="Redis-Global-Datastores-Console-Details"></a>

您可以查看现有全局数据存储的详细信息，也可以在**全局数据存储**页面上对其进行修改。

**查看全局数据存储详细信息**

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

1. 在导航窗格中，选择**全局数据存储**，然后选择可用的全局数据存储。

然后，您可以检查以下全局数据存储属性：
+ **全局数据存储名称：**全局数据存储的名称
+ **描述：**全局数据存储的描述
+ **状态：**选项包括：
  + 创建
  + 修改
  + 可用
  + Deleting（正在删除）
  + 仅主集群 - 此状态表示全局数据存储仅包含主集群。所有辅助集群均已删除，或者未成功创建。
+ **集群模式：**启用或禁用
+ **引擎版本：**运行全局数据存储的 Valkey 或 Redis OSS 引擎版本
+ **实例节点类型：**全局数据存储所用的节点类型
+ **静态加密：**启用或禁用
+ **传输中加密：**启用或禁用
+ **AUTH：**启用或禁用

您可以对全局数据存储进行以下更改：
+ [将区域添加到全局数据存储](#Redis-Global-Datastores-Console-Create-Secondary) 
+ [从全局数据存储中删除区域](#Redis-Global-Datastore-Console-Remove-Region) 
+ [将辅助集群提升为主集群](#Redis-Global-Datastores-Console-Promote-Secondary)
+ [修改全局数据存储](#Redis-Global-Datastores-Console-Modify-Regional-Clusters)

“Global Datastore（全局数据存储）”页面还列出组成全局数据存储的各个集群以及每个集群的以下属性：
+ **Region（区域）**– 存储集群的 AWS 区域
+ **Role（角色）**- 主集群或辅助集群
+ **Cluster name（集群名称）**- 集群的名称
+ **Status（状态）**- 选项包括：
  + **Associating（正在关联）**- 集群正在关联到全局数据存储
  + **Associated（已关联）**- 集群已与全局数据存储关联
  + **Disassociating（正在解除关联）**- 使用全局数据存储名称从全局数据存储中删除辅助集群的过程。此操作结束后，辅助集群不再接收来自主集群的更新，但它仍为该 AWS 区域中的独立集群。
  + **Disassociated（已取消关联）**– 辅助集群已从全局数据存储中删除，现为其 AWS 区域中的独立集群。
+ **Global Datastore Replica lag（全局数据存储副本滞后）**– 显示全局数据存储中每个辅助 AWS 区域一个值。此为辅助区域的主节点与主区域的主节点之间的滞后。对于已启用集群模式的 Valkey 或 Redis OSS，滞后表示分片之间的最大延迟（以秒为单位）。

## 将区域添加到全局数据存储
<a name="Redis-Global-Datastores-Console-Create-Secondary"></a>

您最多可以向现有全局数据存储添加一个额外 AWS 区域。在这种情况下，您将在单独的 AWS 区域中创建只读集群，该集群接收来自主集群的自动和异步更新。

**将 AWS 区域添加到全局数据存储**

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

1. 在导航窗格中，选择**全局数据存储**，然后选择现有的全局数据存储。

1. 选择**添加区域集群**，然后选择辅助集群所在的 AWS 区域。

1. 在**集群信息**下面，输入集群的**名称**值和（可选）**描述**。

1. 使以下选项保持不变。它们会预先填入以匹配主集群配置，您无法对其进行更改。
   + 引擎版本
   + 实例类型
   + 节点类型
   + 分片数量
   + 参数组
**注意**  
ElastiCache 根据提供的参数组的值自动生成新参数组，并将新参数组应用于集群。使用这个新参数组修改全局数据存储上的参数。每个自动生成的参数组与一个（且只有一个）集群关联，因此只有一个全局数据存储。
   + 静态加密
**注意**  
您可以通过选择 **Customer Managed AWS KMS key（客户托管式 Amazon KMS 密钥）**并选择该密钥来提供不同的加密密钥。
   + 传输中加密
   + AUTH

1. （可选）更新剩余的辅助集群设置。这些设置会预先填入与主集群相同的值，但您可以对其进行更新，以满足该集群的特定要求：
   + 端口
   + 副本数量
   + 子网组
   + 首选可用区
   + 安全组
   + 客户托管式（AWS KMS 密钥） 
   + AUTH 令牌
   + 启用自动备份
   + 备份保留期
   + 备份时段
   + 维护时段
   + SNS 主题通知

1. 选择**添加**。

## 修改全局数据存储
<a name="Redis-Global-Datastores-Console-Modify-Regional-Clusters"></a>

您可以修改区域集群的属性。全局数据存储上只能进行一个修改操作，但将辅助集群提升为主集群除外。有关更多信息，请参阅 [将辅助集群提升为主集群](#Redis-Global-Datastores-Console-Promote-Secondary)。

**修改全局数据存储**

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

1. 在导航窗格中，选择**全局数据存储**，然后在**全局数据存储名称**下选择一个全局数据存储。

1. 选择 **Modify（修改）**并在以下选项中进行选择：
   + **Modify description（修改描述）**– 更新全局数据存储的描述
   + **修改引擎版本** – 只有 Valkey 7.2 及更高版本或 Redis OSS 5.0.6 及更高版本才可用。
   + **Modify node type（修改节点类型）**– 纵向（扩展和缩减）和横向（扩展和缩减）扩展区域集群。选项包括 R5 和 M5 节点系列。有关节点类型的更多信息，请参阅[受支持的节点类型](CacheNodes.SupportedTypes.md)。
   + **Modify Automatic Failover（修改自动故障转移）**– 启用或禁用自动故障转移。当您启用故障转移并且区域集群中的主节点意外关闭时，ElastiCache 会将故障转移到其中一个区域副本。有关更多信息，请参阅[自动故障转移](AutoFailover.md)。

   对于 Valkey 或 Redis OSS（已启用集群模式）集群：
   + **Add shards（添加分片）**– 输入要添加的分片数量，并有选择地指定一个或多个可用区。
   + **Delete shards（删除分片）**– 选择要在每个 AWS 区域中删除的分片。
   + **Rebalance shards（重新平衡分片）**– 重新平衡插槽分配，以确保在集群中的现有分片之间均匀分配。

要修改全局数据存储的参数，请修改全局数据存储的任何成员集群的参数组。ElastiCache 会自动将此更改应用于该全局数据存储中的所有集群。若要修改该集群的参数组，请使用 Valkey 或 Redis OSS 控制台或 [ModifyCacheCluster](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyCacheCluster.html) API 操作。有关更多信息，请参阅 [修改 ElastiCache 参数组](ParameterGroups.Modifying.md)。修改全局数据存储中包含的任何集群的参数组时，该参数组应用于该全局数据存储中的所有集群。

要重置整个参数组或特定参数，请使用 [ResetCacheParameterGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ResetCacheParameterGroup.html) API 操作。

## 将辅助集群提升为主集群
<a name="Redis-Global-Datastores-Console-Promote-Secondary"></a>

如果主集群或 AWS 区域变得不可用或遇到性能问题，您可以将辅助集群提升为主集群。随时可进行提升，即使正在进行其他修改时也可以。您还可以并行进行多个提升，并且全局数据存储最终会解析为一个主集群。如果同时提升多个辅助集群，则 ElastiCache不保证哪个集群最终会解析为主集群。

**将辅助集群提升为主集群**

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

1. 在导航窗格中，选择**全局数据存储**。

1. 选择全局数据存储名称以查看详细信息。

1. 选择 **Secondary（辅助）**集群。

1. 选择 **Promote to primary（提升为主集群）**。

   然后，系统会提示您确认您的决定，并显示以下警告：` Promoting a region to primary will make the cluster in this region as read/writable. Are you sure you want to promote the secondary cluster to primary?`

   `The current primary cluster in primary region will become secondary and will stop accepting writes after this operation completes. Please ensure you update your application stack to direct traffic to the new primary region.`

1. 如果您希望继续提升，请选择 **Confirm（确认）**，如果您不希望继续提升，请选择 **Cancel（取消）**。

如果选择确认，则全局数据存储会转换为 **Modifying（正在修改）**状态，并且在提升完成之前不可用。

## 从全局数据存储中删除区域
<a name="Redis-Global-Datastore-Console-Remove-Region"></a>

您可以按照以下过程从全局数据存储中删除 AWS 区域。

**从全局数据存储中删除 AWS 区域**

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

1. 在导航窗格中，选择**全局数据存储**。

1. 选择一个全局数据存储。

1. 选择要删除的 **Region（区域）**。

1. 选择 **Remove region（删除区域）**。
**注意**  
此选项仅适用于辅助集群。

   然后，系统会提示您确认您的决定，并显示以下警告：` Removing the region will remove your only available cross region replica for the primary cluster. Your primary cluster will no longer be set up for disaster recovery and improved read latency in remote region. Are you sure you want to remove the selected region from the global datastore?`

1. 如果您希望继续提升，请选择 **Confirm（确认）**，如果您不希望继续提升，请选择 **Cancel（取消）**。

如果您选择确认，则会删除 AWS 区域，且辅助集群不再接收复制更新。

## 删除全局数据存储
<a name="Redis-Global-Datastores-Console-Delete-GlobalDatastore"></a>

要删除全局数据存储，请先删除所有辅助集群。有关更多信息，请参阅 [从全局数据存储中删除区域](#Redis-Global-Datastore-Console-Remove-Region)。这样做会使全局数据存储处于 **primary-only（仅主集群）**状态。

**删除全局数据存储**

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

1. 在导航窗格中，选择**全局数据存储**。

1. 在 **Global Datastore Name（全局数据存储名称）**下，选择要删除的全局数据存储，然后选择 **Delete（删除）**。

   然后，系统会提示您确认您的决定，并显示以下警告：`Are you sure you want to delete this Global Datastore?`

1. 选择 **Delete（删除）**。

全局数据存储将转换为 **Deleting（正在删除）**状态。

# 使用全局数据存储 (CLI)
<a name="Redis-Global-Datastores-CLI"></a>

您可以使用 AWS Command Line Interface (AWS CLI) 从命令行管理多个 AWS 服务并通过脚本自动执行这些服务。您可以使用 AWS CLI 执行临时（一次性）操作。

## 下载和配置 AWS CLI
<a name="Redis-Global-Datastores-Downloading-CLI"></a>

AWS CLI 在 Windows、macOS 或 Linux 上运行。按照以下步骤下载和并对其进行配置。

**下载、安装和配置 CLI**

1. 在 [AWS Command Line Interface](https://aws.amazon.com/cli) 网页上下载 AWS CLI。

1. 按照 *AWS Command Line Interface 用户指南*中的说明安装 AWS CLI 和配置 AWS CLI。

## 将 AWS CLI 与全局数据存储结合使用
<a name="Redis-Global-Datastores-Using-CLI"></a>

使用以下 CLI 操作来处理全局数据存储：
+ [create-global-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/create-global-replication-group.html)

  ```
  aws elasticache create-global-replication-group \
     --global-replication-group-id-suffix my global datastore  \
     --primary-replication-group-id sample-repl-group  \
     --global-replication-group-description an optional description of the global datastore
  ```

  Amazon ElastiCache 会在全局数据存储 ID 被创建时自动对其应用前缀。每个 AWS 区域有自己的前缀。例如，在美国西部（北加利福尼亚）区域创建的全局数据存储 ID 以“virxk”和您提供的后缀名称开头。后缀与自动生成的前缀相结合，保证了全局数据存储名称在多个区域中的唯一性。

  下表列出了每个 AWS 区域及其全局数据存储 ID 前缀。

    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonElastiCache/latest/dg/Redis-Global-Datastores-CLI.html)
+  [create-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/create-replication-group.html) – 使用此操作可通过向 `--global-replication-group-id` 参数提供全局数据存储的名称来创建全局数据存储的辅助集群。

  ```
  aws elasticache create-replication-group \
    --replication-group-id secondary replication group name \
    --replication-group-description “Replication group description" \
    --global-replication-group-id global datastore name
  ```

  当调用此操作并传入 `--global-replication-group-id` 值时，ElastiCache 会从全局复制组的主复制组中推断下列参数的值。请勿传入这些参数的值：

  `"PrimaryClusterId",`

  `"AutomaticFailoverEnabled",`

  ` "NumNodeGroups",`

  ` "CacheParameterGroupName",`

  ` "CacheNodeType",`

  ` "Engine",`

  ` "EngineVersion",`

  ` "CacheSecurityGroupNames",`

  ` "EnableTransitEncryption",`

  ` "AtRestEncryptionEnabled",`

  ` "SnapshotArns",`

  ` "SnapshotName"`
+ [describe-global-replication-groups](https://docs.aws.amazon.com/cli/latest/reference/elasticache/describe-global-replication-groups.html)

  ```
  aws elasticache describe-global-replication-groups \
     --global-replication-group-id my global datastore  \
     --show-member-info an optional parameter that returns a list of the primary and secondary clusters that make up the global datastore
  ```
+ [modify-global-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-global-replication-group.html)

  ```
  aws elasticache modify-global-replication-group \
     --global-replication-group-id my global datastore  \
     --automatic-failover-enabled \
     --cache-node-type node type \
     --cache-parameter-group-name parameter group name \ 
     --engine-version engine version \
     -—apply-immediately \
     --global-replication-group-description description
  ```

  **ElastiCache GlobalDataStore 的 Redis 到 OSS Valkey 跨引擎升级**

  您可以使用控制台、API 或 CLI 将现有 Redis OSS 全局复制组升级到 Valkey。

  如果您有现成的 Redis OSS 全局复制组，您可以使用 modify-global-replication-group API 指定新引擎和引擎版本，从而升级到 Valkey。

  对于 Linux、macOS 或 Unix：

  ```
  aws elasticache modify-global-replication-group \
     --global-replication-group-id myGlobalReplGroup \
     --engine valkey \
     --apply-immediately \
     --engine-version 8.0
  ```

  对于 Windows：

  ```
  aws elasticache modify-global-replication-group ^
     --global-replication-group-id myGlobalReplGroup ^
     --engine valkey ^
     --apply-immediately ^
     --engine-version 8.0
  ```

  如果您对要升级的现有 Redis OSS 全局复制组应用了自定义缓存参数组，则还需要在请求中传递自定义 Valkey 缓存参数组。输入 Valkey 自定义参数组必须具有与现有 Redis OSS 自定义参数组相同的 Redis OSS 静态参数值。

  对于 Linux、macOS 或 Unix：

  ```
  aws elasticache modify-global-replication-group \
     --global-replication-group-id myGlobalReplGroup \
     --engine valkey \
     --engine-version 8.0 \
     --apply-immediately \
     --cache-parameter-group-name myParamGroup
  ```

  对于 Windows：

  ```
  aws elasticache modify-global-replication-group ^
     --global-replication-group-id myGlobalReplGroup ^
     --engine valkey ^
     --engine-version 8.0 ^
     --apply-immediately ^
     --cache-parameter-group-name myParamGroup
  ```
+ [delete-global-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/delete-global-replication-group.html)

  ```
  aws elasticache delete-global-replication-group \
     --global-replication-group-id my global datastore  \
     --retain-primary-replication-group defaults to true
  ```
+ [disassociate-global-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/disassociate-global-replication-group.html)

  ```
  aws elasticache disassociate-global-replication-group \
     --global-replication-group-id my global datastore  \
     --replication-group-id my secondary cluster  \
     --replication-group-region the AWS Region in which the secondary cluster resides
  ```
+ [failover-global-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/failover-global-replication-group.html)

  ```
  aws elasticache failover-replication-group \
     --global-replication-group-id my global datastore \
     --primary-region The AWS Region of the primary cluster \  
     --primary-replication-group-id  The name of the global datastore, including the suffix.
  ```
+ [increase-node-groups-in-global-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/increase-node-groups-in-global-replication-group.html)

  ```
  aws elasticache increase-node-groups-in-global-replication-group \
     --apply-immediately yes \
     --global-replication-group-id global-replication-group-name \
     --node-group-count 3
  ```
+ [decrease-node-groups-in-global-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/decrease-node-groups-in-global-replication-group.html)

  ```
  aws elasticache decrease-node-groups-in-global-replication-group \
     --apply-immediately yes \
     --global-replication-group-id global-replication-group-name \
     --node-group-count 3
  ```
+ [rebalance-shards-in-global-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/rebalance-slots-in-global-replication-group.html)

  ```
  aws elasticache rebalance-shards-in-global-replication-group \
     --apply-immediately yes \
     --global-replication-group-id global-replication-group-name
  ```

使用 help 列出 ElastiCache for Valkey 或 ElastiCache for Redis OSS 的所有可用命令。

```
aws elasticache help
```

您还可以使用帮助来描述特定命令并了解有关其用法的详细信息：

```
aws elasticache create-global-replication-group help
```

# 使用复制组时的高可用性
<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)。

# 管理 ElastiCache 集群维护
<a name="maintenance-window"></a>

每个集群都有一个每周维护时段，在此期间会应用任何系统更改。在 Valkey 和 Redis OSS 中，复制组的每周维护时段相同。如果在创建或修改集群或复制组时未指定首选维护时段，则 ElastiCache 随机选择一周中的某一天，在您区域的维护时段内分配 60 分钟的维护时段。

这个 60 分钟维护时段是随机从每个地区的 8 小时时间段中选择出来的。下表列出了每个区域分配默认维护时段的时间段。您可以选择区域的维护时段之外的首选维护时段。


| 区域代码 | 区域名称 | 区域维护时段 | 
| --- | --- | --- | 
| ap-northeast-1 | 亚太（东京）区域 | 13:00–21:00 UTC | 
| ap-northeast-2 | 亚太地区（首尔）区域 | 12:00–20:00 UTC | 
| ap-northeast-3 | 亚太地区（大阪）区域 | 12:00–20:00 UTC | 
| ap-southeast-3 | 亚太地区（雅加达）区域 | 14:00–22:00 UTC | 
| ap-south-1 | 亚太地区（孟买）区域 | 17:30–1:30 UTC | 
| ap-southeast-1 | 亚太（新加坡）区域 | 14:00–22:00 UTC | 
| cn-north-1 | 中国（北京）区域 | 14:00–22:00 UTC | 
| cn-northwest-1 | 中国（宁夏）区域 | 14:00–22:00 UTC | 
| ap-east-1 | 亚太地区（香港）区域 | 13:00–21:00 UTC | 
| ap-southeast-2 | 亚太（悉尼）区域 | 12:00–20:00 UTC | 
| eu-west-3 | 欧洲（巴黎）区域 | 23:59–07:29 UTC | 
| af-south-1 | 非洲（开普敦）区域 | 13:00–21:00 UTC | 
| eu-central-1 | 欧洲地区（法兰克福）区域 | 23:00–07:00 UTC | 
| eu-west-1 | 欧洲地区（爱尔兰）区域 | 22:00–06:00 UTC | 
| eu-west-2 | 欧洲地区（伦敦）区域 | 23:00–07:00 UTC | 
| me-south-1 | 中东（巴林）区域 | 13:00–21:00 UTC | 
| me-central-1 | 中东（阿联酋）区域 | 13:00–21:00 UTC | 
| eu-south-1 | 欧洲地区（米兰） | 21:00–05:00 UTC | 
| sa-east-1 | 南美洲（圣保罗）区域 | 01:00–09:00 UTC | 
| us-east-1 | 美国东部（弗吉尼亚州北部）区域 | 03:00–11:00 UTC | 
| us-east-2 | 美国东部（俄亥俄州）区域 | 04:00–12:00 UTC | 
| us-gov-west-1 | AWS GovCloud (US) region | 06:00–14:00 UTC | 
| us-west-1 | 美国西部（北加利福尼亚）区域 | 06:00–14:00 UTC | 
| us-west-2 | 美国西部（俄勒冈）区域 | 06:00–14:00 UTC | 

**更改集群或复制组的维护时段**  
维护时段应当选在使用量最小的时段上，因而可能必须不时予以修改。您可以修改您的集群或复制组以指定一个持续时间长达 24 小时的时间范围，您已请求的任何维护活动均应在此期间发生。您请求的任何延期或待处理集群修改都将在此期间进行。

**注意**  
如果要使用 AWS 管理控制台立即应用节点类型修改和/或引擎升级，请选择**立即应用**框。否则，将在下一计划的维护时段中应用这些修改。要使用 API，请参阅 [modify-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-replication-group.html) 或 [modify-cache-cluster](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-cache-cluster.html)。

**更多信息**  
有关维护时段和节点替换的信息，请参阅：
+ [ElastiCache 维护](https://aws.amazon.com/elasticache/elasticache-maintenance/) – 有关维护和节点替换的常见问题
+ [替换节点（Memcached）](CacheNodes.NodeReplacement-mc.md) – 管理 Memcached 的节点替换
+ [修改 ElastiCache 集群](Clusters.Modify.md) – 更改集群的维护时段
+ [替换节点（Valkey 和 Redis OSS）](CacheNodes.NodeReplacement.md) – 管理节点替换
+ [修改复制组](Replication.Modify.md) – 更改复制组的维护时段

# 使用 ElastiCache 参数组配置引擎参数
<a name="ParameterGroups"></a>

Amazon ElastiCache 使用参数控制节点和集群的运行时属性。通常，更新的引擎版本包含用于支持更新功能的其他参数。有关 Memcached 参数的表，请参阅[Memcached 特定的参数](ParameterGroups.Engine.md#ParameterGroups.Memcached)。有关 Valkey 和 Redis OSS 参数的表，请参阅[Valkey 和 Redis OSS 参数](ParameterGroups.Engine.md#ParameterGroups.Redis)。

正如您所预期的，某些参数值（例如 `maxmemory`）由引擎和节点类型决定。有关由节点类型决定的这些 Memcached 参数值的表，请参阅[特定于 Memcached 节点类型的参数](ParameterGroups.Engine.md#ParameterGroups.Memcached.NodeSpecific)。有关由节点类型决定的这些 Valkey 和 Redis OSS 参数值的表，请参阅[特定于 Redis OSS 节点类型的参数](ParameterGroups.Engine.md#ParameterGroups.Redis.NodeSpecific)。

**注意**  
有关 Memcached 特定的参数的列表，请参阅 [Memcached 特定的参数](ParameterGroups.Engine.md#ParameterGroups.Memcached)。

**Topics**
+ [ElastiCache 中的参数管理](ParameterGroups.Management.md)
+ [ElastiCache 中的缓存参数组层](ParameterGroups.Tiers.md)
+ [创建 ElastiCache 参数组](ParameterGroups.Creating.md)
+ [按名称列出 ElastiCache 参数组](ParameterGroups.ListingGroups.md)
+ [列出 ElastiCache 参数组的值](ParameterGroups.ListingValues.md)
+ [修改 ElastiCache 参数组](ParameterGroups.Modifying.md)
+ [删除 ElastiCache 参数组](ParameterGroups.Deleting.md)
+ [引擎特定参数](ParameterGroups.Engine.md)

# ElastiCache 中的参数管理
<a name="ParameterGroups.Management"></a>

ElastiCache 参数已分组到指定的参数组中，以便更轻松地管理参数。参数组表示在启动期间传递给引擎软件的参数的特定值组合。这些值确定每个节点上的引擎进程在运行时的行为方式。特定参数组中的参数值应用于与该组关联的所有节点（不论这些节点属于哪个集群）。

要优化集群的性能，您可以修改某些参数值或更改集群的参数组。
+ 您无法修改或删除默认参数组。如果您需要自定义参数值，则必须创建自定义参数组。
+ 对于 Memcached，参数组系列与您分配给参数组的集群必须兼容。例如，如果您的集群运行 Memcached 版本 1.4.8，您只能使用 Memcached 1.4 系列中的参数组 (默认或自定义)。

  对于 Redis OSS，参数组系列与您分配给参数组的集群必须兼容。例如，如果您的集群运行 Redis OSS 版本 3.2.10，您只能使用 Redis OSS 3.2 系列中的参数组（默认或自定义）。
+ 如果更改某个集群的参数组，则任何可以按照条件修改的参数的值在当前参数组和新参数组中必须相同。
+ 对于 Memcached，当您更改集群的参数时，更改将立即应用于集群。无论是更改集群的参数组本身还是更改集群参数组中的参数值，都是如此。要确定何时应用特定参数更改，请参阅表格中的**更改生效**列以了解 [Memcached 特定的参数](ParameterGroups.Engine.md#ParameterGroups.Memcached)。有关重启集群节点的信息，请参阅[重启集群](Clusters.html#Rebooting)。
+ 对于 Redis OSS，当您更改集群的参数时，所做的更改将立即或在集群节点重启后应用于集群，但以下说明的例外情况除外。无论是更改集群的参数组本身还是更改集群参数组中的参数值，都是如此。要确定何时应用特定参数更改，请参阅表格中的**更改生效**列以了解 [Valkey 和 Redis OSS 参数](ParameterGroups.Engine.md#ParameterGroups.Redis)。

  有关重启 Valkey 或 Redis OSS 节点的更多信息，请参阅[重启节点](nodes.rebooting.md)。
**Valkey 或 Redis OSS（已启用集群模式）参数更改**  
如果要更改 Valkey 或 Redis OSS（已启用集群模式）集群上的以下参数，请按照随后的步骤操作。  
activerehashing
数据库
创建集群的手动备份。请参阅[进行手动备份](backups-manual.md)。
请删除集群。请参阅[删除集群](Clusters.html#Delete)。
使用修改的参数组和备份还原集群，以便为新集群创建种子。请参阅[从备份还原到新缓存](backups-restoring.md)。
对其他参数的更改不需要执行此操作。
+ 您可以将参数组与 Valkey 和 Redis OSS 全局数据存储关联。*全局数据存储*是跨 AWS 区域的一个或多个集群的集合。在这种情况下，参数组由组成全局数据存储的所有集群共享。对主集群的参数组作出的任何修改都会复制到全局数据存储中的所有剩余集群。有关更多信息，请参阅 [使用全球数据存储跨AWS区域复制](Redis-Global-Datastore.md)。

  您可以通过查看以下位置来检查参数组是否属于全局数据存储：
  + ElastiCache 控制台的 **Parameter Groups（参数组）**页面上的是/否 **Global（全局）**属性 
  + [CacheParameterGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CacheParameterGroup.html) API 操作的是/否 `IsGlobal` 属性

# ElastiCache 中的缓存参数组层
<a name="ParameterGroups.Tiers"></a>

Amazon ElastiCache 具有三层缓存参数组，如下所示。

![\[图像：Amazon ElastiCache 参数组层\]](http://docs.aws.amazon.com/zh_cn/AmazonElastiCache/latest/dg/images/ElastiCache-ParameterGroups-Tiers.png)


*Amazon ElastiCache 参数组层*

**全局默认值**

区域中所有 Amazon ElastiCache 客户的顶级根参数组。

全局默认缓存参数组：
+ 预留供 ElastiCache 使用，对客户不可用。

**客户默认值**

创建供用户使用的全局默认缓存参数组的副本。

客户默认缓存参数组：
+ 由 ElastiCache 创建和所有。
+ 可供客户用作缓存参数组，用于运行此缓存参数组所支持引擎版本的任意集群。
+ 无法由客户编辑。

**客户拥有**

客户默认缓存参数组的副本。客户拥有的缓存参数组在客户创建缓存参数组时创建。

客户拥有的缓存参数组：
+ 由客户创建并拥有。
+ 可以分配给任意客户兼容的集群。
+ 可由客户修改用于创建自定义缓存参数组。

  并非所有参数值均可修改。有关 Memcached 值的更多信息，请参阅[Memcached 特定的参数](ParameterGroups.Engine.md#ParameterGroups.Memcached)？ 有关 Valkey 和 Redis OSS 值的更多信息，请参阅 [Valkey 和 Redis OSS 参数](ParameterGroups.Engine.md#ParameterGroups.Redis)

# 创建 ElastiCache 参数组
<a name="ParameterGroups.Creating"></a>

如果存在一个或多个要从默认值更改的参数值，则需要创建新参数组。您可以使用 ElastiCache 控制台、AWS CLI 或 ElastiCache API 创建参数组。

## 创建 ElastiCache 参数组（控制台）
<a name="ParameterGroups.Creating.CON"></a>

以下过程介绍了如何使用 ElastiCache 控制台创建参数组。

**使用 ElastiCache 控制台创建参数组**

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

1. 要查看所有可用的参数组列表，请在导航窗格左侧选择**Parameter Groups**。

1. 要创建参数组，请选择 **Create Parameter Group**。

   **Create Parameter Group（创建参数组）**屏幕随即出现。

1. 从 **Family** 列表中，选择将作为参数组的模板的参数组系列。

   参数组系列（例如 *memcached1.4* 或 *redis3.2*）定义了参数组中的实际参数及其初始值。参数组系列必须与集群的引擎和版本一致。

1. 在 **Name** 框中，键入此参数组的唯一名称。

   在创建集群或修改集群的参数组时，您将按参数组的名称选择参数组。因此，建议名称具有信息性，并且以某种方法标识该参数组的系列。

   参数组命名约束如下：
   + 必须以 ASCII 字母开头。
   + 只能包含 ASCII 字母、数字和连字符。
   + 长度必须介于 1 到 255 个字符之间。
   + 不能包含两个连续连字符。
   + 不能以连字符结束。

1. 在 **Description** 框中，键入参数组的说明。

1. 要创建参数组，请选择 **Create**。

   要在不创建参数组的情况下终止此过程，请选择 **Cancel**。

1. 创建参数组后，它将具有系列的默认值。要更改默认值，您必须修改参数组。有关更多信息，请参阅 [修改 ElastiCache 参数组](ParameterGroups.Modifying.md)。

## 创建 ElastiCache 参数组（AWS CLI）
<a name="ParameterGroups.Creating.CLI"></a>

要使用 AWS CLI 创建参数组，请使用带以下参数的命令 `create-cache-parameter-group`。
+ `--cache-parameter-group-name` – 参数组的名称。

  参数组命名约束如下：
  + 必须以 ASCII 字母开头。
  + 只能包含 ASCII 字母、数字和连字符。
  + 长度必须介于 1 到 255 个字符之间。
  + 不能包含两个连续连字符。
  + 不能以连字符结束。
+ `--cache-parameter-group-family` – 参数组的引擎和版本系列。
+ `--description` – 用户提供的参数组描述。

**Example**  
以下示例使用 memcached1.4 系列作为模板来创建名为 *myMem14* 的参数组。  
对于 Linux、macOS 或 Unix：  

```
aws elasticache create-cache-parameter-group \
    --cache-parameter-group-name myMem14  \
    --cache-parameter-group-family memcached1.4 \
    --description "My first parameter group"
```
对于 Windows：  

```
aws elasticache create-cache-parameter-group ^
    --cache-parameter-group-name myMem14  ^
    --cache-parameter-group-family memcached1.4 ^
    --description "My first parameter group"
```
该命令的输出内容应类似如下所示。  

```
{
    "CacheParameterGroup": {
        "CacheParameterGroupName": "myMem14", 
        "CacheParameterGroupFamily": "memcached1.4", 
        "Description": "My first  parameter group"
    }
}
```

**Example**  
以下示例使用 redis2.8 系列作为模板来创建名为 *myRed28* 的参数组。  
对于 Linux、macOS 或 Unix：  

```
aws elasticache create-cache-parameter-group \
    --cache-parameter-group-name myRed28  \
    --cache-parameter-group-family redis2.8 \
    --description "My first parameter group"
```
对于 Windows：  

```
aws elasticache create-cache-parameter-group ^
    --cache-parameter-group-name myRed28  ^
    --cache-parameter-group-family redis2.8 ^
    --description "My first parameter group"
```
该命令的输出内容应类似如下所示。  

```
{
    "CacheParameterGroup": {
        "CacheParameterGroupName": "myRed28", 
        "CacheParameterGroupFamily": "redis2.8", 
        "Description": "My first parameter group"
    }
}
```

创建参数组后，它将具有系列的默认值。要更改默认值，您必须修改参数组。有关更多信息，请参阅 [修改 ElastiCache 参数组](ParameterGroups.Modifying.md)。

有关更多信息，请参阅 [https://docs.aws.amazon.com/cli/latest/reference/elasticache/create-cache-parameter-group.html](https://docs.aws.amazon.com/cli/latest/reference/elasticache/create-cache-parameter-group.html)。

## 创建 ElastiCache 参数组（ElastiCache API）
<a name="ParameterGroups.Creating.API"></a>

要使用 ElastiCache API 创建参数组，请使用带以下参数的 `CreateCacheParameterGroup` 操作。
+ `ParameterGroupName` – 参数组的名称。

  参数组命名约束如下：
  + 必须以 ASCII 字母开头。
  + 只能包含 ASCII 字母、数字和连字符。
  + 长度必须介于 1 到 255 个字符之间。
  + 不能包含两个连续连字符。
  + 不能以连字符结束。
+ `CacheParameterGroupFamily` – 参数组的引擎和版本系列。例如 `memcached1.4`。
+ `CacheParameterGroupFamily` – 参数组的引擎和版本系列。例如 `redis2.8`。
+ `Description` – 用户提供的参数组描述。

**Example**  
以下示例使用 memcached1.4 系列作为模板来创建名为 *myMem14* 的参数组。  

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=CreateCacheParameterGroup
   &CacheParameterGroupFamily=memcached1.4
   &CacheParameterGroupName=myMem14
   &Description=My%20first%20parameter%20group
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &Version=2015-02-02
   &X-Amz-Credential=<credential>
```
来自此操作的响应应类似如下所示。  

```
<CreateCacheParameterGroupResponse xmlns="http://elasticache.amazonaws.com/doc/2013-06-15/">
  <CreateCacheParameterGroupResult>
    <CacheParameterGroup>
      <CacheParameterGroupName>myMem14</CacheParameterGroupName>
      <CacheParameterGroupFamily>memcached1.4</CacheParameterGroupFamily>
      <Description>My first  parameter group</Description>
    </CacheParameterGroup>
  </CreateCacheParameterGroupResult>
  <ResponseMetadata>
    <RequestId>d8465952-af48-11e0-8d36-859edca6f4b8</RequestId>
  </ResponseMetadata>
</CreateCacheParameterGroupResponse>
```

**Example**  
以下示例使用 redis2.8 系列作为模板来创建名为 *myRed28* 的参数组。  

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=CreateCacheParameterGroup
   &CacheParameterGroupFamily=redis2.8
   &CacheParameterGroupName=myRed28
   &Description=My%20first%20parameter%20group
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &Version=2015-02-02
   &X-Amz-Credential=<credential>
```
来自此操作的响应应类似如下所示。  

```
<CreateCacheParameterGroupResponse xmlns="http://elasticache.amazonaws.com/doc/2013-06-15/">
  <CreateCacheParameterGroupResult>
    <CacheParameterGroup>
      <CacheParameterGroupName>myRed28</CacheParameterGroupName>
      <CacheParameterGroupFamily>redis2.8</CacheParameterGroupFamily>
      <Description>My first parameter group</Description>
    </CacheParameterGroup>
  </CreateCacheParameterGroupResult>
  <ResponseMetadata>
    <RequestId>d8465952-af48-11e0-8d36-859edca6f4b8</RequestId>
  </ResponseMetadata>
</CreateCacheParameterGroupResponse>
```

创建参数组后，它将具有系列的默认值。要更改默认值，您必须修改参数组。有关更多信息，请参阅 [修改 ElastiCache 参数组](ParameterGroups.Modifying.md)。

有关更多信息，请参阅 [https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CreateCacheParameterGroup.html](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CreateCacheParameterGroup.html)。

# 按名称列出 ElastiCache 参数组
<a name="ParameterGroups.ListingGroups"></a>

您可以使用 ElastiCache 控制台、AWS CLI 或 ElastiCache API 列出参数组。

## 按名称列出参数组（控制台）
<a name="ParameterGroups.ListingGroups.CON"></a>

以下过程介绍了如何使用 ElastiCache 控制台查看参数组列表。

**使用 ElastiCache 控制台列出参数组**

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

1. 要查看所有可用的参数组列表，请在导航窗格左侧选择**Parameter Groups**。

## 按名称列出 ElastiCache 参数组（AWS CLI）
<a name="ParameterGroups.ListingGroups.CLI"></a>

要使用 AWS CLI 生成参数组的列表，请使用命令 `describe-cache-parameter-groups`。如果提供了参数组的名称，将只会列出该参数组。如果未提供参数组的名称，将列出最多 `--max-records` 个参数组。在任一情况下，都会列出参数组的名称、系列和描述。

**Example**  
以下示例代码列出了参数组 *myMem14*。  
对于 Linux、macOS 或 Unix：  

```
aws elasticache describe-cache-parameter-groups \
    --cache-parameter-group-name myMem14
```
对于 Windows：  

```
aws elasticache describe-cache-parameter-groups ^
    --cache-parameter-group-name myMem14
```
该命令的输出内容将类似如下所示，列出参数组的名称、系列和描述。  

```
{
    "CacheParameterGroups": [
	    {
	        "CacheParameterGroupName": "myMem14", 
	        "CacheParameterGroupFamily": "memcached1.4", 
	        "Description": "My first parameter group"
	    }
    ]
}
```

**Example**  
以下示例代码列出了参数组 *myRed28*。  
对于 Linux、macOS 或 Unix：  

```
aws elasticache describe-cache-parameter-groups \
    --cache-parameter-group-name myRed28
```
对于 Windows：  

```
aws elasticache describe-cache-parameter-groups ^
    --cache-parameter-group-name myRed28
```
该命令的输出内容将类似如下所示，列出参数组的名称、系列和描述。  

```
{
    "CacheParameterGroups": [
	    {
	        "CacheParameterGroupName": "myRed28", 
	        "CacheParameterGroupFamily": "redis2.8", 
	        "Description": "My first parameter group"
	    }
    ]
}
```

**Example**  
以下示例代码列出了在 Redis OSS 引擎 5.0.6 和更高版本上运行的参数组 *myRed56*。如果参数组是 [使用全球数据存储跨AWS区域复制](Redis-Global-Datastore.md) 的一部分，则在输出中返回的 `IsGlobal` 属性值将为 `Yes`。  
对于 Linux、macOS 或 Unix：  

```
aws elasticache describe-cache-parameter-groups \
    --cache-parameter-group-name myRed56
```
对于 Windows：  

```
aws elasticache describe-cache-parameter-groups ^
    --cache-parameter-group-name myRed56
```
该命令的输出内容将类似如下所示，列出参数组的名称、系列和描述，以及是否属于全局数据存储。  

```
{
    "CacheParameterGroups": [
	    {
	        "CacheParameterGroupName": "myRed56", 
	        "CacheParameterGroupFamily": "redis5.0", 	        
	        "Description": "My first parameter group",
	        "IsGlobal": "yes"	        
	    }
    ]
}
```

**Example**  
以下示例代码列出最多 10 个参数组。  

```
aws elasticache describe-cache-parameter-groups --max-records 10
```
该命令的 JSON 输出将类似如下所示，列出每个参数组的名称、系列和描述，如果是 redis5.6，还会列出该参数组是否属于全局数据存储 (isGlobal)。  

```
{
    "CacheParameterGroups": [
        {
            "CacheParameterGroupName": "custom-redis32", 
            "CacheParameterGroupFamily": "redis3.2", 
            "Description": "custom parameter group with reserved-memory > 0"
        }, 
        {
            "CacheParameterGroupName": "default.memcached1.4", 
            "CacheParameterGroupFamily": "memcached1.4", 
            "Description": "Default parameter group for memcached1.4"
        }, 
        {
            "CacheParameterGroupName": "default.redis2.6", 
            "CacheParameterGroupFamily": "redis2.6", 
            "Description": "Default parameter group for redis2.6"
        }, 
        {
            "CacheParameterGroupName": "default.redis2.8", 
            "CacheParameterGroupFamily": "redis2.8", 
            "Description": "Default parameter group for redis2.8"
        }, 
        {
            "CacheParameterGroupName": "default.redis3.2", 
            "CacheParameterGroupFamily": "redis3.2", 
            "Description": "Default parameter group for redis3.2"
        }, 
        {
            "CacheParameterGroupName": "default.redis3.2.cluster.on", 
            "CacheParameterGroupFamily": "redis3.2", 
            "Description": "Customized default parameter group for redis3.2 with cluster mode on"
        },
        {
            "CacheParameterGroupName": "default.redis5.6.cluster.on", 
            "CacheParameterGroupFamily": "redis5.0", 
            "Description": "Customized default parameter group for redis5.6 with cluster mode on",
            "isGlobal": "yes"
        },
    ]
}
```

有关更多信息，请参阅 [https://docs.aws.amazon.com/cli/latest/reference/elasticache/describe-cache-parameter-groups.html](https://docs.aws.amazon.com/cli/latest/reference/elasticache/describe-cache-parameter-groups.html)。

## 按名称列出 ElastiCache 参数组（ElastiCache API）
<a name="ParameterGroups.ListingGroups.API"></a>

要使用 ElastiCache API 生成参数组的列表，请使用 `DescribeCacheParameterGroups` 操作。如果提供了参数组的名称，将只会列出该参数组。如果未提供参数组的名称，将列出最多 `MaxRecords` 个参数组。在任一情况下，都会列出参数组的名称、系列和描述。

**Example**  
以下示例代码列出了参数组 *myMem14*。  

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=DescribeCacheParameterGroups
   &CacheParameterGroupName=myMem14
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &Version=2015-02-02
   &X-Amz-Credential=<credential>
```
来自此操作的响应应类似如下所示，列出每个参数组的名称、系列和描述。  

```
<DescribeCacheParameterGroupsResponse xmlns="http://elasticache.amazonaws.com/doc/2013-06-15/">
  <DescribeCacheParameterGroupsResult>
    <CacheParameterGroups>
      <CacheParameterGroup>
        <CacheParameterGroupName>myMem14</CacheParameterGroupName>
        <CacheParameterGroupFamily>memcached1.4</CacheParameterGroupFamily>
        <Description>My custom Memcached 1.4 parameter group</Description>
      </CacheParameterGroup>
    </CacheParameterGroups>
  </DescribeCacheParameterGroupsResult>
  <ResponseMetadata>
    <RequestId>3540cc3d-af48-11e0-97f9-279771c4477e</RequestId>
  </ResponseMetadata>
</DescribeCacheParameterGroupsResponse>
```

**Example**  
以下示例代码列出最多 10 个参数组。  

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=DescribeCacheParameterGroups
   &MaxRecords=10
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &Version=2015-02-02
   &X-Amz-Credential=<credential>
```
此操作所得到的响应将类似如下所示，列出每个参数组的名称、系列和描述，如果是 redis5.6，还会列出该参数组是否属于全局数据存储 (isGlobal)。  

```
<DescribeCacheParameterGroupsResponse xmlns="http://elasticache.amazonaws.com/doc/2013-06-15/">
  <DescribeCacheParameterGroupsResult>
    <CacheParameterGroups>
      <CacheParameterGroup>
        <CacheParameterGroupName>myRedis28</CacheParameterGroupName>
        <CacheParameterGroupFamily>redis2.8</CacheParameterGroupFamily>
        <Description>My custom Redis 2.8 parameter group</Description>
      </CacheParameterGroup>
      <CacheParameterGroup>
        <CacheParameterGroupName>myMem14</CacheParameterGroupName>
        <CacheParameterGroupFamily>memcached1.4</CacheParameterGroupFamily>
        <Description>My custom Memcached 1.4 parameter group</Description>
      </CacheParameterGroup>
       <CacheParameterGroup>
        <CacheParameterGroupName>myRedis56</CacheParameterGroupName>
        <CacheParameterGroupFamily>redis5.0</CacheParameterGroupFamily>
        <Description>My custom redis 5.6 parameter group</Description>
        <isGlobal>yes</isGlobal>
      </CacheParameterGroup>
    </CacheParameterGroups>
  </DescribeCacheParameterGroupsResult>
  <ResponseMetadata>
    <RequestId>3540cc3d-af48-11e0-97f9-279771c4477e</RequestId>
  </ResponseMetadata>
</DescribeCacheParameterGroupsResponse>
```

**Example**  
以下示例代码列出了参数组 *myRed28*。  

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=DescribeCacheParameterGroups
   &CacheParameterGroupName=myRed28
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &Version=2015-02-02
   &X-Amz-Credential=<credential>
```
来自此操作的响应将类似如下所示，列出名称、系列和描述。  

```
<DescribeCacheParameterGroupsResponse xmlns="http://elasticache.amazonaws.com/doc/2013-06-15/">
  <DescribeCacheParameterGroupsResult>
    <CacheParameterGroups>
      <CacheParameterGroup>
        <CacheParameterGroupName>myRed28</CacheParameterGroupName>
        <CacheParameterGroupFamily>redis2.8</CacheParameterGroupFamily>
        <Description>My custom Redis 2.8 parameter group</Description>
      </CacheParameterGroup>
    </CacheParameterGroups>
  </DescribeCacheParameterGroupsResult>
  <ResponseMetadata>
    <RequestId>3540cc3d-af48-11e0-97f9-279771c4477e</RequestId>
  </ResponseMetadata>
</DescribeCacheParameterGroupsResponse>
```

**Example**  
以下示例代码列出了参数组 *myRed56*。  

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=DescribeCacheParameterGroups
   &CacheParameterGroupName=myRed56
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &Version=2015-02-02
   &X-Amz-Credential=<credential>
```
此操作所得到的响应将类似如下所示，列出名称、系列、描述，以及该参数组是否属于全局数据存储 (isGlobal)。  

```
<DescribeCacheParameterGroupsResponse xmlns="http://elasticache.amazonaws.com/doc/2013-06-15/">
  <DescribeCacheParameterGroupsResult>
    <CacheParameterGroups>
      <CacheParameterGroup>
        <CacheParameterGroupName>myRed56</CacheParameterGroupName>
        <CacheParameterGroupFamily>redis5.0</CacheParameterGroupFamily>
        <Description>My custom Redis 5.6 parameter group</Description>
        <isGlobal>yes</isGlobal>
      </CacheParameterGroup>
    </CacheParameterGroups>
  </DescribeCacheParameterGroupsResult>
  <ResponseMetadata>
    <RequestId>3540cc3d-af48-11e0-97f9-279771c4477e</RequestId>
  </ResponseMetadata>
</DescribeCacheParameterGroupsResponse>
```

有关更多信息，请参阅 [https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DescribeCacheParameterGroups.html](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DescribeCacheParameterGroups.html)。

# 列出 ElastiCache 参数组的值
<a name="ParameterGroups.ListingValues"></a>

您可以使用 ElastiCache 控制台、AWS CLI 或 ElastiCache API 列出参数组的参数及其值。

## 列出 ElastiCache 参数组的值（控制台）
<a name="ParameterGroups.ListingValues.CON"></a>

以下过程介绍了如何使用 ElastiCache 控制台列出参数组的参数及其值。

**使用 ElastiCache 控制台列出参数组的参数及其值**

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

1. 要查看所有可用的参数组列表，请在导航窗格左侧选择**Parameter Groups**。

1. 通过选择参数组名称左侧的框来选择要列出其中包含的参数及其值的参数组。

   屏幕底部将列出这些参数及其值。由于参数的数量，您可能需要上下滚动来查找所需的参数。

## 列出参数组的值 (AWS CLI)
<a name="ParameterGroups.ListingValues.CLI"></a>

要使用 AWS CLI 列出参数组的参数及其值，请使用命令 `describe-cache-parameters`。

**Example**  
以下示例代码列出了参数组 *myMem14* 的所有 Memcached 参数及其值。  
对于 Linux、macOS 或 Unix：  

```
aws elasticache describe-cache-parameters \
    --cache-parameter-group-name myMem14
```
对于 Windows：  

```
aws elasticache describe-cache-parameters ^
    --cache-parameter-group-name myMem14
```

**Example**  
以下示例代码列出了参数组 *myRedis28* 的所有参数及其值。  
对于 Linux、macOS 或 Unix：  

```
aws elasticache describe-cache-parameters \
    --cache-parameter-group-name myRedis28
```
对于 Windows：  

```
aws elasticache describe-cache-parameters ^
    --cache-parameter-group-name myRed28
```

有关更多信息，请参阅 [https://docs.aws.amazon.com/cli/latest/reference/elasticache/describe-cache-parameters.html](https://docs.aws.amazon.com/cli/latest/reference/elasticache/describe-cache-parameters.html)。

## 列出参数组的值 (ElastiCache API)
<a name="ParameterGroups.ListingValues.API"></a>

要使用 ElastiCache API 列出参数组的参数及其值，请使用 `DescribeCacheParameters` 操作。

**Example**  
以下示例代码列出了参数组 *myMem14* 的所有 Memcached 参数。  

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=DescribeCacheParameters
   &CacheParameterGroupName=myMem14
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &Version=2015-02-02
   &X-Amz-Credential=<credential>
```
来自此操作的响应将类似如下所示。此响应已被截断。  

```
<DescribeCacheParametersResponse xmlns="http://elasticache.amazonaws.com/doc/2013-06-15/">
  <DescribeCacheParametersResult>
    <CacheClusterClassSpecificParameters>
      <CacheNodeTypeSpecificParameter>
        <DataType>integer</DataType>
        <Source>system</Source>
        <IsModifiable>false</IsModifiable>
        <Description>The maximum configurable amount of memory to use to store items, in megabytes.</Description>
        <CacheNodeTypeSpecificValues>
          <CacheNodeTypeSpecificValue>
            <Value>1000</Value>
            <CacheClusterClass>cache.c1.medium</CacheClusterClass>
          </CacheNodeTypeSpecificValue>
          <CacheNodeTypeSpecificValue>
            <Value>6000</Value>
            <CacheClusterClass>cache.c1.xlarge</CacheClusterClass>
          </CacheNodeTypeSpecificValue>
          <CacheNodeTypeSpecificValue>
            <Value>7100</Value>
            <CacheClusterClass>cache.m1.large</CacheClusterClass>
          </CacheNodeTypeSpecificValue>
          <CacheNodeTypeSpecificValue>
            <Value>1300</Value>
            <CacheClusterClass>cache.m1.small</CacheClusterClass>
          </CacheNodeTypeSpecificValue>
          
...output omitted...

    </CacheClusterClassSpecificParameters>
  </DescribeCacheParametersResult>
  <ResponseMetadata>
    <RequestId>6d355589-af49-11e0-97f9-279771c4477e</RequestId>
  </ResponseMetadata>
</DescribeCacheParametersResponse>
```

**Example**  
以下示例代码列出了参数组 *myRed28* 的所有参数。  

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=DescribeCacheParameters
   &CacheParameterGroupName=myRed28
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &Version=2015-02-02
   &X-Amz-Credential=<credential>
```
来自此操作的响应将类似如下所示。此响应已被截断。  

```
<DescribeCacheParametersResponse xmlns="http://elasticache.amazonaws.com/doc/2013-06-15/">
  <DescribeCacheParametersResult>
    <CacheClusterClassSpecificParameters>
      <CacheNodeTypeSpecificParameter>
        <DataType>integer</DataType>
        <Source>system</Source>
        <IsModifiable>false</IsModifiable>
        <Description>The maximum configurable amount of memory to use to store items, in megabytes.</Description>
        <CacheNodeTypeSpecificValues>
          <CacheNodeTypeSpecificValue>
            <Value>1000</Value>
            <CacheClusterClass>cache.c1.medium</CacheClusterClass>
          </CacheNodeTypeSpecificValue>
          <CacheNodeTypeSpecificValue>
            <Value>6000</Value>
            <CacheClusterClass>cache.c1.xlarge</CacheClusterClass>
          </CacheNodeTypeSpecificValue>
          <CacheNodeTypeSpecificValue>
            <Value>7100</Value>
            <CacheClusterClass>cache.m1.large</CacheClusterClass>
          </CacheNodeTypeSpecificValue>
          <CacheNodeTypeSpecificValue>
            <Value>1300</Value>
            <CacheClusterClass>cache.m1.small</CacheClusterClass>
          </CacheNodeTypeSpecificValue>
          
...output omitted...

    </CacheClusterClassSpecificParameters>
  </DescribeCacheParametersResult>
  <ResponseMetadata>
    <RequestId>6d355589-af49-11e0-97f9-279771c4477e</RequestId>
  </ResponseMetadata>
</DescribeCacheParametersResponse>
```

有关更多信息，请参阅 [https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DescribeCacheParameters.html](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DescribeCacheParameters.html)。

# 修改 ElastiCache 参数组
<a name="ParameterGroups.Modifying"></a>

**重要**  
您无法修改任何默认参数组。

您可以修改参数组中的某些参数值。这些参数值应用于与参数组关联的集群。有关参数值更改何时应用于参数组的更多信息，请参阅 [Valkey 和 Redis OSS 参数](ParameterGroups.Engine.md#ParameterGroups.Redis) 和 [Memcached 特定的参数](ParameterGroups.Engine.md#ParameterGroups.Memcached)。

## 修改参数组（控制台）
<a name="ParameterGroups.Modifying.CON"></a>

以下过程介绍了如何使用 ElastiCache 控制台更改 `cluster-enabled` 参数的值。您可以使用相同的过程来更改任意参数的值。

**使用 ElastiCache 控制台更改参数的值**

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

1. 要查看所有可用的参数组列表，请在导航窗格左侧选择**Parameter Groups**。

1. 通过选择参数组名称左侧的框来选择要修改的参数组。

   屏幕底部将列出参数组的参数。您可能需要浏览列表才能查看所有参数。

1. 要修改一个或多个参数，请选择 **Edit Parameters**。

1. 在 **Edit Parameter Group:（编辑参数组：）**屏幕上，使用左箭头和右箭头滚动找到 `binding_protocol` 参数，然后在 **Value（值）**列中键入 `ascii`。

1. 选择**保存更改**。

1. 对于 Memcached，要查找您更改的参数名称，请参阅 [Memcached 特定的参数](ParameterGroups.Engine.md#ParameterGroups.Memcached)。如果参数更改在*重新启动* 生效，则重启使用此参数组的所有集群。有关更多信息，请参阅[重启集群](Clusters.html#Rebooting)。

1. 对于 Valkey 和 Redis OSS，要查找您更改的参数名称，请参阅[Valkey 和 Redis OSS 参数](ParameterGroups.Engine.md#ParameterGroups.Redis)。如果您的集群为 Valkey 和 Redis OSS（已禁用集群模式）集群并对以下参数进行了更改，则您必须重启集群中的节点：
   + activerehashing
   + 数据库

    有关更多信息，请参阅[重启节点](nodes.rebooting.md)。
**Valkey 或 Redis OSS（已启用集群模式）参数更改**  
如果要更改 Valkey 或 Redis OSS（已启用集群模式）集群上的以下参数，请按照随后的步骤操作。  
activerehashing
数据库
对于 Redis OSS，您可以创建集群的手动备份。请参阅[进行手动备份](backups-manual.md)。
请删除集群。请参阅[删除集群](Clusters.html#Delete)。
使用修改的参数组和备份还原集群，以便为新集群创建种子。请参阅[从备份还原到新缓存](backups-restoring.md)。
对其他参数的更改不需要执行此操作。



## 修改参数组 (AWS CLI)
<a name="ParameterGroups.Modifying.CLI"></a>

要使用 AWS CLI 更改参数值，请使用命令 `modify-cache-parameter-group`。

**Example**  
对于 Memcached，要查找您要更改的参数名称和允许的值，请参阅 [Memcached 特定的参数](ParameterGroups.Engine.md#ParameterGroups.Memcached)  
以下示例代码演示设置两个参数的值：参数组 `myMem14` 的 *chunk\$1size* 和 *chunk\$1size\$1growth\$1fact*。  
对于 Linux、macOS 或 Unix：  

```
aws elasticache modify-cache-parameter-group \
    --cache-parameter-group-name myMem14 \
    --parameter-name-values \
        ParameterName=chunk_size,ParameterValue=96 \
        ParameterName=chunk_size_growth_fact,ParameterValue=1.5
```
对于 Windows：  

```
aws elasticache modify-cache-parameter-group ^
    --cache-parameter-group-name myMem14 ^
    --parameter-name-values ^
        ParameterName=chunk_size,ParameterValue=96 ^
        ParameterName=chunk_size_growth_fact,ParameterValue=1.5
```
此命令的输出如下所示。  

```
{
    "CacheParameterGroupName": "myMem14"
}
```

**Example**  
对于 Valkey 和 Redis OSS，要查找您要更改的参数名称和允许的值，请参阅 [Valkey 和 Redis OSS 参数](ParameterGroups.Engine.md#ParameterGroups.Redis)  
以下示例代码演示设置两个参数的值：参数组 `myredis32-on-30` 的 *reserved-memory-percent* 和 *cluster-enabled*。我们将 *reserved-memory-percent* 设置为 `30`（30%）并将 *cluster-enabled* 设置为 `yes`，以便参数组可与 Valkey 或 Redis OSS（已启用集群模式）集群（复制组）搭配使用。  
对于 Linux、macOS 或 Unix：  

```
aws elasticache modify-cache-parameter-group \
    --cache-parameter-group-name myredis32-on-30 \
    --parameter-name-values \
        ParameterName=reserved-memory-percent,ParameterValue=30 \
        ParameterName=cluster-enabled,ParameterValue=yes
```
对于 Windows：  

```
aws elasticache modify-cache-parameter-group ^
    --cache-parameter-group-name myredis32-on-30 ^
    --parameter-name-values ^
        ParameterName=reserved-memory-percent,ParameterValue=30 ^
        ParameterName=cluster-enabled,ParameterValue=yes
```
此命令的输出如下所示。  

```
{
    "CacheParameterGroupName": "my-redis32-on-30"
}
```

有关更多信息，请参阅 [https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-cache-parameter-group.html](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-cache-parameter-group.html)。

要查找您更改的参数名称，请参阅[Valkey 和 Redis OSS 参数](ParameterGroups.Engine.md#ParameterGroups.Redis)。

 如果您的集群为 Valkey 和 Redis OSS（已禁用集群模式）集群并对以下参数进行了更改，则您必须重启集群中的节点：
+ activerehashing
+ 数据库

 有关更多信息，请参阅[重启节点](nodes.rebooting.md)。

**Valkey 或 Redis OSS（已启用集群模式）参数更改**  
如果要更改 Valkey 或 Redis OSS（已启用集群模式）集群上的以下参数，请按照随后的步骤操作。  
activerehashing
数据库
创建集群的手动备份。请参阅[进行手动备份](backups-manual.md)。
请删除集群。请参阅[删除集群](Clusters.html#Delete)。
使用修改的参数组和备份还原集群，以便为新集群创建种子。请参阅[从备份还原到新缓存](backups-restoring.md)。
对其他参数的更改不需要执行此操作。

## 修改参数组 (ElastiCache API)
<a name="ParameterGroups.Modifying.API"></a>

要使用 ElastiCache API 更改参数组的参数值，请使用 `ModifyCacheParameterGroup` 操作。

**Example**  
对于 Memcached，要查找您要更改的参数名称和允许的值，请参阅 [Memcached 特定的参数](ParameterGroups.Engine.md#ParameterGroups.Memcached)  
以下示例代码演示设置两个参数的值：参数组 `myMem14` 的 *chunk\$1size* 和 *chunk\$1size\$1growth\$1fact*。  

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=ModifyCacheParameterGroup
   &CacheParameterGroupName=myMem14
   &ParameterNameValues.member.1.ParameterName=chunk_size
   &ParameterNameValues.member.1.ParameterValue=96
   &ParameterNameValues.member.2.ParameterName=chunk_size_growth_fact
   &ParameterNameValues.member.2.ParameterValue=1.5
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &Version=2015-02-02
   &X-Amz-Credential=<credential>
```

**Example**  
对于 Valkey 和 Redis OSS，要查找您要更改的参数名称和允许的值，请参阅 [Valkey 和 Redis OSS 参数](ParameterGroups.Engine.md#ParameterGroups.Redis)  
以下示例代码演示设置两个参数的值：参数组 `myredis32-on-30` 的 *reserved-memory-percent* 和 *cluster-enabled*。我们将 *reserved-memory-percent* 设置为 `30`（30%）并将 *cluster-enabled* 设置为 `yes`，以便参数组可与 Valkey 或 Redis OSS（已启用集群模式）集群（复制组）搭配使用。  

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=ModifyCacheParameterGroup
   &CacheParameterGroupName=myredis32-on-30
   &ParameterNameValues.member.1.ParameterName=reserved-memory-percent
   &ParameterNameValues.member.1.ParameterValue=30
   &ParameterNameValues.member.2.ParameterName=cluster-enabled
   &ParameterNameValues.member.2.ParameterValue=yes
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &Version=2015-02-02
   &X-Amz-Credential=<credential>
```

有关更多信息，请参阅 [https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyCacheParameterGroup.html](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyCacheParameterGroup.html)。

如果您的集群为 Valkey 和 Redis OSS（已禁用集群模式）集群并对以下参数进行了更改，则您必须重启集群中的节点：
+ activerehashing
+ 数据库

 有关更多信息，请参阅 [重启节点](nodes.rebooting.md)。

**Valkey 或 Redis OSS（已启用集群模式）参数更改**  
如果要更改 Valkey 或 Redis OSS（已启用集群模式）集群上的以下参数，请按照随后的步骤操作。  
activerehashing
数据库
创建集群的手动备份。请参阅[进行手动备份](backups-manual.md)。
请删除集群。请参阅[删除中的集群 ElastiCache](Clusters.Delete.md)。
使用修改的参数组和备份还原集群，以便为新集群创建种子。请参阅[从备份还原到新缓存](backups-restoring.md)。
对其他参数的更改不需要执行此操作。

# 删除 ElastiCache 参数组
<a name="ParameterGroups.Deleting"></a>

您可以使用 ElastiCache 控制台、AWS CLI 或 ElastiCache API 删除自定义参数组。

如果参数组与任何集群关联，则无法将其删除。也无法删除任一默认参数组。

## 删除参数组（控制台）
<a name="ParameterGroups.Deleting.CON"></a>

以下过程介绍了如何使用 ElastiCache 控制台删除参数组。

**使用 ElastiCache 控制台删除参数组**

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

1. 要查看所有可用的参数组列表，请在导航窗格左侧选择**Parameter Groups**。

1. 通过选择参数组名称左侧的框来选择要删除的参数组。

   **Delete** 按钮将变为活动状态。

1. 选择**删除**。

   **Delete Parameter Groups** 确认屏幕随即出现。

1. 要删除参数组，请在 **Delete Parameter Groups** 确认屏幕上选择 **Delete**。

   要保留参数组，请选择 **Cancel**。

## 删除参数组 (AWS CLI)
<a name="ParameterGroups.Deleting.CLI"></a>

要使用 AWS CLI 删除参数组，请使用命令 `delete-cache-parameter-group`。对于要删除的参数组，由 `--cache-parameter-group-name` 指定的参数组不能具有与之关联的任何集群，也不能是默认参数组。

以下示例代码删除 *myMem14* 参数组。

**Example**  
对于 Linux、macOS 或 Unix：  

```
aws elasticache delete-cache-parameter-group \
    --cache-parameter-group-name myRed28
```
对于 Windows：  

```
aws elasticache delete-cache-parameter-group ^
    --cache-parameter-group-name myRed28
```

有关更多信息，请参阅 [https://docs.aws.amazon.com/cli/latest/reference/elasticache/delete-cache-parameter-group.html](https://docs.aws.amazon.com/cli/latest/reference/elasticache/delete-cache-parameter-group.html)。

## 删除参数组 (ElastiCache API)
<a name="ParameterGroups.Deleting.API"></a>

要使用 ElastiCache API 删除参数组，请使用 `DeleteCacheParameterGroup` 操作。对于要删除的参数组，由 `CacheParameterGroupName` 指定的参数组不能具有与之关联的任何集群，也不能是默认参数组。

**Example**  
对于 Memcached，以下示例代码将删除 *myMem14* 参数组。  

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

**Example**  
以下示例代码删除 *myRed28* 参数组。  

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

有关更多信息，请参阅 [https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DeleteCacheParameterGroup.html](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DeleteCacheParameterGroup.html)。

# 引擎特定参数
<a name="ParameterGroups.Engine"></a>

**Valkey 和 Redis OSS**

大多数 Valkey 8 参数都与 Redis OSS 7.1 参数兼容。Valkey 7.2 的参数与 Redis OSS 7 的参数相同。

如果您没有为 Valkey 或 Redis OSS 集群指定参数组，则将使用适合您引擎版本的默认参数组。您无法更改默认参数组中的任何参数的值。但是，您可以随时创建自定义参数组并将其分配给集群，只要可按条件修改的参数的值在两个参数组中相同。有关更多信息，请参阅 [创建 ElastiCache 参数组](ParameterGroups.Creating.md)。

**Topics**
+ [Valkey 和 Redis OSS 参数](#ParameterGroups.Redis)
+ [Memcached 特定的参数](#ParameterGroups.Memcached)

## Valkey 和 Redis OSS 参数
<a name="ParameterGroups.Redis"></a>

**Topics**
+ [Valkey 8.2 参数更改](#ParameterGroups.Valkey.8.2)
+ [Valkey 8.1 参数更改](#ParameterGroups.Valkey.8.1)
+ [Valkey 8.0 参数更改](#ParameterGroups.Valkey.8)
+ [Valkey 7.2 和 Redis OSS 7 参数更改](#ParameterGroups.Redis.7)
+ [Redis OSS 6.x 参数更改](#ParameterGroups.Redis.6-x)
+ [Redis OSS 5.0.3 参数更改](#ParameterGroups.Redis.5-0-3)
+ [Redis OSS 5.0.0 参数更改](#ParameterGroups.Redis.5.0)
+ [Redis OSS 4.0.10 参数更改](#ParameterGroups.Redis.4-0-10)
+ [Redis OSS 3.2.10 参数更改](#ParameterGroups.Redis.3-2-10)
+ [Redis OSS 3.2.6 参数更改](#ParameterGroups.Redis.3-2-6)
+ [Redis OSS 3.2.4 参数更改](#ParameterGroups.Redis.3-2-4)
+ [Redis OSS 2.8.24（加强版）增加的参数](#ParameterGroups.Redis.2-8-24)
+ [Redis OSS 2.8.23（加强版）增加的参数](#ParameterGroups.Redis.2-8-23)
+ [Redis OSS 2.8.22（加强版）增加的参数](#ParameterGroups.Redis.2-8-22)
+ [Redis OSS 2.8.21 增加的参数](#ParameterGroups.Redis.2-8-21)
+ [Redis OSS 2.8.19 增加的参数](#ParameterGroups.Redis.2-8-19)
+ [Redis OSS 2.8.6 增加的参数](#ParameterGroups.Redis.2-8-6)
+ [Redis OSS 2.6.13 参数](#ParameterGroups.Redis.2-6-13)
+ [特定于 Redis OSS 节点类型的参数](#ParameterGroups.Redis.NodeSpecific)

### Valkey 8.2 参数更改
<a name="ParameterGroups.Valkey.8.2"></a>

**参数组家族：valk** ey8

**注意**  
Valkey 8.2 参数更改不适用于 Valkey 8.1
Valkey 8.0 及更高版本的参数组与 Redis OSS 7.2.4 不兼容。
在 Valkey 8.2 中，以下命令不可用于无服务器缓存：`commandlog`、`commandlog get`、`commandlog help`、`commandlog len` 和 `commandlog reset.` 


**Valkey 8.2 中的新参数组**  

| Name | Details | 说明 | 
| --- | --- | --- | 
| search-fanout-target-mode （已在 8.2 中添加） | 默认：客户端 类型：字符串 可修改：是 更改生效：立即 |   search-fanout-target-mode配置参数控制如何在 Valkey 集群环境中跨节点分配搜索查询。此设置支持两个值：“throughput”模式通过将搜索查询随机分配至所有集群节点来优化最大吞吐量，不考虑客户端类型或 READONLY 状态；“client”模式则遵循客户端连接特性：将非 READONLY 客户端仅路由至主节点，将 READONLY 客户端仅路由至副本节点上的副本连接，而将主连接上的 READONLY 客户端随机分配至所有节点。 默认行为是“client”模式，即系统将根据客户端连接类型和 READONLY 状态做出查询路由决策。对于需要最大群集资源利用率的大容量搜索工作负载，使用吞吐量模式；如果要保持 read/write 分离并尊重应用程序级 READONLY 连接模式，请使用客户端模式。 | 
| search-default-timeout-ms |  默认值：50000 允许的值：1 到 60000 类型：整数 可修改：是 更改生效：立即 | Valkey 搜索查询的默认超时（毫秒）。 | 
| search-enable-partial-results | 默认值：yes 允许的值：yes、no 类型：布尔值 可修改：是 更改生效：立即 | 配置 Valkey 搜索的查询失败行为。启用后，如果一个或多个分片出现超时，搜索查询将返回部分结果。禁用后，任何分片超时都将导致整个搜索查询失败并返回错误。 | 

### Valkey 8.1 参数更改
<a name="ParameterGroups.Valkey.8.1"></a>

**参数组家族：valk** ey8

**注意**  
Valkey 8.1 参数更改不适用于 Valkey 8.0
Valkey 8.0 及更高版本的参数组与 Redis OSS 7.2.4 不兼容。
在 Valkey 8.1 中，以下命令不可用于无服务器缓存：`commandlog`、`commandlog get`、`commandlog help`、`commandlog len` 和 `commandlog reset.` 


**Valkey 8.1 中的新参数组**  

| Name | Details | 说明 | 
| --- | --- | --- | 
|  commandlog-large-request-max-len（在 8.1 中添加）  |  默认值：1048576 类型：整数 可修改：是 更改生效：立即  |  Valkey 命令日志功能要记录的请求的最大大小（字节）。  | 
|  commandlog-large-request-max-len（在 8.1 中添加）  |  默认值：128 允许的值：0-1024 类型：整数 可修改：是 更改生效：立即  |  Valkey 命令日志中请求的最大长度。  | 
|  commandlog-reply-larger-than （已在 8.1 版本中添加）  |  默认值：1048576 类型：整数 可修改：是 更改生效：立即  |  Valkey 命令日志功能要记录的响应的最大大小（字节）。  | 
|  commandlog-large-reply-max-len（在 8.1 中添加）  |  默认值：128 允许的值：0-1024 类型：整数 可修改：是 更改生效：立即  |  Valkey 命令日志中响应的最大长度。  | 

### Valkey 8.0 参数更改
<a name="ParameterGroups.Valkey.8"></a>

**参数组家族：valk** ey8

**注意**  
Redis OSS 7.2.4 与 Valkey 8 及更高版本的参数组不兼容。


**Valkey 8.0 中的特定参数更改**  

| Name | Details | 说明 | 
| --- | --- | --- | 
|  repl-backlog-size  |  默认值：10485760 类型：整数 可修改：是 更改生效：立即  |  主节点积压缓冲区的大小（以字节为单位）。积压用于记录主节点上数据的更新。只读副本连接到主节点时会尝试执行部分同步（psync），应用积压中的数据以与主节点同步。如果 psync 失败，则需要完整同步。 此参数的最小值为 16384。 注意：从 Redis OSS 2.8.22 开始，此参数应用于主集群以及只读副本。  | 
|  maxmemory-samples  |  原定设置值：3 允许的值：1 到 64 类型：整数 可修改：是 更改生效：立即  |  对于 least-recently-used (LRU) 和 time-to-live (TTL) 计算，此参数表示要检查的密钥的样本量。默认情况下，Redis OSS 选择 3 个键并使用最近最少使用的一个键。  | 


**Valkey 8.0 中的新参数组**  

| Name | Details | 说明 | 
| --- | --- | --- | 
|  extended-redis-compatibility  |  允许的值：yes、no 默认值：yes 类型：布尔值 可修改：是 发生更改：立即  |  扩展的 Redis OSS 兼容模式让 Valkey 可以模拟 Redis OSS 7.2。仅在工具或客户端出现问题时才启用此选项。 面向客户的影响： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonElastiCache/latest/dg/ParameterGroups.Engine.html)  | 


**在 Valkey 8.0 中移除了参数组**  

| Name | Details | 说明 | 
| --- | --- | --- | 
|  lazyfree-lazy-eviction  |  允许的值：yes、no 默认值：no 类型：布尔值 可修改：是 发生更改：立即  |  对移出执行异步删除。  | 
|  lazyfree-lazy-expire  |  允许的值：yes、no 默认值：no 类型：布尔值 可修改：是 发生更改：立即  |  对已过期密钥执行异步删除。  | 
|  lazyfree-lazy-server-del  |  允许的值：yes、no 默认值：no 类型：布尔值 可修改：是 发生更改：立即  |  对更新值的命令执行异步删除。  | 
|  lazyfree-lazy-user-del  |  默认值：no 类型：字符串 可修改：是 更改生效：立即跨集群中的所有节点生效  |   当该值设置为“yes”时，DEL 命令的行为与 UNLINK 相同。  | 
|  replica-lazy-flush  |  默认值：yes 类型：布尔值 可修改：否 以前的名字： slave-lazy-flush  |  在副本同步期间执行异步 flushDB。  | 

### Valkey 7.2 和 Redis OSS 7 参数更改
<a name="ParameterGroups.Redis.7"></a>

**参数组系列：**valkey7

Valkey 7.2 默认参数组如下所示：
+ `default.valkey7` – 对 Valkey（已禁用集群模式）集群和复制组使用此参数组或从中派生的参数组。
+ `default.valkey7.cluster.on` – 对 Valkey（已启用集群模式）集群和复制组使用此参数组或从中派生的参数组。

**参数组系列：**redis7

Redis OSS 7 默认参数组如下所示：
+ `default.redis7` – 对 Redis OSS（已禁用集群模式）集群和复制组使用此参数组或从中派生的参数组。
+ `default.redis7.cluster.on` – 对 Redis OSS（已启用集群模式）集群和复制组使用此参数组或从中派生的参数组。

**特定参数更改**

Redis OSS 7 中增加的参数如下所示。Valkey 7.2 也支持这些参数。


|  Name  |  Details |  说明  | 
| --- | --- | --- | 
| cluster-allow-pubsubshard-when-down |  允许的值：`yes`、`no` 默认值：`yes` 类型：字符串 可修改：是 更改生效：立即跨集群中的所有节点生效。 | 如果设置为默认值“yes”（是），则允许节点在集群处于停机状态时提供发布订阅分片流量，只要它认为自己拥有插槽即可。  | 
| cluster-preferred-endpoint-type |  允许的值：`ip`、`tls-dynamic` 默认值：`tls-dynamic` 类型：字符串 可修改：是 更改生效：立即跨集群中的所有节点生效。 | 此值控制 MOVED/ASKING 请求返回的端点以及 `CLUSTER SLOTS` 和 `CLUSTER SHARDS` 的端点字段。当该值设置为 ip 时，节点将传播其 IP 地址。当该值设置为 tls-dynamic 时，节点将在启用时通告主机名 encryption-in-transit，否则通告一个 IP 地址。  | 
| latency-tracking |  允许的值：`yes`、`no` 默认值：`no` 类型：字符串 可修改：是 更改生效：立即跨集群中的所有节点生效。 | 设置为“yes”（是）时，将跟踪每个命令的延迟，并允许通过 `INFO` 延迟统计命令导出百分位数分布，并通过 `LATENCY` 命令导出累积延迟分布（直方图）。  | 
| hash-max-listpack-entries |  允许的值：`0+` 默认值：`512` 类型：整数 可修改：是 更改生效：立即跨集群中的所有节点生效。 | 压缩数据集所需的最大哈希条目数。  | 
| hash-max-listpack-value |  允许的值：`0+` 默认值：`64` 类型：整数 可修改：是 更改生效：立即跨集群中的所有节点生效。 | 压缩数据集所需的最大哈希条目数的阈值。  | 
| zset-max-listpack-entries |  允许的值：`0+` 默认值：`128` 类型：整数 可修改：是 更改生效：立即跨集群中的所有节点生效。 | 压缩数据集所需的最大已排序集合条目数。  | 
| zset-max-listpack-value |  允许的值：`0+` 默认值：`64` 类型：整数 可修改：是 更改生效：立即跨集群中的所有节点生效。 | 压缩数据集所需的最大已排序集合条目数的阈值。  | 

Redis OSS 7 中更改的参数如下所示。


|  Name  |  Details |  说明  | 
| --- | --- | --- | 
| activerehashing |  可修改：`no`。在 Redis OSS 7 中，默认情况下，此参数处于隐藏和已启用状态。为了禁用此参数，您需要创建一个[支持案例](https://console.aws.amazon.com/support/home)。  | 可修改：是。  | 

Redis OSS 7 中删除的参数如下所示。


|  Name  |  Details |  说明  | 
| --- | --- | --- | 
| hash-max-ziplist-entries |  允许的值：`0+` 默认值：`512` 类型：整数 可修改：是 更改生效：立即跨集群中的所有节点生效。 | 使用 `listpack` 而非 `ziplist` 来表示小哈希编码  | 
| hash-max-ziplist-value |  允许的值：`0+` 默认值：`64` 类型：整数 可修改：是 更改生效：立即跨集群中的所有节点生效。 | 使用 `listpack` 而非 `ziplist` 来表示小哈希编码  | 
| zset-max-ziplist-entries |  允许的值：`0+` 默认值：`128` 类型：整数 可修改：是 更改生效：立即跨集群中的所有节点生效。 | 使用 `listpack` 而非 `ziplist` 来表示小哈希编码。  | 
| zset-max-ziplist-value |  允许的值：`0+` 默认值：`64` 类型：整数 可修改：是 更改生效：立即跨集群中的所有节点生效。 | 使用 `listpack` 而非 `ziplist` 来表示小哈希编码。  | 
| list-max-ziplist-size |  允许的值： 默认值：`-2` 类型：整数 可修改：是 更改生效：立即跨集群中的所有节点生效。 | 每个内部列表节点允许的条目数。  | 

### Redis OSS 6.x 参数更改
<a name="ParameterGroups.Redis.6-x"></a>

**参数组系列：**redis6.x

Redis OSS 6.x 默认参数组如下所示：
+ `default.redis6.x` – 对 Valkey 或 Redis OSS（已禁用集群模式）集群和复制组使用此参数组或从中派生的参数组。
+ `default.redis6.x.cluster.on` – 对 Valkey 或 Redis OSS（已启用集群模式）集群和复制组使用此参数组或从中派生的参数组。

**注意**  
 在 Redis OSS 引擎版本 6.2 中，在推出 r6gd 节点系列以使用 [ElastiCache 中的数据分层](data-tiering.md)时，r6gd 节点类型仅支持 *noeviction*、*volatile-lru* 和 *allkeys-lru* max-memory 策略。

有关更多信息，请参阅[ElastiCache 适用于 Redis OSS 的 6.2 版（增强版）](engine-versions.md#redis-version-6.2)和[ElastiCache 适用于 Redis OSS 的 6.0 版（增强版）](engine-versions.md#redis-version-6.0)。

Redis OSS 6.x 中增加的参数如下所示。


|  Details |  说明  | 
| --- | --- | 
| acl-pubsub-default (added in 6.2) |  允许的值：`resetchannels`、`allchannels` 默认值：`allchannels` 类型：字符串 可修改：是 更改的生效范围：与集群关联的现有 Redis OSS 用户将继续拥有现有的权限。需要更新用户或者重新启动集群以更新现有的 Redis OSS 用户。 | 部署到此集群的 ACL 用户将默认拥有发布订阅频道权限。  | 
| cluster-allow-reads-when-down (added in 6.0) |  默认值：no 类型：字符串 可修改：是 更改生效：立即跨集群中的所有节点生效 | 当设置为“是”时，Redis OSS（已启用集群模式）复制组将继续处理读取命令，即使节点无法达到主节点的法定数量。 当设置为默认值“no（不）”时，复制组将拒绝所有命令。如果您使用的集群的节点组少于三个，或者您的应用程序可以安全地处理陈旧读取，我们建议将此值设置为“yes（是）”。  | 
| tracking-table-max-keys (added in 6.0) |  默认值：1000000 类型：数字 可修改：是 更改生效：立即跨集群中的所有节点生效 | 为了帮助客户端缓存，Redis OSS 支持跟踪哪些客户端访问了哪些键。 当所跟踪的密钥被修改后，会向所有客户端发送失效消息，通知它们缓存的值不再有效。此值允许您指定此表的上限。超出此参数值后，将随机向客户端发送失效。应该调整此值以限制内存使用，同时仍对足够的密钥进行跟踪。在内存不足的情况下，密钥也会失效。  | 
| acllog-max-len (added in 6.0) |  默认值：128 类型：数字 可修改：是 更改生效：立即跨集群中的所有节点生效 | 此值对应于 ACL 日志中的最大条目数。  | 
| active-expire-effort (added in 6.0) |  默认：1 类型：数字 可修改：是 更改生效：立即跨集群中的所有节点生效 | Redis OSS 会通过两种机制删除超过键自身存活时间的键。一种机制是，访问密钥并发现其已过期。另一种机制是，周期性任务对密钥进行采样，并使那些超过其存活时间的密钥过期。此参数定义 Redis OSS 用于在周期性任务中使项目过期的工作量。 默认值 1 用于避免 10% 以上的过期密钥仍存在于内存中。其还用于避免 25% 以上的总内存被消耗及增加系统的延迟。您可以将此值增加到 10，以提高用在过期密钥上的工作量。需要权衡的是，当 CPU 更高时，延迟也可能会更高。我们建议将值设为 1，除非您发现内存使用率较高，并且可以容忍 CPU 使用率升高。  | 
| lazyfree-lazy-user-del (added in 6.0) |  默认值：no 类型：字符串 可修改：是 更改生效：立即跨集群中的所有节点生效 | 当该值设置为“yes”时，`DEL` 命令的行为与 `UNLINK` 相同。  | 

Redis OSS 6.x 中删除的参数如下所示。


|  Name  |  Details |  说明  | 
| --- | --- | --- | 
| lua-replicate-commands |  允许的值：yes/no 默认值：yes 类型：布尔值 可修改：是 更改生效：立即 | 是否始终在 Lua 脚本中启用 Lua 效果复制  | 

### Redis OSS 5.0.3 参数更改
<a name="ParameterGroups.Redis.5-0-3"></a>

**参数组系列：**redis5.0

Redis OSS 5.0 默认参数组
+ `default.redis5.0` – 对 Valkey 或 Redis OSS（已禁用集群模式）集群和复制组使用此参数组或从中派生的参数组。
+ `default.redis5.0.cluster.on` – 对 Valkey 或 Redis OSS（已启用集群模式）集群和复制组使用此参数组或从中派生的参数组。


**Redis OSS 5.0.3 中增加的参数**  

|  Name  |  Details |  说明  | 
| --- | --- | --- | 
| rename-commands |  默认：无 类型：字符串 可修改：是 更改生效：立即跨集群中的所有节点生效 | 重命名的 Redis OSS 命令列表，以空格分隔。以下是可用于重命名的命令的限制列表： `APPEND AUTH BITCOUNT BITFIELD BITOP BITPOS BLPOP BRPOP BRPOPLPUSH BZPOPMIN BZPOPMAX CLIENT CLUSTER COMMAND DBSIZE DECR DECRBY DEL DISCARD DUMP ECHO EVAL EVALSHA EXEC EXISTS EXPIRE EXPIREAT FLUSHALL FLUSHDB GEOADD GEOHASH GEOPOS GEODIST GEORADIUS GEORADIUSBYMEMBER GET GETBIT GETRANGE GETSET HDEL HEXISTS HGET HGETALL HINCRBY HINCRBYFLOAT HKEYS HLEN HMGET HMSET HSET HSETNX HSTRLEN HVALS INCR INCRBY INCRBYFLOAT INFO KEYS LASTSAVE LINDEX LINSERT LLEN LPOP LPUSH LPUSHX LRANGE LREM LSET LTRIM MEMORY MGET MONITOR MOVE MSET MSETNX MULTI OBJECT PERSIST PEXPIRE PEXPIREAT PFADD PFCOUNT PFMERGE PING PSETEX PSUBSCRIBE PUBSUB PTTL PUBLISH PUNSUBSCRIBE RANDOMKEY READONLY READWRITE RENAME RENAMENX RESTORE ROLE RPOP RPOPLPUSH RPUSH RPUSHX SADD SCARD SCRIPT SDIFF SDIFFSTORE SELECT SET SETBIT SETEX SETNX SETRANGE SINTER SINTERSTORE SISMEMBER SLOWLOG SMEMBERS SMOVE SORT SPOP SRANDMEMBER SREM STRLEN SUBSCRIBE SUNION SUNIONSTORE SWAPDB TIME TOUCH TTL TYPE UNSUBSCRIBE UNLINK UNWATCH WAIT WATCH ZADD ZCARD ZCOUNT ZINCRBY ZINTERSTORE ZLEXCOUNT ZPOPMAX ZPOPMIN ZRANGE ZRANGEBYLEX ZREVRANGEBYLEX ZRANGEBYSCORE ZRANK ZREM ZREMRANGEBYLEX ZREMRANGEBYRANK ZREMRANGEBYSCORE ZREVRANGE ZREVRANGEBYSCORE ZREVRANK ZSCORE ZUNIONSTORE SCAN SSCAN HSCAN ZSCAN XINFO XADD XTRIM XDEL XRANGE XREVRANGE XLEN XREAD XGROUP XREADGROUP XACK XCLAIM XPENDING GEORADIUS_RO GEORADIUSBYMEMBER_RO LOLWUT XSETID SUBSTR`  | 

有关更多信息，请参阅 [ElastiCache 适用于 Redis OSS 的 5.0.6 版（增强版）](engine-versions.md#redis-version-5-0.6)。

### Redis OSS 5.0.0 参数更改
<a name="ParameterGroups.Redis.5.0"></a>

**参数组系列：**redis5.0

Redis OSS 5.0 默认参数组
+ `default.redis5.0` – 对 Valkey 或 Redis OSS（已禁用集群模式）集群和复制组使用此参数组或从中派生的参数组。
+ `default.redis5.0.cluster.on` – 对 Valkey 或 Redis OSS（已启用集群模式）集群和复制组使用此参数组或从中派生的参数组。


**Redis OSS 5.0 中增加的参数**  

|  Name  |  Details |  说明  | 
| --- | --- | --- | 
| stream-node-max-bytes |  允许的值：0\$1 默认值：4096 类型：整数 可修改：是 更改生效：立即 | 流数据结构是节点的基数树，这些节点对内部的多个项进行编码。使用此配置指定基数树中单个节点的最大大小（以字节为单位）。如果设置为 0，则树节点的大小是不受限制的。 | 
| stream-node-max-entries |  允许的值：0\$1 默认值：100 类型：整数 可修改：是 更改生效：立即 | 流数据结构是节点的基数树，这些节点对内部的多个项进行编码。使用此配置指定在追加新的流条目时切换到新节点之前单个节点可包含的项的最大数目。如果设置为 0，则树节点中的项数是不受限制的  | 
| active-defrag-max-scan-fields |  允许的值：1 到 1000000 默认值：1000 类型：整数 可修改：是 更改生效：立即 | 将从主词典扫描中处理的最大set/hash/zset/list字段数  | 
| lua-replicate-commands |  允许的值：yes/no 默认值：yes 类型：布尔值 可修改：是 更改生效：立即 | 是否始终在 Lua 脚本中启用 Lua 效果复制  | 
| replica-ignore-maxmemory |  默认值：yes 类型：布尔值 可修改：否  | 确定副本是否通过不移出独立于主节点的项来忽略 maxmemory 设置  | 

Redis OSS 已在引擎版本 5.0 中重命名几个参数以响应社区反馈。有关更多信息，请参阅 [Redis OSS 5 中的新增功能](https://aws.amazon.com/redis/Whats_New_Redis5/)。下表列出了新名称以及它们映射到早期版本的方式。


**Redis OSS 5.0 中已重命名的参数**  

|  Name  |  Details |  说明  | 
| --- | --- | --- | 
| replica-lazy-flush |  默认值：yes 类型：布尔值 可修改：否 以前的名字： slave-lazy-flush  | 在副本同步期间执行异步 flushDB。 | 
| client-output-buffer-limit-replica-hard-limit | 默认值：有关值的信息，请参阅 [特定于 Redis OSS 节点类型的参数](#ParameterGroups.Redis.NodeSpecific) 类型：整数 可修改：否 以前的名字：client-output-buffer-limit-slave-hard-limit | 对于 Redis OSS 只读副本：如果客户端的输出缓冲区达到指定字节数，则客户端将断开连接。 | 
| client-output-buffer-limit-replica-soft-limit | 默认值：有关值的信息，请参阅 [特定于 Redis OSS 节点类型的参数](#ParameterGroups.Redis.NodeSpecific) 类型：整数 可修改：否 以前的名字：client-output-buffer-limit-slave-soft-limit | 对于 Redis OSS 只读副本：如果客户端的输出缓冲区达到指定字节数，仅当此条件保持 client-output-buffer-limit-replica-soft-seconds 时间时，客户端将断开连接。 | 
| client-output-buffer-limit-replica-soft-seconds | 默认值：60 类型：整数 可修改：否 以前的名字：client-output-buffer-limit-slave-soft-seconds  | 对于 Redis OSS 只读副本：如果客户端的输出缓冲区保持 client-output-buffer-limit-replica-soft-limit 字节的时间长于此秒数，则客户端将断开连接。 | 
| replica-allow-chaining | 默认值：no 类型：字符串 可修改：否 以前的名字： slave-allow-chaining | 确定 Redis OSS 中的只读副本是否可以具有自己的只读副本。 | 
| min-replicas-to-write | 默认：0 类型：整数 可修改：是 以前的名字： min-slaves-to-write 更改生效：立即 | 使主节点可以从客户端接受写入所必需的可用只读副本的最小数目。如果可用副本数下降到低于此数字，则主节点不再接受写入请求。 如果此参数或 min-replicas-max-lag为 0，则即使没有副本可用，主节点也将始终接受写入请求。 | 
| min-replicas-max-lag  | 默认值：10 类型：整数 可修改：是 以前的名字： min-slaves-max-lag 更改生效：立即 | 主节点必须从只读副本收到 Ping 请求的秒数。如果此时间量已过，但主节点未收到 Ping，则不再将副本视为可用。如果可用副本的数量降至以下 min-replicas-to-write，则主副本将在此时停止接受写入。 如果此参数或 min-replicas-to-write为 0，则即使没有副本可用，主节点也将始终接受写入请求。 | 
| close-on-replica-write  | 默认值：yes 类型：布尔值 可修改：是 以前的名字： close-on-slave-write 更改生效：立即 | 如果启用，尝试写入只读副本的客户端将会断开连接。 | 


**Redis OSS 5.0 中已删除的参数**  

|  Name  |  Details |  说明  | 
| --- | --- | --- | 
| repl-timeout |  默认值：60 可修改：否  | 此版本中不提供参数。 | 

### Redis OSS 4.0.10 参数更改
<a name="ParameterGroups.Redis.4-0-10"></a>

**参数组系列：** redis4.0

Redis OSS 4.0.x 默认参数组
+ `default.redis4.0` – 对 Valkey 或 Redis OSS（已禁用集群模式）集群和复制组使用此参数组或从中派生的参数组。
+ `default.redis4.0.cluster.on` – 对 Valkey 或 Redis OSS（已启用集群模式）集群和复制组使用此参数组或从中派生的参数组。


**Redis OSS 4.0.10 中已更改的参数**  

|  Name  |  Details |  说明  | 
| --- | --- | --- | 
| maxmemory-policy |  允许的值：`allkeys-lru`、`volatile-lru`、**allkeys-lfu**、**volatile-lfu**、`allkeys-random`、`volatile-random`、`volatile-ttl`、`noeviction` 默认值：volatile-lru 类型：字符串 可修改：是 发生更改：立即 | 在 2.6.13 版中增加了 maxmemory-policy。在版本 4.0.10 中增加了两个新允许的值：allkeys-lfu（将使用近似的 LFU 移出任何键）；和 volatile-lfu（将使用近似的 LFU 移出具有过期设置的键）。在 6.2 版中，在推出 r6gd 节点系列以支持数据分层功能时，r6gd 节点类型仅支持 noeviction、volatile-lru 和 allkeys-lru max-memory 策略  | 


**Redis OSS 4.0.10 中增加的参数**  

|  Name  |  Details |  说明  | 
| --- |--- |--- |
| **异步删除参数** | 
| --- |
| lazyfree-lazy-eviction |  允许的值：yes/no 默认值：no 类型：布尔值 可修改：是 发生更改：立即 | 对移出执行异步删除。 | 
| lazyfree-lazy-expire |  允许的值：yes/no 默认值：no 类型：布尔值 可修改：是 发生更改：立即 | 对已过期密钥执行异步删除。 | 
| lazyfree-lazy-server-del |  允许的值：yes/no 默认值：no 类型：布尔值 可修改：是 发生更改：立即 | 对更新值的命令执行异步删除。 | 
| slave-lazy-flush |  允许的值：N/A 默认值：no 类型：布尔值 可修改：否 发生更改：N/A | 在从属同步期间执行异步 flushDB。 | 
| **LFU 参数** | 
| --- |
| lfu-log-factor |  允许的值：任意整数 > 0 默认值：10 类型：整数 可修改：是 发生更改：立即 | 设置日志因素，这确定键命中数以使键计数器饱和。 | 
| lfu-decay-time |  允许的值：任意整数 默认：1 类型：整数 可修改：是 发生更改：立即 | 减少键计数器的时间，以分钟为单位。 | 
| **有效的碎片整理参数** | 
| --- |
| activedefrag |  允许的值：yes/no 默认值：no 类型：布尔值 可修改：是 发生更改：立即 | 启用有效的碎片整理。 在 Valkey 和 Redis 7.0 及更高版本中，无论此AWS设置如何，都可以在操作必要时自动执行碎片整理。  | 
| active-defrag-ignore-bytes |  允许的值：10485760 – 104857600 默认值：104857600 类型：整数 可修改：是 发生更改：立即 | 启动有效碎片整理的碎片垃圾最低量。 | 
| active-defrag-threshold-lower |  允许的值：1-100 默认值：10 类型：整数 可修改：是 发生更改：立即 | 启动有效碎片整理的碎片最低百分比。 | 
| active-defrag-threshold-upper |  允许的值：1-100 默认值：100 类型：整数 可修改：是 发生更改：立即 | 我们使用最大精力的碎片最高百分比。 | 
| active-defrag-cycle-min |  允许的值：1-75 默认值：25 类型：整数 可修改：是 发生更改：立即 | 用于碎片整理的最少精力，以 CPU 百分比为单位。 | 
| active-defrag-cycle-max |  允许的值：1-75 默认值：75 类型：整数 可修改：是 发生更改：立即 | 用于碎片整理的最多精力，以 CPU 百分比为单位。 | 
| **客户端输出缓冲区参数** | 
| --- |
| client-query-buffer-limit |  允许的值：1048576 – 1073741824 默认值：1073741824 类型：整数 可修改：是 发生更改：立即 | 单个客户端查询缓冲区的最大大小。 | 
| proto-max-bulk-len |  允许的值：1048576 – 536870912 默认值：536870912 类型：整数 可修改：是 发生更改：立即 | 单个元素请求的最大大小。 | 

### Redis OSS 3.2.10 参数更改
<a name="ParameterGroups.Redis.3-2-10"></a>

**参数组系列：** redis3.2

ElastiCache 对于 Redis OSS 3.2.10，不支持其他参数。

### Redis OSS 3.2.6 参数更改
<a name="ParameterGroups.Redis.3-2-6"></a>

**参数组系列：** redis3.2

对于 Redis OSS 3.2.6，不支持附加参数。

### Redis OSS 3.2.4 参数更改
<a name="ParameterGroups.Redis.3-2-4"></a>

**参数组系列：** redis3.2

从 Redis OSS 3.2.4 开始，提供两个默认参数组。
+ `default.redis3.2` – 在运行 Redis OSS 3.2.4 时，如果您需要创建 Valkey 或 Redis OSS（已禁用集群模式）复制组并仍使用 Redis OSS 3.2.4 的附加功能，请指定此参数组或从中派生的参数组。
+ `default.redis3.2.cluster.on` – 当您需要创建 Valkey 或 Redis OSS（已启用集群模式）复制组时，请指定此参数组或从中派生的参数组。

**Topics**
+ [Redis OSS 3.2.4 的新参数](#ParameterGroups.Redis.3-2-4.New)
+ [Redis OSS 3.2.4 中已更改的参数（加强版）](#ParameterGroups.Redis.3-2-4.Changed)

#### Redis OSS 3.2.4 的新参数
<a name="ParameterGroups.Redis.3-2-4.New"></a>

**参数组系列：** redis3.2

对于 Redis OSS 3.2.4，支持以下附加参数。


****  

|  Name  |  Details |  说明  | 
| --- | --- | --- | 
| list-max-ziplist-size | 默认值：-2 类型：整数 可修改：否  | 将采用特殊方式对列表进行编码以节省空间。可将每个内部列表节点允许的条目数指定为固定的最大大小或最大元素数。对于固定最大大小，请使用数字 -5 到 -1，含义如下：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonElastiCache/latest/dg/ParameterGroups.Engine.html) | 
| list-compress-depth | 默认：0 类型：整数 可修改：是 更改生效：立即 | 也可以压缩列表。压缩深度是要从压缩中排除的列表各端的 quicklist ziplist 节点的数目。始终不会压缩列表的首尾以便执行快速推送和弹出操作。设置为：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonElastiCache/latest/dg/ParameterGroups.Engine.html) | 
| cluster-enabled |  默认： no/yes \$1 类型：字符串 可修改：否 | 指示这是处于集群模式（“是”）的 Valkey 或 Redis OSS（已启用集群模式）复制组，还是处于非集群模式（“否”）的 Valkey 或 Redis OSS（已启用集群模式）复制组。集群模式下的 Valkey 或 Redis OSS（已启用集群模式）复制组可跨最多 500 个节点组对数据进行分区。 \$1 Redis OSS 3.2.*x* 具有两个默认参数组。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonElastiCache/latest/dg/ParameterGroups.Engine.html). | 
| cluster-require-full-coverage | 默认值：no 类型：布尔值 可修改：是 更改生效：立即 |  如果设为 `yes`，集群模式下的 Valkey 或 Redis OSS（已启用集群模式）节点会在检测到至少一个未覆盖的哈希槽（没有节点为其提供服务）时停止接受查询。因此，如果集群部分出现故障，则整个集群将不可用。只要所有槽全都覆盖到，它就会自动恢复可用。 但有时，您需要让集群的子集能够继续接受仍覆盖到的键空间部分的查询。为此，请将 `cluster-require-full-coverage` 选项设为 `no`。 | 
| hll-sparse-max-bytes | 默认值：3000 类型：整数 可修改：是 更改生效：立即 | HyperLogLog 稀疏表示字节限制。限制包括 16 个字节的标头。当 HyperLogLog 使用稀疏表示超过此限制时，它将转换为密集表示。 不建议使用超过 16000 的值，因为此时密集表现形式具有更高的内存效率。 我们建议使用 3000 左右的值来获得空间效率较高的编码，同时不会过多地降低 PFADD 效率，即稀疏编码的复杂度为 O(N)。如果不考虑CPU，而是空间，并且数据集由许多 HyperLogLogs 基数介于 0-15000 范围内的数据集组成，则可以将该值提高到大约 10000。 | 
| reserved-memory-percent | 默认值：25 类型：整数 可修改：是 更改生效：立即 |  为非数据使用预留的节点内存的百分比。默认情况下，Redis OSS 数据占用会一直增长，直至消耗掉节点的所有内存。如果发生这种情况，可能会因内存分页过多而影响节点性能。通过预留内存，您可以为非 Redis OSS 用途留出一些可用内存，以帮助减少分页量。 此参数特定于标准 Redis OSS 发行版 ElastiCache，不属于标准 Redis OSS 发行版的一部分。 有关更多信息，请参阅`reserved-memory`和[管理 Valkey 和 Redis OSS 的预留内存](redis-memory-management.md)。 | 

#### Redis OSS 3.2.4 中已更改的参数（加强版）
<a name="ParameterGroups.Redis.3-2-4.Changed"></a>

**参数组系列：** redis3.2

对于 Redis OSS 3.2.4，以下参数已更改。


****  

|  Name  |  Details |  更改  | 
| --- | --- | --- | 
| activerehashing | 可修改：如果参数组未与任何集群关联，则为“是”。否则不是必需。 | 可修改：否。 | 
| databases | 可修改：如果参数组未与任何集群关联，则为“是”。否则不是必需。 | 可修改：否。 | 
| appendonly | 默认：关闭 可修改：否 | 如果您需要从早期版本的 Redis OSS 升级，则必须先禁用 `appendonly`。 | 
| appendfsync | 默认：关闭 可修改：否 | 如果您需要从早期版本的 Redis OSS 升级，则必须先禁用 `appendfsync`。 | 
| repl-timeout | 默认值：60 可修改：否 | 目前无法修改，默认值为 60。 | 
| tcp-keepalive | 默认：300 | 默认值为 0。 | 
| list-max-ziplist-entries |  | 参数不再可用。 | 
| list-max-ziplist-value |  | 参数不再可用。 | 

### Redis OSS 2.8.24（加强版）增加的参数
<a name="ParameterGroups.Redis.2-8-24"></a>

**参数组系列：** redis2.8

对于 Redis OSS 2.8.24，不支持附加参数。

### Redis OSS 2.8.23（加强版）增加的参数
<a name="ParameterGroups.Redis.2-8-23"></a>

**参数组系列：** redis2.8

对于 Redis OSS 2.8.23，支持以下附加参数。


****  

|  Name  |  Details |  说明  | 
| --- | --- | --- | 
| close-on-slave-write  | 默认值：yes 类型：字符串（yes/no） 可修改：是 更改生效：立即 | 如果启用，尝试写入只读副本的客户端将会断开连接。 | 

#### close-on-slave-write 的工作原理
<a name="w2aac24c16c30c49c15c39b9"></a>

该`close-on-slave-write`参数由 Amazon ElastiCache 引入，可让您更好地控制集群在主节点和只读副本节点因将只读副本提升为主节点而交换角色时群集的响应方式。

![\[图片： close-on-replica-write，一切正常\]](http://docs.aws.amazon.com/zh_cn/AmazonElastiCache/latest/dg/images/ElastiCache-close-on-slave-write-01.png)


如果出于支持多可用区的复制组发生故障转移之外的任何其他原因，只读副本集群提升为主集群，则客户端将继续尝试写入端点 A。由于端点现在是只读副本的端点，这些写入将会失败。这是 Redis OSS 在ElastiCache 引入之前的行为，`close-on-replica-write`以及禁`close-on-replica-write`用后的行为。

![\[图片: close-on-slave-write，写入失败\]](http://docs.aws.amazon.com/zh_cn/AmazonElastiCache/latest/dg/images/ElastiCache-close-on-slave-write-02.png)


在启用 `close-on-replica-write` 的情况下，只要客户端尝试写入只读副本，客户端与集群的连接就会被关闭。您的应用程序逻辑应检测断开连接情况，检查 DNS 表，然后重新连接到主端点（现在是端点 B）。

![\[Image: close-on-slave-write，正在写入新的主群集\]](http://docs.aws.amazon.com/zh_cn/AmazonElastiCache/latest/dg/images/ElastiCache-close-on-slave-write-03.png)


#### 何时可以禁用 close-on-replica-write
<a name="w2aac24c16c30c49c15c39c11"></a>

如果禁用 `close-on-replica-write` 会导致写入集群的操作失败，那么为什么禁用 `close-on-replica-write`？

如前所述，在启用 `close-on-replica-write` 的情况下，只要客户端尝试写入只读副本，客户端与集群的连接就会被关闭。建立与节点的新连接需要时间。因此，由于对副本的写入请求而断开连接并重新连接也会影响通过相同连接处理的读取请求的延迟。在建立新连接之前，此影响会持续存在。如果您的应用程序主要执行大量读取操作或者对延迟非常敏感，您可能使客户端保持连接，以避免降低读取性能。

### Redis OSS 2.8.22（加强版）增加的参数
<a name="ParameterGroups.Redis.2-8-22"></a>

**参数组系列：** redis2.8

对于 Redis OSS 2.8.22，不支持附加参数。

**重要**  
从 Redis OSS 版本 2.8.22 开始，`repl-backlog-size` 应用于主集群以及副本集群。
从 Redis OSS 版本 2.8.22 开始，不支持 `repl-timeout` 参数。如果它被更改， ElastiCache 将像我们一样用默认值（60 秒）覆盖。`appendonly`

不再支持以下参数。
+ *appendonly*
+ *appendfsync*
+ *repl-timeout*

### Redis OSS 2.8.21 增加的参数
<a name="ParameterGroups.Redis.2-8-21"></a>

**参数组系列：** redis2.8

对于 Redis OSS 2.8.21，不支持附加参数。

### Redis OSS 2.8.19 增加的参数
<a name="ParameterGroups.Redis.2-8-19"></a>

**参数组系列：** redis2.8

对于 Redis OSS 2.8.19，不支持附加参数。

### Redis OSS 2.8.6 增加的参数
<a name="ParameterGroups.Redis.2-8-6"></a>

**参数组系列：** redis2.8

对于 Redis OSS 2.8.6，支持以下附加参数。


****  

|  Name  |  Details  |  说明  | 
| --- | --- | --- | 
| min-slaves-max-lag  | 默认值：10 类型：整数 可修改：是 更改生效：立即 | 主节点必须从只读副本收到 Ping 请求的秒数。如果此时间量已过，但主节点未收到 Ping，则不再将副本视为可用。如果可用副本的数量降至以下 min-slaves-to-write，则主副本将在此时停止接受写入。 如果此参数或 min-slaves-to-write为 0，则即使没有副本可用，主节点也将始终接受写入请求。 | 
| min-slaves-to-write | 默认：0 类型：整数 可修改：是 更改生效：立即 | 使主节点可以从客户端接受写入所必需的可用只读副本的最小数目。如果可用副本数下降到低于此数字，则主节点不再接受写入请求。 如果此参数或 min-slaves-max-lag为 0，则即使没有副本可用，主节点也将始终接受写入请求。 | 
| notify-keyspace-events | 默认值：（空字符串） 类型：字符串 可修改：是 更改生效：立即 | Redis OSS 可以向客户端通知的键空间事件类型。每种事件类型由单个字母表示： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonElastiCache/latest/dg/ParameterGroups.Engine.html) 您可以使用这些事件类型的任何组合。例如，*AKE* 表示 Redis OSS 可以发布所有事件类型的通知。 请勿使用上面未列出的任何字符；尝试这样操作会导致错误消息。 默认情况下，此参数设置为空字符串，这表示禁用了键空间事件通知。 | 
| repl-backlog-size | 默认值：1048576 类型：整数 可修改：是 更改生效：立即 | 主节点积压缓冲区的大小（以字节为单位）。积压用于记录主节点上数据的更新。只读副本连接到主节点时会尝试执行部分同步（`psync`），应用积压中的数据以与主节点同步。如果 `psync` 失败，则需要完整同步。 此参数的最小值为 16384。  从 Redis OSS 2.8.22 开始，此参数应用于主集群以及只读副本。  | 
| repl-backlog-ttl | 默认值：3600 类型：整数 可修改：是 更改生效：立即 | 主节点保留积压缓冲区的秒数。从上一个副本节点断开连接时开始，积压中的数据将保持不变，直到 `repl-backlog-ttl` 过期。如果副本未在此时间内连接到主节点，则主节点会释放积压缓冲区。当副本最终重新连接时，它必须执行与主节点的完整同步。 如果此参数设置为 0，则永不释放积压缓冲区。 | 
| repl-timeout | 默认值：60 类型：整数 可修改：是 更改生效：立即 | 表示超时期限（以秒为单位），适用于：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonElastiCache/latest/dg/ParameterGroups.Engine.html) | 

### Redis OSS 2.6.13 参数
<a name="ParameterGroups.Redis.2-6-13"></a>

**参数组系列：** redis2.6

Redis OSS 2.6.13 是支持的 Redis OSS 的第一个版本。 ElastiCache下表显示了支持的 Redis OSS 2.6.13 参数。 ElastiCache 


****  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonElastiCache/latest/dg/ParameterGroups.Engine.html)

**注意**  
如果您没有为 Redis OSS 2.6.13 集群指定参数组，则将使用默认的参数组（`default.redis2.6`）。您不能在默认的参数组中更改任何参数的值；但是，您始终可以创建自定义参数组，然后随时将其分配给您的集群。

### 特定于 Redis OSS 节点类型的参数
<a name="ParameterGroups.Redis.NodeSpecific"></a>

虽然大多数参数具有单个值，但是某些参数根据使用的节点类型具有不同的值。下表显示了每种节点类型的 `maxmemory`、`client-output-buffer-limit-slave-hard-limit` 和 `client-output-buffer-limit-slave-soft-limit` 参数的默认值。`maxmemory` 的值是节点上可供您使用（数据和其他用途）的最大字节数。有关更多信息，请参阅[可用内存](https://aws.amazon.com/premiumsupport/knowledge-center/available-memory-elasticache-redis-node/)。

**注意**  
无法修改 `maxmemory` 参数。


|  节点类型  | Maxmemory  | C lient-output-buffer-limit-slave-hard-limit | C lient-output-buffer-limit-slave-soft-limit | 
| --- | --- | --- | --- | 
| cache.t1.micro | 142606336 | 14260633 | 14260633 | 
| cache.t2.micro | 581959680 | 58195968 | 58195968 | 
| cache.t2.small | 1665138688 | 166513868 | 166513868 | 
| cache.t2.medium | 3461349376 | 346134937 | 346134937 | 
| cache.t3.micro | 536870912 | 53687091 | 53687091 | 
| cache.t3.small | 1471026299 | 147102629 | 147102629 | 
| cache.t3.medium | 3317862236 | 331786223 | 331786223 | 
| cache.t4g.micro | 536870912 | 53687091 | 53687091 | 
| cache.t4g.small | 1471026299 | 147102629 | 147102629 | 
| cache.t4g.medium | 3317862236 | 331786223 | 331786223 | 
| cache.m1.small | 943718400 | 94371840 | 94371840 | 
| cache.m1.medium | 3093299200 | 309329920 | 309329920 | 
| cache.m1.large | 7025459200 | 702545920 | 702545920 | 
| cache.m1.xlarge | 14889779200 | 1488977920 | 1488977920 | 
| cache.m2.xlarge | 17091788800 | 1709178880 | 1709178880 | 
| cache.m2.2xlarge | 35022438400 | 3502243840 | 3502243840 | 
| cache.m2.4xlarge | 70883737600 | 7088373760 | 7088373760 | 
| cache.m3.medium | 2988441600 | 309329920 | 309329920 | 
| cache.m3.large | 6501171200 | 650117120 | 650117120 | 
| cache.m3.xlarge | 14260633600 | 1426063360 | 1426063360 | 
| cache.m3.2xlarge | 29989273600 | 2998927360 | 2998927360 | 
| cache.m4.large | 6892593152 | 689259315 | 689259315 | 
| cache.m4.xlarge | 15328501760 | 1532850176 | 1532850176 | 
| cache.m4.2xlarge | 31889126359 | 3188912636 | 3188912636 | 
| cache.m4.4xlarge | 65257290629 | 6525729063 | 6525729063 | 
| cache.m4.10xlarge | 166047614239 | 16604761424 | 16604761424 | 
| cache.m5.large | 6854542746 | 685454275  | 685454275 | 
| cache.m5.xlarge | 13891921715 | 1389192172 | 1389192172 | 
| cache.m5.2xlarge | 27966669210 | 2796666921 | 2796666921 | 
| cache.m5.4xlarge | 56116178125 | 5611617812 | 5611617812 | 
| cache.m5.12xlarge | 168715971994 | 16871597199 | 16871597199 | 
| cache.m5.24xlarge | 337500562842 | 33750056284 | 33750056284 | 
| cache.m6g.large | 6854542746 | 685454275 | 685454275 | 
| cache.m6g.xlarge | 13891921715 | 1389192172 | 1389192172 | 
| cache.m6g.2xlarge | 27966669210 | 2796666921 | 2796666921 | 
| cache.m6g.4xlarge | 56116178125 | 5611617812 | 5611617812 | 
| cache.m6g.8xlarge | 111325552312 | 11132555231 | 11132555231 | 
| cache.m6g.12xlarge | 168715971994 | 16871597199 | 16871597199 | 
| cache.m6g.16xlarge | 225000375228 | 22500037523 | 22500037523 | 
| cache.c1.xlarge | 6501171200 | 650117120 | 650117120 | 
| cache.r3.large | 14470348800 | 1468006400 | 1468006400 | 
| cache.r3.xlarge | 30513561600 | 3040870400 | 3040870400 | 
| cache.r3.2xlarge | 62495129600 | 6081740800 | 6081740800 | 
| cache.r3.4xlarge | 126458265600 | 12268339200 | 12268339200 | 
| cache.r3.8xlarge | 254384537600 | 24536678400 | 24536678400 | 
| cache.r4.large | 13201781556 | 1320178155 | 1320178155 | 
| cache.r4.xlarge | 26898228839 | 2689822883 | 2689822883 | 
| cache.r4.2xlarge | 54197537997 | 5419753799 | 5419753799 | 
| cache.r4.4xlarge | 108858546586 | 10885854658 | 10885854658 | 
| cache.r4.8xlarge | 218255432090 | 21825543209 | 21825543209 | 
| cache.r4.16xlarge | 437021573120 | 43702157312 | 43702157312 | 
| cache.r5.large | 14037181030 | 1403718103 | 1403718103 | 
| cache.r5.xlarge | 28261849702 | 2826184970 | 2826184970 | 
| cache.r5.2xlarge | 56711183565 | 5671118356 | 5671118356 | 
| cache.r5.4xlarge | 113609865216 | 11360986522 | 11360986522 | 
| cache.r5.12xlarge | 341206346547 | 34120634655 | 34120634655 | 
| cache.r5.24xlarge | 682485973811 | 68248597381 | 68248597381 | 
| cache.r6g.large | 14037181030 | 1403718103 | 1403718103 | 
| cache.r6g.xlarge | 28261849702 | 2826184970 | 2826184970 | 
| cache.r6g.2xlarge | 56711183565 | 5671118356 | 5671118356 | 
| cache.r6g.4xlarge | 113609865216 | 11360986522 | 11360986522 | 
| cache.r6g.8xlarge | 225000375228 | 22500037523 | 22500037523 | 
| cache.r6g.12xlarge | 341206346547 | 34120634655 | 34120634655 | 
| cache.r6g.16xlarge | 450000750456 | 45000075046 | 45000075046 | 
| cache.r6gd.xlarge | 28261849702 | 2826184970 | 2826184970 | 
| cache.r6gd.2xlarge | 56711183565 | 5671118356 | 5671118356 | 
| cache.r6gd.4xlarge | 113609865216 | 11360986522 | 11360986522 | 
| cache.r6gd.8xlarge | 225000375228 | 22500037523 | 22500037523 | 
| cache.r6gd.12xlarge | 341206346547 | 34120634655 | 34120634655 | 
| cache.r6gd.16xlarge | 450000750456 | 45000075046 | 45000075046 | 
| cache.r7g.large | 14037181030 | 1403718103 | 1403718103 | 
| cache.r7g.xlarge | 28261849702 | 2826184970 | 2826184970 | 
| cache.r7g.2xlarge | 56711183565 | 5671118356 | 5671118356 | 
| cache.r7g.4xlarge | 113609865216 | 11360986522 | 11360986522 | 
| cache.r7g.8xlarge | 225000375228 | 22500037523 | 22500037523 | 
| cache.r7g.12xlarge | 341206346547 | 34120634655 | 34120634655 | 
| cache.r7g.16xlarge | 450000750456 | 45000075046 | 45000075046 | 
| cache.m7g.large | 6854542746 | 685454275 | 685454275 | 
| cache.m7g.xlarge | 13891921715 | 1389192172 | 1389192172 | 
| cache.m7g.2xlarge | 27966669210 | 2796666921 | 2796666921 | 
| cache.m7g.4xlarge | 56116178125 | 5611617812 | 5611617812 | 
| cache.m7g.8xlarge | 111325552312 | 11132555231 | 11132555231 | 
| cache.m7g.12xlarge | 168715971994 | 16871597199 | 16871597199 | 
| cache.m7g.16xlarge | 225000375228 | 22500037523 | 22500037523 | 
| cache.c7gn.large | 3317862236 | 1403718103 | 1403718103 | 
| cache.c7gn.xlarge | 6854542746 | 2826184970 | 2826184970 | 
| cache.c7gn.2xlarge | 13891921715 | 5671118356 | 5671118356 | 
| cache.c7gn.4xlarge | 27966669210 | 11360986522 | 11360986522 | 
| cache.c7gn.8xlarge | 56116178125 | 22500037523 | 22500037523 | 
| cache.c7gn.12xlarge | 84357985997 | 34120634655 | 34120634655 | 
| cache.c7gn.16xlarge | 113609865216 | 45000075046 | 45000075046 | 

**注意**  
默认情况下，所有最新一代实例类型将在 Amazon Virtual Private Cloud VPC 中创建。  
T1 实例不支持多可用区。  
T1 和 T2 实例不支持 Redis OSS AOF。  
Redis OSS 版本 2.8.22 及更高版本不支持 Redis OSS 配置变量 `appendonly` 和 `appendfsync`。

## Memcached 特定的参数
<a name="ParameterGroups.Memcached"></a>

**Memcached**

如果您没有为 Memcached 集群指定参数组，则将使用适合您引擎版本的默认参数组。您无法更改默认参数组中的任何参数的值。但是，您可以随时创建自定义参数组并将其分配给集群。有关更多信息，请参阅 [创建 ElastiCache 参数组](ParameterGroups.Creating.md)。

**Topics**
+ [Memcached 1.6.17 更改](#ParameterGroups.Memcached.1.6.17)
+ [Memcached 1.6.6 增加的参数](#ParameterGroups.Memcached.1-6-6)
+ [Memcached 1.5.10 参数更改](#ParameterGroups.Memcached.1-5-10)
+ [Memcached 1.4.34 增加的参数](#ParameterGroups.Memcached.1-4-34)
+ [Memcached 1.4.33 增加的参数](#ParameterGroups.Memcached.1-4-33)
+ [Memcached 1.4.24 增加的参数](#ParameterGroups.Memcached.1-4-24)
+ [Memcached 1.4.14 增加的参数](#ParameterGroups.Memcached.1-4-14)
+ [Memcached 1.4.5 支持的参数](#ParameterGroups.Memcached.1-4-5)
+ [Memcached 连接开销](#ParameterGroups.Memcached.Overhead)
+ [特定于 Memcached 节点类型的参数](#ParameterGroups.Memcached.NodeSpecific)

### Memcached 1.6.17 更改
<a name="ParameterGroups.Memcached.1.6.17"></a>

从 Memcached 1.6.17 开始，我们不再支持以下管理命令：`lru_crawler`、`lru` 和 `slabs`。通过这些更改，您将无法 enable/disable `lru_crawler`在运行时通过命令进行操作。请 enable/disable `lru_crawler`修改您的自定义参数组。

### Memcached 1.6.6 增加的参数
<a name="ParameterGroups.Memcached.1-6-6"></a>

对于 Memcached 1.6.6，不支持任何附加参数。

**参数组系列：**memcached1.6

### Memcached 1.5.10 参数更改
<a name="ParameterGroups.Memcached.1-5-10"></a>

对于 Memcached 1.5.10，支持以下附加参数。

**参数组系列：**memcached1.5


| Name | Details | 说明 | 
| --- | --- | --- | 
| no\$1modern  | 默认：1 类型：布尔值 可修改：是 允许的值：0,1 更改生效：启动时  |  用于禁用 `slab_reassign`、`lru_maintainer_thread`、`lru_segmented` 和 `maxconns_fast` 命令的别名。 使用 Memcached 1.5 及更高版本时，`no_modern` 还会将哈希算法设置为 `jenkins`。 此外，在使用 Memcached 1.5.10 时，`inline_ascii_reponse` 由参数 `parallelly` 控制。这意味着 `no_modern` 被禁用，那么 `inline_ascii_reponse` 也会被禁用。从 Memcached 引擎 1.5.16 起，`inline_ascii_response` 参数不再适用，因此启用或禁用 `no_modern` 对 `inline_ascii_reponse` 没有影响。 如果 `no_modern` 内禁用，则 `slab_reassign`、`lru_maintainer_thread`、`lru_segmented` 和 `maxconns_fast` 将启用。由于 `slab_automove` 和 `hash_algorithm` 参数不是 SWITCH 参数，它们的设置将基于参数组中的配置。 如果要禁用 `no_modern` 并恢复到 `modern`，您必须配置一个自定义参数组来禁用该参数，然后重新启动以使这些更改生效。  自 2021 年 8 月 20 日起，此参数的原定设置配置值已从 0 改为 1。2021 年 8 月 20 日之后，每个地区的新ElastiCache 用户将自动选择更新的默认值。2021 年 8 月 20 日之前所在地区的现有 ElastiCache 用户需要手动修改其自定义参数组才能接受这一新更改。   | 
| inline\$1ascii\$1resp  | 默认：0 类型：布尔值 可修改：是 允许的值：0,1 更改生效：启动时  |  存储项中的 `VALUE` 响应的数字，最多使用 24 个字节。ASCII `get` 和 `faster` 集的速度较慢。 | 

对于 Memcached 1.5.10，删除了以下参数。


| Name | Details | 说明 | 
| --- | --- | --- | 
| expirezero\$1does\$1not\$1evict  | 默认：0 类型：布尔值 可修改：是 允许的值：0,1 更改生效：启动时  |  在此版本中不再受支持。 | 
| modern  | 默认：1 类型：布尔值 可修改：是（如果设置为 `no_modern`，则需要重新启动） 允许的值：0,1 更改生效：启动时  |  在此版本中不再受支持。从此版本开始，默认情况下，每次启动或重新启动时都会启用 `no-modern`。 | 

### Memcached 1.4.34 增加的参数
<a name="ParameterGroups.Memcached.1-4-34"></a>

对于 Memcached 1.4.34，不支持任何附加参数。

**参数组系列：** memcached1.4

### Memcached 1.4.33 增加的参数
<a name="ParameterGroups.Memcached.1-4-33"></a>

对于 Memcached 1.4.33，支持以下附加参数。

**参数组系列：** memcached1.4


| Name | Details | 说明 | 
| --- | --- | --- | 
|  modern  | 默认值：启用 类型：布尔值 可修改：是 更改生效：启动时  |  访问多项功能的别名。启用 `modern` 等同于启用以下命令并使用 murmur3 哈希算法：`slab_reassign`、`slab_automove`、`lru_crawler`、`lru_maintainer`、`maxconns_fast` 和 `hash_algorithm=murmur3`。 | 
|  watch  | 默认值：启用 类型：布尔值 可修改：是 更改生效：立即 在用户达到其 `watcher_logbuf_size` 和 `worker_logbuf_size` 限制时可以删除日志。  |  日志提取、移出或更改。例如，在用户启用 `watch` 时，出现 `get`、`set`、`delete` 或 `update` 的情况下可以查看日志。 | 
|  idle\$1timeout  | 默认值：0（禁用） 类型：整数 可修改：是 更改生效：启动时  |  在要求关闭客户端之前，允许客户端保持空闲的最短秒数。取值范围：0 到 86400。 | 
|  track\$1sizes  | 默认值：禁用 类型：布尔值 可修改：是 更改生效：启动时  |  显示每个 slab 组已用的大小。 启用 `track_sizes` 可让您运行 `stats sizes` 而无需运行 `stats sizes_enable`， | 
|  watcher\$1logbuf\$1size  | 默认值：256 (KB) 类型：整数 可修改：是 更改生效：启动时  |  `watch` 命令启用 Memcached 的流日志记录。但是，在移出、更改或提取速率足够高而导致了日志记录缓冲区满填满时，`watch` 可以删除日志。在这些情况下，用户可以增加缓冲区大小以减少日志丢失的可能性。 | 
|  worker\$1logbuf\$1size  | 默认值：64 (KB) 类型：整数 可修改：是 更改生效：启动时  |  `watch` 命令启用 Memcached 的流日志记录。但是，在移出、更改或提取速率足够高而导致了日志记录缓冲区满填满时，`watch` 可以删除日志。在这些情况下，用户可以增加缓冲区大小以减少日志丢失的可能性。 | 
|  slab\$1chunk\$1max  | 默认值：524288 (字节)  类型：整数 可修改：是 更改生效：启动时  |  指定 slab 的最大大小。设置较小的 slab 大小可以更有效地使用内存。大于 `slab_chunk_max` 的项目将拆分为多个 slab。 | 
|  lru\$1crawler metadump [all\$11\$12\$13] | 默认值：禁用  类型：布尔值 可修改：是 更改生效：立即  |  如果启用了 lru\$1crawler，则此命令会转储所有键。 `all\|1\|2\|3` - 所有 slab，或者指定特定 slab 编号 | 

### Memcached 1.4.24 增加的参数
<a name="ParameterGroups.Memcached.1-4-24"></a>

对于 Memcached 1.4.24，支持以下附加参数。

**参数组系列：** memcached1.4


| Name | Details | 说明 | 
| --- | --- | --- | 
|  disable\$1flush\$1all  | 默认值：0（禁用） 类型：布尔值 可修改：是 更改生效：启动时  |  添加参数 (`-F`) 以禁用 flush\$1all。如果您再也不想在生产实例上运行完全刷新，则这样做会很有用。 值：0，1（当值为 0 时，用户可以执行 `flush_all`）。 | 
|  hash\$1algorithm  | 默认值：jenkins 类型：字符串 可修改：是 更改生效：启动时  | 要使用的哈希算法。允许的值：murmur3 和 jenkins。 | 
|  lru\$1crawler  | 默认值：0（禁用） 类型：布尔值 可修改：是 更改生效：重新启动后  您可在运行时通过命令行临时启用 `lru_crawler`。有关更多信息，请参阅“描述”列。   |  清除已过期的项目的 Slab 类。此过程在后台运行，并且产生的影响很小。目前要求使用手动命令来启用网络爬取。 要临时启用网络爬取，请在命令行处运行 `lru_crawler enable`。 `lru_crawler 1,3,5` 对 Slab 类 1、3 和 5 进行网络爬取，以查找要添加到空闲列表的过期项目。 值：0，1  在命令行处启用 `lru_crawler` 将启用爬网程序，直到在命令行处或下次重启时将其禁用。要永久性启用爬网程序，您必须修改参数值。有关更多信息，请参阅 [修改 ElastiCache 参数组](ParameterGroups.Modifying.md)。   | 
|  lru\$1maintainer  | 默认值：0（禁用） 类型：布尔值 可修改：是 更改生效：启动时  |  一个后台线程，用于在达到容量时在 LRUs 之间随机播放项目。值：0，1。 | 
|  expirezero\$1does\$1not\$1evict  | 默认值：0（禁用） 类型：布尔值 可修改：是 更改生效：启动时  |  在与 `lru_maintainer` 一起使用时，使过期时间为 0 的项目不可收回。  这可以挤出内存以供其他可收回项目使用。  可以设置为忽略 `lru_maintainer`。 | 

### Memcached 1.4.14 增加的参数
<a name="ParameterGroups.Memcached.1-4-14"></a>

对于 Memcached 1.4.14，支持以下附加参数。

**参数组系列：** memcached1.4


**Memcached 1.4.14 中添加的参数**  

|  Name  |  Details  |  说明  | 
| --- | --- | --- | 
| config\$1max | 默认值：16 类型：整数 可修改：否 |  ElastiCache 配置条目的最大数量。 | 
| config\$1size\$1max | 默认值：65536 类型：整数 可修改：否 | 配置条目的最大大小（单位：字节）。 | 
| hashpower\$1init | 默认值：16 类型：整数 可修改：否 |  ElastiCache 哈希表的初始大小，以二的乘数表示。默认值为 16 (2^16) 或 65536 长度的密钥。 | 
| maxconns\$1fast | 默认值：0 (false) 类型：布尔值 可修改：是 更改生效：重新启动后 | 在达到最大连接限制时，请更改处理新连接请求的方式。如果将此参数设为 0（即零），新连接将被添加至缓冲区队列，并将等待直到其他连接已关闭。如果参数设置为 1，则向客户端 ElastiCache 发送错误并立即关闭连接。 | 
| slab\$1automove | 默认：0 类型：整数 可修改：是 更改生效：重新启动后 | 调整 Slab 自动移动算法：如果将此参数设为 0（即零），自动移动算法将禁用。如果将参数设为 1，ElastiCache 便会采用一种缓慢而保守的方法来自动移动 Slab。如果将其设置为 2，则每当有人驱逐时，都会 ElastiCache 积极移动石板。（建议不要使用此模式，测试用途除外）。 | 
| slab\$1reassign | 默认值：0 (false) 类型：布尔值 可修改：是 更改生效：重新启动后 | 启用或禁用 Slab 重新分配。如果将此参数设为 1，您可以使用“Slab 重新分配”命令来手动重新分配内存。 | 

### Memcached 1.4.5 支持的参数
<a name="ParameterGroups.Memcached.1-4-5"></a>

**参数组系列：** memcached1.4

对于 Memcached 1.4.5，支持以下参数。


**Memcached 1.4.5 中添加的参数**  

|  Name  |  Details  |  说明  | 
| --- | --- | --- | 
| backlog\$1queue\$1limit | 默认值：1024 类型：整数 可修改：否 | 积压队列限制。 | 
| binding\$1protocol | 默认值：auto 类型：字符串 可修改：是 更改生效：重新启动后 | 绑定协议。允许的值为：`ascii` 和 `auto`。 有关修改 `binding_protocol` 的值的指南，请参阅[修改 ElastiCache 参数组](ParameterGroups.Modifying.md)。 | 
| cas\$1disabled | 默认值：0 (false) 类型：布尔值 可修改：是 更改生效：重新启动后 | 如果为 1 (true)，则检查和设置 (CAS) 操作将禁用，存储的项目消耗的字节将比启用 CAS 时消耗的字节少 8 字节。 | 
| chunk\$1size | 默认值：48 类型：整数 可修改：是 更改生效：重新启动后 | 为最小项目的密钥、值和标志分配的最小空间量（以字节为单位）。 | 
| chunk\$1size\$1growth\$1factor | 默认值：1.25 类型：浮点数 可修改：是 更改生效：重新启动后 | 控制各个连续 Memcached 区块的大小的增长系数；每个区块将比前一个区块大 chunk\$1size\$1growth\$1factor 倍。 | 
| error\$1on\$1memory\$1exhausted | 默认值：0 (false) 类型：布尔值 可修改：是 更改生效：重新启动后 | 如果 1（为真），当没有更多的内存用于存储项目时，Memcached 将返回一个错误，而非移出项目。 | 
| large\$1memory\$1pages | 默认值：0 (false) 类型：布尔值 可修改：否 | 如果 1 (true)， ElastiCache 将尝试使用较大的内存页。 | 
| lock\$1down\$1paged\$1memory | 默认值：0 (false) 类型：布尔值 可修改：否 | 如果 1 (true)， ElastiCache 将锁定所有分页内存。 | 
| max\$1item\$1size | 默认值：1048576 类型：整数 可修改：是 更改生效：重新启动后 | 可以存储在集群中的最大项目的大小（单位：字节）。 | 
| max\$1simultaneous\$1connections | 默认值：65000 类型：整数 可修改：否 | 最大同时连接数。 | 
| maximize\$1core\$1file\$1limit | 默认值：0 (false) 类型：布尔值 可修改:  更改生效：重新启动后 | 如果 1 (true)， ElastiCache 将最大化核心文件限制。 | 
| memcached\$1connections\$1overhead | 默认值：100 类型：整数 可修改：是 更改生效：重新启动后 | 为 Memcached 连接和其他杂项开支预留的内存量。有关此参数的信息，请参阅[Memcached 连接开销](#ParameterGroups.Memcached.Overhead)。 | 
| requests\$1per\$1event | 默认值：20 类型：整数 可修改：否 | 每个事件请求获取给定连接的最大数量。此限制需要防止资源匮乏。 | 

### Memcached 连接开销
<a name="ParameterGroups.Memcached.Overhead"></a>

每个节点上可用于存储项目的内存计算方式为：此节点上的总可用内存（存储于 `max_cache_memory` 参数中）减去连接和其他开支所占用的内存（存储于 `memcached_connections_overhead` 参数中）。例如，`cache.m1.small` 类型的节点的 `max_cache_memory` 为 1300MB。`memcached_connections_overhead` 的默认值为 100MB，Memcached 进程可用于存储项目的内存则为 1200MB。

`memcached_connections_overhead` 参数的默认值满足大多数用例；然而，分配给连接开支的必需量会因多种因素（包括请求率、有效负载大小和连接数）而异。

您可以更改 `memcached_connections_overhead` 的值，以更好地满足您的应用程序的需求。例如，增大 `memcached_connections_overhead` 参数的值将减少用于存储项目的内存量，并为连接开销提供更大的缓冲区。减小 `memcached_connections_overhead` 参数的值将为您提供更多的内存来存储项目，但可能会增加使用交换分区和性能下降的风险。如果您发现交换分区使用情况和性能降低，请尝试增加 `memcached_connections_overhead` 参数的值。

**重要**  
对于 `cache.t1.micro` 节点类型，`memcached_connections_overhead` 的值是通过以下方式决定：  
如果您的集群使用默认参数组，则 ElastiCache 会将的值设置`memcached_connections_overhead`为 13MB。
如果您的集群使用的是您自己创建的参数组，那么您可以将 `memcached_connections_overhead` 的值设置为您选定的值。

### 特定于 Memcached 节点类型的参数
<a name="ParameterGroups.Memcached.NodeSpecific"></a>

虽然大多数参数具有单个值，但是某些参数根据使用的节点类型具有不同的值。下表显示了每种节点类型的 `max_cache_memory` 和 `num_threads` 参数的默认值。无法修改这些参数的值。


|  节点类型  | max\$1cache\$1memory（单位：MB）  | num\$1threads  | 
| --- | --- | --- | 
| cache.t1.micro | 213  | 1 | 
| cache.t2.micro | 555 | 1 | 
| cache.t2.small | 1588 | 1 | 
| cache.t2.medium | 3301 | 2 | 
| cache.t3.micro | 512 | 2 | 
| cache.t3.small | 1402 | 2 | 
| cache.t3.medium | 3364 | 2 | 
| cache.t4g.micro | 512 | 2 | 
| cache.t4g.small | 1402 | 2 | 
| cache.t4g.medium | 3164 | 2 | 
| cache.m1.small | 1301 | 1 | 
| cache.m1.medium | 3350 | 1 | 
| cache.m1.large | 7100 | 2 | 
| cache.m1.xlarge | 14600  | 4 | 
| cache.m2.xlarge | 33800 | 2 | 
| cache.m2.2xlarge | 30412 | 4 | 
| cache.m2.4xlarge | 68000  | 16 | 
| cache.m3.medium | 2850 | 1 | 
| cache.m3.large | 6200 | 2 | 
| cache.m3.xlarge | 13600 | 4 | 
| cache.m3.2xlarge | 28600 | 8 | 
| cache.m4.large | 6573 | 2 | 
| cache.m4.xlarge | 11496  | 4 | 
| cache.m4.2xlarge | 30412 | 8 | 
| cache.m4.4xlarge | 62234 | 16 | 
| cache.m4.10xlarge | 158355 | 40 | 
| cache.m5.large | 6537 | 2 | 
| cache.m5.xlarge | 13248 | 4 | 
| cache.m5.2xlarge | 26671 | 8 | 
| cache.m5.4xlarge | 53516 | 16 | 
| cache.m5.12xlarge | 160900 | 48 | 
| cache.m5.24xlarge | 321865  | 96 | 
| cache.m6g.large | 6537 | 2 | 
| cache.m6g.xlarge | 13248 | 4 | 
| cache.m6g.2xlarge | 26671 | 8 | 
| cache.m6g.4xlarge | 53516 | 16 | 
| cache.m6g.8xlarge | 107000 | 32 | 
| cache.m6g.12xlarge | 160900 | 48 | 
| cache.m6g.16xlarge | 214577 | 64 | 
| cache.c1.xlarge | 6600 | 8 | 
| cache.r3.large | 13800 | 2 | 
| cache.r3.xlarge | 29100 | 4 | 
| cache.r3.2xlarge | 59600 | 8 | 
| cache.r3.4xlarge | 120600 | 16 | 
| cache.r3.8xlarge | 120600 | 32 | 
| cache.r4.large | 12590 | 2 | 
| cache.r4.xlarge | 25652 | 4 | 
| cache.r4.2xlarge | 51686 | 8 | 
| cache.r4.4xlarge | 103815 | 16 | 
| cache.r4.8xlarge | 208144 | 32 | 
| cache.r4.16xlarge | 416776 | 64 | 
| cache.r5.large | 13387 | 2 | 
| cache.r5.xlarge | 26953 | 4 | 
| cache.r5.2xlarge | 54084 | 8 | 
| cache.r5.4xlarge | 108347 | 16 | 
| cache.r5.12xlarge | 325400 | 48 | 
| cache.r5.24xlarge | 650869 | 96 | 
| cache.r6g.large | 13387 | 2 | 
| cache.r6g.xlarge | 26953 | 4 | 
| cache.r6g.2xlarge | 54084 | 8 | 
| cache.r6g.4xlarge | 108347 | 16 | 
| cache.r6g.8xlarge | 214577 | 32 | 
| cache.r6g.12xlarge | 325400 | 48 | 
| cache.r6g.16xlarge | 429154 | 64 | 
| cache.c7gn.large | 3164 | 2 | 
| cache.c7gn.xlarge | 6537 | 4 | 
| cache.c7gn.2xlarge | 13248 | 8 | 
| cache.c7gn.4xlarge | 26671 | 16 | 
| cache.c7gn.8xlarge | 53516 | 32 | 
| cache.c7gn.12xlarge | 325400 | 48 | 
| cache.c7gn.16xlarge | 108347 | 64 | 

**注意**  
所有 T2 实例都是在 Amazon Virtual Private Cloud (Amazon VPC) 中创建的。