Amazon ElastiCache
用户指南 (API 版本 2015-02-02)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

用于 Redis 的 Amazon ElastiCache—Redis (已启用集群模式) 的扩展

由于对群集的需求发生变化,您可能决定通过更改 Redis (已启用集群模式) 群集中的分片数量来提高性能或降低成本。我们建议使用在线水平扩展来实现这一目的,因为采用这种方法,您的群集在扩展过程中可以继续为请求提供服务。

您决定重新调节群集的情况包括以下几种:

  • 内存压力:

    如果群集中的节点存在内存压力,您可能会决定进行横向扩展,以便获得更多资源来更好地存储数据并为请求提供服务。

    您可以通过监控以下指标来确定您的节点是否存在内存压力:FreeableMemorySwapUsageBytesUseForCache

  • CPU 或网络瓶颈:

    如果延迟/吞吐量问题给您的群集带来麻烦,您可能需要进行横向扩展来解决这些问题。

    您可以通过监控以下指标来监控您的延迟和吞吐量水平:CPUUtilizationNetworkBytesInNetworkBytesOutCurrConnectionsNewConnections

  • 您的群集过度扩展:

    对群集的当前需求是缩减群集不会降低性能,并可以降低成本。

    您可以使用以下指标监控群集的使用情况,以便确定是否可以安全地进行缩减:FreeableMemorySwapUseageBytesUseForCacheCPUUtilizationNetworkBytesInNetworkBytesOutCurrConnectionsNewConnections

扩展的性能影响

当使用离线过程进行扩展时,您的群集在大部分过程中处于离线状态,因此无法为请求提供服务。当使用在线方法进行扩展时,由于扩展是计算密集型操作,因此会导致一定程度的性能下降,但是在整个扩展操作过程中您的群集仍然会继续为请求提供服务。性能的降低程度取决于您的常规 CPU 利用率和数据。

有两种扩展 Redis (已启用集群模式) 群集的方法:即在线和离线。无论您选择哪种方式,都可以执行以下操作:

  • 通过添加或删除节点组来更改复制组中的节点组 (分片) 数量。

  • 采用与旧群集不同的方法来配置新群集中的槽。仅采用离线方法。

  • 更改群集节点的节点类型。如果要更改为较小的节点类型,则必须确保新节点大小拥有足量内存以适应您的数据和 Redis 开销。仅采用离线方法。

    有关更多信息,请参阅 选择节点大小

ElastiCache for Redis—Redis (已启用集群模式) 的离线重新分片和群集重新配置

离线分片重新配置带来的主要优势便是,除了在复制组中添加或删除分片以外,您还可以执行更多操作。在进行离线重新分片时,除了更改复制组中的分片数量,您还可以执行以下操作:

  • 更改复制组的节点类型。

  • 为复制组中的每个节点指定可用区。

  • 升级为更新的引擎版本。

  • 单独指定每个分片中的副本节点数量。

  • 为每个分片指定密钥空间。

离线分片重新配置的主要缺点是,从过程的还原部分开始直到更新应用程序中的终端节点,群集一直处于离线状态。您的群集处于离线状态的时间长短因群集中的数据量而异。

在离线状态下重新配置分片 Redis (已启用集群模式) 群集

  1. 创建现有 Redis 群集的手动备份。有关更多信息,请参阅 进行手动备份

  2. 通过从备份中还原来创建新群集。有关更多信息,请参阅 从备份还原并执行可选的群集规模调整

  3. 将您的应用程序中的终端节点更新为新群集的终端节点。有关更多信息,请参阅 查找您的 ElastiCache 终端节点

ElastiCache for Redis—Redis (已启用集群模式) 的在线重新分片和分片重新平衡

通过对 Redis 的 Amazon ElastiCache 使用在线重新分片和分片重新平衡,您可以在无需停机的情况下动态扩展 Redis (已启用集群模式) 的 ElastiCache。此方法意味着,即使在进行扩展或重新平衡的过程中,您的群集也可以继续为请求提供服务。

您可执行以下操作:

  • 横向扩展 - 通过向 Redis (已启用集群模式) 群集 (复制组) 添加分片 (节点组) 来增加读写容量。

    如果您向复制组添加一个或多个分片,则每个新分片中的节点数量与最小的现有分片中的节点数量相同。

  • 缩减 - 通过删除 Redis (已启用集群模式) 群集中的分片降低读写容量,从而降低成本。

  • 重新平衡 - 在 Redis (已启用集群模式) 群集的 ElastiCache 中的分片之间移动密钥空间,尽可能使其在分片之间均匀分布。

