Redis(已启用集群模式)的在线重新分片和分片重新平衡 - Amazon ElastiCache for Redis
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

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

您可执行以下操作:

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

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

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

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

您无法执行以下操作:

  • 单独配置分片:

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

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

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

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

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

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

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

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

  • 在横向扩展全局数据存储集群时,ElastiCache 不会自动将函数从现有节点之一复制到新节点。我们建议在横向扩展集群后将您的函数加载到新的分片中,这样每个分片都具有相同的函数。

注意

在 Elasticache for Redis 版本 7 及更高版本中:横向扩展集群时,ElastiCache 会自动将其中一个现有节点(随机选择)中加载的函数复制到新节点。如果您的应用程序使用 Redis Functions,我们建议您在横向扩展之前将所有函数加载到所有分片,这样您的 ElastiCache for Redis 集群就不会在不同的分片上有不同的函数定义。

有关更多信息,请参阅最佳实践:在线调整集群大小

您可以使用 Amazon Web Services Management Console、Amazon CLI 和 ElastiCache API 横向扩展或重新平衡 ElastiCache for Redis(已启用集群模式)集群。

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

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

主题

    您可以使用 Amazon Web Services Management Console 将一个或多个分片添加到 Redis(已启用集群模式)集群中。以下步骤描述了这个过程。

    向 Redis(已启用集群模式)集群添加分片
    1. 打开 ElastiCache 控制台(https://console.aws.amazon.com/elasticache/)。

    2. 从导航窗格中,选择 Redis clusters(Redis 集群)。

    3. 找到并选择要将分片添加到其中的 Redis(已启用集群模式)集群的名称,而不是选择集群名称左侧的框。

      提示

      Redis(已启用集群模式)的 Mode(模式)列中会显示 Clustered Redis(集群化 Redis)

    4. 选择 Add shard

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

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

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

      4. 选择 Add(添加)。

    以下过程介绍了如何通过使用 Amazon 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、macOS 或 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

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

    您可以使用 ElastiCache API 通过 ModifyReplicationGroupShardConfiguration 操作在线重新配置 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

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

    您可以使用 Amazon Web Services Management Console、Amazon CLI 或 ElastiCache API 删除 Redis(已启用集群模式)集群中的分片。

    删除分片(控制台)

    以下过程介绍了如何通过使用 Amazon Web Services Management Console 删除分片来重新配置 Redis(已启用集群模式)集群中的分片。

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

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

    从 Redis(已启用集群模式)集群中删除分片
    1. 打开 ElastiCache 控制台(https://console.aws.amazon.com/elasticache/)。

    2. 从导航窗格中,选择 Redis clusters(Redis 集群)。

    3. 找到并选择要从中删除分片的 Redis(已启用集群模式)集群的名称,而不是选择集群名称左侧的框。

      提示

      Redis(已启用集群模式)集群的 Shards(分片)列中会显示 1 或大于 1 的值。

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

    5. 选择 Delete shard

    删除分片(Amazon CLI)

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

    重要

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

    您可以使用 Amazon 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、macOS 或 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

    删除分片(ElastiCache API)

    您可以使用 ElastiCache API 通过 ModifyReplicationGroupShardConfiguration 操作在线重新配置 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>

    在线分片重新平衡

    您可以使用 Amazon Web Services Management Console、Amazon CLI 或 ElastiCache API 重新平衡 Redis(已启用集群模式)集群中的分片。

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

    以下过程介绍了如何通过使用 Amazon Web Services Management Console 重新平衡分片来重新配置 Redis(已启用集群模式)集群中的分片。

    在 Redis(已启用集群模式)集群的分片之间重新平衡键空间
    1. 打开 ElastiCache 控制台(https://console.aws.amazon.com/elasticache/)。

    2. 从导航窗格中,选择 Redis clusters(Redis 集群)。

    3. 选择要重新平衡的 Redis(已启用集群模式)集群的名称,而不是名称左侧的框。

      提示

      Redis(已启用集群模式)集群的 Shards(分片)列中会显示 1 或大于 1 的值。

    4. 选择 Rebalance

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

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

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

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

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

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

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

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

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

    对于 Linux、macOS 或 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

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

    您可以使用 ElastiCache API 通过 ModifyReplicationGroupShardConfiguration 操作在线重新配置 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>