您无法执行以下操作:

  • 横向扩展和缩减:更改您的节点类型。要执行此操作,您必须使用离线过程。

  • 升级您的引擎:将您的引擎版本更改为新版本。要执行此操作,您必须使用离线过程。

  • 单独配置分片:

    • 您无法单独指定每个分片中的节点数量。要执行此操作,您必须使用离线过程。

    • 您无法单独指定分片的密钥空间。要执行此操作,您必须使用离线过程。

目前,以下限制适用于 ElastiCache for Redis 在线重新分片和重新平衡:

  • 这些过程需要 Redis 引擎版本 3.2.10 或更新版本。有关升级引擎版本的信息,请参阅升级引擎版本

  • 槽或密钥空间和大型项目存在以下限制:

    如果分片中的任何密钥包含一个大型项目,在横向扩展或重新平衡时密钥不会迁移到新分片。此功能会导致分片不平衡。

    如果某个分片中的任何密钥包含大型项目 (序列化后大于 256MB 的项目),则在缩减时不会删除该分片。此功能可导致某些分片无法删除。

  • 在横向扩展时,任何新分片中的的节点数量等于最小的现有分片中的节点数量。

  • 在横向扩展时,所有现有分片的任何常见标签将被复制到新分片中。

有关更多信息,请参阅 最佳实践:在线重新分片

您可以使用 AWS 管理控制台、AWS CLI 和 ElastiCache API 水平扩展或重新平衡 Redis (已启用集群模式) 群集的 ElastiCache。

通过在线重新分片功能添加分片

您可以使用 AWS 管理控制台、AWS CLI 或 ElastiCache API 将分片添加到 Redis (已启用集群模式) 群集中。向 Redis (已启用集群模式) 群集添加分片时,现有分片中的所有标签都将复制到新分片中。

添加分片 (控制台)

您可以使用 AWS 管理控制台 将一个或多个分片添加到 Redis (已启用集群模式) 群集中。以下步骤描述了这个过程。

将分片添加到 Redis (已启用集群模式) 群集

  1. 通过以下网址打开 ElastiCache 控制台:https://console.amazonaws.cn/elasticache/

  2. 从导航窗格中,选择 Redis

  3. 查找并选择要向其添加分片的 Redis (已启用集群模式) 群集的名称。

    提示

    Redis (已启用集群模式) 群集在分片列中的值为 1 或更大数值。

  4. 选择 Add shard

    1. 对于 Number of shards to be added,请选择要添加到此群集的分片数量。

    2. 对于 Availability zone(s),请选择 No preferenceSpecify availability zones

    3. 如果您选择 Specify availability zones,则对于每个分片中的每个节点,请从可用区列表中选择节点的可用区。

    4. 选择 Add

添加分片 (AWS CLI)

以下过程介绍了如何通过使用 AWS CLI 添加分片的方法重新配置 Redis (已启用集群模式) 群集中的分片。

modify-replication-group-shard-configuration中使用以下参数:

参数

  • --apply-immediately – 必需。指定分片重新配置操作立即开始。

  • --replication-group-id – 必需。指定在哪个复制组 (群集) 上执行分片重新配置操作。

  • --node-group-count – 必需。指定操作完成时存在的分片 (节点组) 数量。添加分片后,--node-group-count 的值必须大于当前分片数量。

    您也可以使用 --resharding-configuration 为复制组中的每个节点指定可用区。

  • --resharding-configuration – 可选. 复制组中每个分片中的每个节点的首选可用区列表。只有当 --node-group-count 的值大于当前分片数量时,才能使用此参数。如果在添加分片时忽略此参数,则 Amazon ElastiCache 会选择新节点的可用区。

以下示例将重新配置 Redis (已启用集群模式) 群集 my-cluster 中四个分片中的密钥空间。该示例还为每个分片中的每个节点指定可用区。操作将立即开始。

例 - 添加分片

对于 Linux, OS X, or Unix:

aws elasticache modify-replication-group-shard-configuration \ --replication-group-id my-cluster \ --node-group-count 4 \ --resharding-configuration \ "PreferredAvailabilityZones=us-east-2a,us-east-2c" \ "PreferredAvailabilityZones=us-east-2b,us-east-2a" \ "PreferredAvailabilityZones=us-east-2c,us-east-2d" \ "PreferredAvailabilityZones=us-east-2d,us-east-2c" \ --apply-immediately

对于 Windows:

aws elasticache modify-replication-group-shard-configuration ^ --replication-group-id my-cluster ^ --node-group-count 4 ^ --resharding-configuration ^ "PreferredAvailabilityZones=us-east-2a,us-east-2c" ^ "PreferredAvailabilityZones=us-east-2b,us-east-2a" ^ "PreferredAvailabilityZones=us-east-2c,us-east-2d" ^ "PreferredAvailabilityZones=us-east-2d,us-east-2c" ^ --apply-immediately

有关更多信息,请参阅 AWS CLI 文档中的 modify-replication-group-shard-configuration

添加分片 (ElastiCache API)

您可以通过 ModifyReplicationGroupShardConfiguration 操作使用 ElastiCache API 在线重新配置 Redis (已启用集群模式) 群集中的分片。

ModifyReplicationGroupShardConfiguration中使用以下参数:

参数

  • ApplyImmediately=true – 必需。指定分片重新配置操作立即开始。

  • ReplicationGroupId – 必需。指定在哪个复制组 (群集) 上执行分片重新配置操作。

  • NodeGroupCount – 必需。指定操作完成时存在的分片 (节点组) 数量。添加分片后,NodeGroupCount 的值必须大于当前分片数量。

    您也可以使用 ReshardingConfiguration 为复制组中的每个节点指定可用区。

  • ReshardingConfiguration – 可选. 复制组中每个分片中的每个节点的首选可用区列表。只有当 NodeGroupCount 的值大于当前分片数量时,才能使用此参数。如果在添加分片时忽略此参数,则 Amazon ElastiCache 会选择新节点的可用区。

以下过程介绍了如何通过使用 ElastiCache API 添加分片的方法重新配置 Redis (已启用集群模式) 群集中的分片。

例 - 添加分片

以下示例将节点组添加到 Redis (已启用集群模式) 群集 my-cluster 中,因此当操作完成后共有 4 个节点组。该示例还为每个分片中的每个节点指定可用区。操作将立即开始。

https://elasticache.us-east-2.amazonaws.com/ ?Action=ModifyReplicationGroupShardConfiguration &ApplyImmediately=true &NodeGroupCount=4 &ReplicationGroupId=my-cluster &ReshardingConfiguration.ReshardingConfiguration.1.PreferredAvailabilityZones.AvailabilityZone.1=us-east-2a &ReshardingConfiguration.ReshardingConfiguration.1.PreferredAvailabilityZones.AvailabilityZone.2=us-east-2c &ReshardingConfiguration.ReshardingConfiguration.2.PreferredAvailabilityZones.AvailabilityZone.1=us-east-2b &ReshardingConfiguration.ReshardingConfiguration.2.PreferredAvailabilityZones.AvailabilityZone.2=us-east-2a &ReshardingConfiguration.ReshardingConfiguration.3.PreferredAvailabilityZones.AvailabilityZone.1=us-east-2c &ReshardingConfiguration.ReshardingConfiguration.3.PreferredAvailabilityZones.AvailabilityZone.2=us-east-2d &ReshardingConfiguration.ReshardingConfiguration.4.PreferredAvailabilityZones.AvailabilityZone.1=us-east-2d &ReshardingConfiguration.ReshardingConfiguration.4.PreferredAvailabilityZones.AvailabilityZone.2=us-east-2c &Version=2015-02-02 &SignatureVersion=4 &SignatureMethod=HmacSHA256 &Timestamp=20171002T192317Z &X-Amz-Credential=<credential>

有关更多信息,请参阅 ElastiCache API 参考中的 ModifyReplicationGroupShardConfiguration

通过在线重新分片功能删除分片

您可以使用 AWS 管理控制台、AWS CLI 或 ElastiCache API 从 Redis (已启用集群模式) 群集中删除分片。

删除分片 (控制台)

以下过程介绍了如何通过使用 AWS 管理控制台 删除分片的方法重新配置 Redis (已启用集群模式) 群集中的分片。

在从复制组中删除节点组 (分片) 之前,ElastiCache 可确保所有数据适合其余分片。如果数据适合,将根据要求从复制组中删除指定分片。如果数据不适合其余节点组,过程终止。过程终止后,您的复制组的节点组配置将与发出请求之前相同。

您可以使用 AWS 管理控制台 从 Redis (已启用集群模式) 群集中删除一个或多个分片。您无法删除某个复制组中的所有分片。而必须删除复制组。有关更多信息,请参阅 删除具有副本的群集。以下步骤描述了删除一个或多个分片的过程。

从 Redis (已启用集群模式) 群集中删除分片

  1. 通过以下网址打开 ElastiCache 控制台:https://console.amazonaws.cn/elasticache/

  2. 从导航窗格中,选择 Redis

  3. 查找并选择要从其中删除分片的 Redis (已启用集群模式) 群集的名称。

    提示

    Redis (已启用集群模式) 群集在分片列中的值为 1 或更大数值。

  4. 从分片列表中,选择要删除的每个分片的名称旁边的框。

  5. 选择 Delete shard

删除分片 (AWS CLI)

以下过程介绍了如何通过使用 AWS CLI 删除分片的方法重新配置 Redis (已启用集群模式) 群集中的分片。

重要

在从复制组中删除节点组 (分片) 之前,ElastiCache 可确保所有数据适合其余分片。如果数据适合,将根据要求从复制组中删除指定分片 (--node-groups-to-remove),并将其密钥空间映射到其余分片。如果数据不适合其余节点组,过程终止。过程终止后,您的复制组的节点组配置将与发出请求之前相同。

您可以使用 AWS CLI 从 Redis (已启用集群模式) 群集中删除一个或多个分片。您无法删除某个复制组中的所有分片。而必须删除复制组。有关更多信息,请参阅 删除具有副本的群集

modify-replication-group-shard-configuration中使用以下参数:

参数

  • --apply-immediately – 必需。指定分片重新配置操作立即开始。

  • --replication-group-id – 必需。指定在哪个复制组 (群集) 上执行分片重新配置操作。

  • --node-group-count – 必需。指定操作完成时存在的分片 (节点组) 数量。删除分片后,--node-group-count 的值必须小于当前分片数量。

  • --node-groups-to-remove – 当 --node-group-count 小于当前节点组 (分片) 数量时为必填项。要从复制组中删除的分片 (节点组) ID 列表。

以下步骤描述了删除一个或多个分片的过程。

例 - 删除分片

以下示例从 Redis (已启用集群模式) 群集 my-cluster 中删除 2 个节点组,因此当操作完成后共有 2 个节点组。删除分片的密钥空间会均匀地分布在其余分片上。

对于 Linux, OS X, or Unix:

aws elasticache modify-replication-group-shard-configuration \ --replication-group-id my-cluster \ --node-group-count 2 \ --node-groups-to-remove "0002" "0003" \ --apply-immediately

对于 Windows:

aws elasticache modify-replication-group-shard-configuration ^ --replication-group-id my-cluster ^ --node-group-count 2 ^ --node-groups-to-remove "0002" "0003" ^ --apply-immediately

有关更多信息,请参阅 AWS CLI 文档中的 modify-replication-group-shard-configuration

删除分片 (ElastiCache API)

您可以通过 ModifyReplicationGroupShardConfiguration 操作使用 ElastiCache API 在线重新配置 Redis (已启用集群模式) 群集中的分片。

以下过程介绍了如何通过使用 ElastiCache API 删除分片的方法重新配置 Redis (已启用集群模式) 群集中的分片。

重要

在从复制组中删除节点组 (分片) 之前,ElastiCache 可确保所有数据适合其余分片。如果数据适合,将根据要求从复制组中删除指定分片 (NodeGroupsToRemove),并将其密钥空间映射到其余分片。如果数据不适合其余节点组,过程终止。过程终止后,您的复制组的节点组配置将与发出请求之前相同。

您可以使用 ElastiCache API 从 Redis (已启用集群模式) 群集中删除一个或多个分片。您无法删除某个复制组中的所有分片。而必须删除复制组。有关更多信息,请参阅 删除具有副本的群集

ModifyReplicationGroupShardConfiguration中使用以下参数:

参数

  • ApplyImmediately=true – 必需。指定分片重新配置操作立即开始。

  • ReplicationGroupId – 必需。指定在哪个复制组 (群集) 上执行分片重新配置操作。

  • NodeGroupCount – 必需。指定操作完成时存在的分片 (节点组) 数量。删除分片后,NodeGroupCount 的值必须小于当前分片数量。

  • NodeGroupsToRemove – 当 --node-group-count 小于当前节点组 (分片) 数量时为必填项。要从复制组中删除的分片 (节点组) ID 列表。

以下步骤描述了删除一个或多个分片的过程。

例 - 删除分片

以下示例从 Redis (已启用集群模式) 群集 my-cluster 中删除 2 个节点组,因此当操作完成后共有 2 个节点组。删除分片的密钥空间会均匀地分布在其余分片上。

https://elasticache.us-east-2.amazonaws.com/ ?Action=ModifyReplicationGroupShardConfiguration &ApplyImmediately=true &NodeGroupCount=2 &ReplicationGroupId=my-cluster &NodeGroupsToRemove.member.1=0002 &NodeGroupsToRemove.member.2=0003 &Version=2015-02-02 &SignatureVersion=4 &SignatureMethod=HmacSHA256 &Timestamp=20171002T192317Z &X-Amz-Credential=<credential>

有关更多信息,请参阅 ElastiCache API 参考中的 ModifyReplicationGroupShardConfiguration

在线分片重新平衡

您可以使用 AWS 管理控制台、AWS CLI 或 ElastiCache API 重新平衡 Redis (已启用集群模式) 群集中的分片。

在线分片重新平衡 (控制台)

以下过程介绍了如何通过使用 AWS 管理控制台 重新平衡分片的方法重新配置 Redis (已启用集群模式) 群集中的分片。

在 Redis (已启用集群模式) 群集上的分片之间重新平衡密钥空间

  1. 通过以下网址打开 ElastiCache 控制台:https://console.amazonaws.cn/elasticache/

  2. 从导航窗格中,选择 Redis

  3. 选择要重新平衡的 Redis (已启用集群模式) 群集的名称。

    提示

    Redis (已启用集群模式) 群集在分片列中的值为 1 或更大数值。

  4. 选择 Rebalance

  5. 系统提示时,请选择 Rebalance。您可能会看到一条类似于这样的消息:复制组中的槽均匀分布。Nothing to do. (服务:AmazonElastiCache;状态代码:400;错误代码:InvalidReplicationGroupState;请求 ID:2246cebd-9721-11e7-8d5b-e1b0f086c8cf)。如果如此,请选择 Cancel

在线分片重新平衡 (AWS CLI)

modify-replication-group-shard-configuration中使用以下参数:

参数

  • -apply-mmediately – 必需。指定分片重新配置操作立即开始。

  • --replication-group-id – 必需。指定在哪个复制组 (群集) 上执行分片重新配置操作。

  • --node-group-count – 必需。要在群集中的所有分片之间重新平衡密钥空间,该值必须与当前分片数量相同。

以下过程介绍了如何通过使用 AWS CLI 重新平衡分片的方法重新配置 Redis (已启用集群模式) 群集中的分片。

例 - 重新平衡群集中的分片

以下示例会重新平衡 Redis (已启用集群模式) 群集 my-cluster 中的槽,以便使槽尽可能均匀分布。--node-group-count (4) 的值为群集中的当前分片数量。

对于 Linux, OS X, or Unix:

aws elasticache modify-replication-group-shard-configuration \ --replication-group-id my-cluster \ --node-group-count 4 \ --apply-immediately

对于 Windows:

aws elasticache modify-replication-group-shard-configuration ^ --replication-group-id my-cluster ^ --node-group-count 4 ^ --apply-immediately

有关更多信息,请参阅 AWS CLI 文档中的 modify-replication-group-shard-configuration

在线分片重新平衡 (ElastiCache API)

您可以通过 ModifyReplicationGroupShardConfiguration 操作使用 ElastiCache API 在线重新配置 Redis (已启用集群模式) 群集中的分片。

ModifyReplicationGroupShardConfiguration中使用以下参数:

参数

  • ApplyImmediately=true – 必需。指定分片重新配置操作立即开始。

  • ReplicationGroupId – 必需。指定在哪个复制组 (群集) 上执行分片重新配置操作。

  • NodeGroupCount – 必需。要在群集中的所有分片之间重新平衡密钥空间,该值必须与当前分片数量相同。

以下过程介绍了如何通过使用 ElastiCache API 重新平衡分片的方法重新配置 Redis (已启用集群模式) 群集中的分片。

例 - 群集重新平衡

以下示例会重新平衡 Redis (已启用集群模式) 群集 my-cluster 中的槽,以便使槽尽可能均匀分布。NodeGroupCount (4) 的值为群集中的当前分片数量。

https://elasticache.us-east-2.amazonaws.com/ ?Action=ModifyReplicationGroupShardConfiguration &ApplyImmediately=true &NodeGroupCount=4 &ReplicationGroupId=my-cluster &Version=2015-02-02 &SignatureVersion=4 &SignatureMethod=HmacSHA256 &Timestamp=20171002T192317Z &X-Amz-Credential=<credential>

有关更多信息,请参阅 ElastiCache API 参考中的 ModifyReplicationGroupShardConfiguration