扩缩 Valkey 或 Redis OSS(已启用集群模式)集群
由于对集群的需求发生变化,您可能决定通过更改 Valkey 或 Redis OSS(已启用集群模式)集群中的分片数量来提高性能或降低成本。我们建议使用在线水平扩展来实现这一目的,因为采用这种方法,您的集群在扩展过程中可以继续为请求提供服务。
您决定重新调节集群的情况包括以下几种:
-
内存压力:
如果集群中的节点存在内存压力,您可能会决定进行横向扩展,以便获得更多资源来更好地存储数据并为请求提供服务。
您可以通过监控以下指标来确定您的节点是否存在内存压力:FreeableMemory、SwapUsage 和 BytesUsedForCache。
-
CPU 或网络瓶颈:
如果延迟/吞吐量问题给您的集群带来麻烦,您可能需要进行横向扩展来解决这些问题。
您可以通过监控以下指标来监控您的延迟和吞吐量水平:CPUUtilization、NetworkBytesIn、NetworkBytesOut、CurrConnections 和 NewConnections。
-
您的集群过度扩展:
对集群的当前需求是缩减集群不会降低性能,并可以降低成本。
您可以使用以下指标监控集群的使用情况,以便确定是否可以安全地进行横向缩减:FreeableMemory、SwapUsage、BytesUsedForCache、CPUUtilization、NetworkBytesIn、NetworkBytesOut、CurrConnections 和 NewConnections。
扩展的性能影响
当使用离线过程进行扩展时,您的集群在大部分过程中处于离线状态,因此无法为请求提供服务。当使用在线方法进行扩展时,由于扩展是计算密集型操作,因此会导致一定程度的性能下降,但是在整个扩展操作过程中您的集群仍然会继续为请求提供服务。性能的降低程度取决于您的常规 CPU 利用率和数据。
有两种方法可以扩缩您的 Valkey 或 Redis OSS(已启用集群模式)集群:水平扩缩和垂直扩缩。
-
利用横向扩展,可以通过添加或删除节点组(分片)来更改复制组中的节点组(分片)数量。在线重新分片过程允许在集群继续处理传入请求时进行缩减/扩展。
采用与旧集群不同的方法来配置新集群中的槽。仅采用离线方法。
-
纵向扩展 – 更改节点类型以调整集群大小。在线纵向扩展允许在集群继续处理传入请求时进行扩展/缩减。
如果要通过横向缩减或纵向缩减来减小集群的大小和内存容量,请确保新配置具有足够的内存用于数据和 Valkey 或 Redis OSS 开销。
有关更多信息,请参阅 选择节点大小。
目录
Valkey 或 Redis OSS(已启用集群模式)的离线重新分片
离线分片重新配置带来的主要优势便是,除了在复制组中添加或删除分片以外,您还可以执行更多操作。在进行离线重新分片和重新平衡时,除了更改复制组中的分片数量,您还可以执行以下操作:
注意
启用了数据分层的 Valkey 或 Redis OSS 集群不支持离线重新分片。有关更多信息,请参阅 ElastiCache 中的数据分层。
-
更改复制组的节点类型。
-
为复制组中的每个节点指定可用区。
-
升级为更新的引擎版本。
-
单独指定每个分片中的副本节点数量。
-
为每个分片指定密钥空间。
离线分片重新配置的主要缺点是,从过程的还原部分开始直到更新应用程序中的终端节点,集群一直处于离线状态。您的集群处于离线状态的时间长短因集群中的数据量而异。
离线重新配置分片 Valkey 或 Redis OSS(已启用集群模式)集群
-
手动备份现有的 Valkey 或 Redis OSS 集群。有关更多信息,请参阅 进行手动备份。
-
通过从备份中还原来创建新集群。有关更多信息,请参阅 从备份还原到新缓存。
-
将您的应用程序中的终端节点更新为新集群的终端节点。有关更多信息,请参阅 查找 ElastiCache 中的缓存连接端点。
Valkey 或 Redis OSS(已启用集群模式)的离线重新分片
通过对 ElastiCache Valkey 7.2 或更新版本或者 Redis OSS 3.2.10 或更新版本使用在线重新分片和分片重新平衡,您可以在无需停机的情况下动态扩展 Valkey 或 Redis OSS 集群(已启用集群模式)。此方法意味着,即使在进行扩展或重新平衡的过程中,您的集群也可以继续为请求提供服务。
您可执行以下操作:
-
横向扩展 – 通过向 Valkey 或 Redis OSS(已启用集群模式)集群(复制组)添加分片(节点组)来增加读写容量。
如果您向复制组添加一个或多个分片,则每个新分片中的节点数量与最小的现有分片中的节点数量相同。
-
横向缩减 – 通过删除 Valkey 或 Redis OSS(已启用集群模式)集群中的分片来降低读写容量,从而降低成本。
-
重新平衡 – 在 Valkey 或 Redis OSS(已启用集群模式)集群中的分片之间移动键空间,尽可能使其在分片之间均匀分布。
您无法执行以下操作:
-
单独配置分片:
您无法单独指定分片的键空间。要执行此操作,您必须使用离线过程。
目前,以下限制适用于 ElastiCache 在线重新分片和重新平衡:
-
这些过程需要 Valkey 7.2 和更新版本或者 Redis OSS 3.2.10 或更新版本。有关升级引擎版本的信息,请参阅ElastiCache 的版本管理。
-
槽或键空间和大型项目存在以下限制:
如果分片中的任何密钥包含一个大型项,在横向扩展或重新平衡时关键字不会迁移到新分片。此功能会导致分片不平衡。
如果某个分片中的任何密钥包含大型项目(序列化后大于 256MB 的项目),则在缩减时不会删除该分片。此功能可导致某些分片无法删除。
-
在横向扩展时,任何新分片中的节点数量等于最小的现有分片中的节点数量。
-
在横向扩展时,所有现有分片的任何常见标签将被复制到新分片中。
-
在横向扩展全局数据存储集群时,ElastiCache 不会自动将函数从现有节点之一复制到新节点。我们建议在横向扩展集群后将您的函数加载到新的分片中,这样每个分片都具有相同的函数。
注意
在 ElastiCache for Valkey 7.2 及更高版本和 ElastiCache for Redis OSS 7 及更高版本中:横向扩展集群时,ElastiCache 会自动将其中一个现有节点(随机选择)中加载的函数复制到新节点。如果您的应用程序使用函数
有关更多信息,请参阅 在线集群大小调整。
您可以使用 Amazon Web Services 管理控制台、Amazon CLI 和 ElastiCache API 水平扩缩或重新平衡 Valkey 或 Redis OSS(已启用集群模式)集群。
通过在线重新分片功能添加分片
您可以使用 Amazon Web Services 管理控制台、Amazon CLI 或 ElastiCache API 将分片添加到 Valkey 或 Redis OSS(已启用集群模式)集群中。向 Valkey 或 Redis OSS(已启用集群模式)集群添加分片时,现有分片的所有标签都将复制到新分片。
主题
您可以使用 Amazon Web Services 管理控制台 将一个或多个分片添加到 Valkey 或 Redis OSS(已启用集群模式)集群中。以下步骤描述了这个过程。
向 Valkey 或 Redis OSS(已启用集群模式)集群添加分片
-
打开 ElastiCache 控制台(https://console.aws.amazon.com/elasticache/)。
-
在导航窗格中,选择 Valkey 集群或 Redis OSS 集群。
-
找到并选择要将分片添加到其中的 Valkey 或 Redis OSS(已启用集群模式)集群的名称,而不是选择集群名称左侧的框。
提示
Valkey 或 Redis OSS(已启用集群模式)的模式列中会显示Clustered Valkey 或 Clustered Redis
-
选择 Add shard。
-
对于 Number of shards to be added,请选择要添加到此集群的分片数量。
-
对于 Availability zone(s),请选择 No preference 或 Specify availability zones。
-
如果您选择 Specify availability zones,则对于每个分片中的每个节点,请从可用区列表中选择节点的可用区。
-
选择添加。
-
以下过程介绍了如何通过使用 Amazon CLI 添加分片来重新配置 Valkey 或 Redis OSS(已启用集群模式)集群中的分片。
在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 会选择新节点的可用区。
以下示例将重新配置名为 my-cluster 的 Valkey 或 Redis OSS(已启用集群模式)集群中四个分片的键空间。该示例还为每个分片中的每个节点指定可用区。操作将立即开始。
例 - 添加分片
对于 Linux、macOS 或 Unix:
aws elasticache modify-replication-group-shard-configuration \ --replication-group-idmy-cluster\ --node-group-count4\ --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-idmy-cluster^ --node-group-count4^ --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 操作在线重新配置 Valkey 或 Redis OSS(已启用集群模式)集群中的分片。
在ModifyReplicationGroupShardConfiguration中使用以下参数:
参数
-
ApplyImmediately=true– 必需。指定分片重新配置操作立即开始。 -
ReplicationGroupId– 必需。指定在哪个复制组(集群)上执行分片重新配置操作。 -
NodeGroupCount– 必需。指定操作完成时存在的分片(节点组)数量。添加分片后,NodeGroupCount的值必须大于当前分片数量。您也可以使用
ReshardingConfiguration为复制组中的每个节点指定可用区。 -
ReshardingConfiguration– 可选。复制组中每个分片中的每个节点的首选可用区列表。只有当NodeGroupCount的值大于当前分片数量时,才能使用此参数。如果在添加分片时忽略此参数,则 Amazon ElastiCache 会选择新节点的可用区。
以下过程介绍了如何通过使用 ElastiCache API 添加分片来重新配置 Valkey 或 Redis OSS(已启用集群模式)集群中的分片。
例 - 添加分片
以下示例将节点组添加到 Valkey 或 Redis OSS(已启用集群模式)集群 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 管理控制台、Amazon CLI 或 ElastiCache API 删除 Valkey 或 Redis OSS(已启用集群模式)集群中的分片。
删除分片(控制台)
以下过程介绍了如何通过使用 Amazon Web Services 管理控制台 删除分片来重新配置 Valkey 或 Redis OSS(已启用集群模式)集群中的分片。
在从复制组中删除节点组(分片)之前,ElastiCache 会确保所有数据将适合其余分片。如果数据将适合,将根据要求从复制组中删除指定分片。如果数据不适合剩余的节点组,则过程将终止,并且复制组的节点组配置将保留为与发出请求之前相同。
您可以使用 Amazon Web Services 管理控制台 从 Valkey 或 Redis OSS(已启用集群模式)集群中删除一个或多个分片。您无法删除某个复制组中的所有分片。而必须删除复制组。有关更多信息,请参阅 删除复制组。以下步骤描述了删除一个或多个分片的过程。
从 Valkey 或 Redis OSS(已启用集群模式)集群中删除分片
-
打开 ElastiCache 控制台(https://console.aws.amazon.com/elasticache/)。
-
在导航窗格中,选择 Valkey 集群或 Redis OSS 集群。
-
找到并选择要从中删除分片的 Valkey 或 Redis OSS(已启用集群模式)集群的名称,而不是选择集群名称左侧的框。
提示
Valkey 或 Redis OSS(已启用集群模式)集群的分片列中会显示 1 或大于 1 的值。
-
从分片列表中,选择要删除的每个分片的名称左侧的框。
-
选择 Delete shard。
删除分片(Amazon CLI)
以下过程介绍了如何通过使用 Amazon CLI 删除分片来重新配置 Valkey 或 Redis OSS(已启用集群模式)集群中的分片。
重要
在从复制组中删除节点组(分区)之前,ElastiCache 会确保所有数据将适合其余分区。如果数据将适合,将根据要求从复制组中删除指定分片(--node-groups-to-remove),并将其密钥空间映射到其余分片。如果数据不适合剩余的节点组,则过程将终止,并且复制组的节点组配置将保留为与发出请求之前相同。
您可以使用 Amazon CLI 从 Valkey 或 Redis OSS(已启用集群模式)集群中删除一个或多个分片。您无法删除某个复制组中的所有分片。而必须删除复制组。有关更多信息,请参阅 删除复制组。
在modify-replication-group-shard-configuration中使用以下参数:
参数
-
--apply-immediately– 必需。指定分片重新配置操作立即开始。 -
--replication-group-id– 必需。指定在哪个复制组(集群)上执行分片重新配置操作。 -
--node-group-count– 必需。指定操作完成时存在的分片(节点组)数量。删除分片后,--node-group-count的值必须小于当前分片数量。 -
--node-groups-to-remove– 当--node-group-count小于当前节点组(分片)数量时,此参数为必需。要从复制组中删除的分片(节点组)ID 列表。
以下步骤描述了删除一个或多个分片的过程。
例 - 删除分片
以下示例从 Valkey 或 Redis OSS(已启用集群模式)集群 my-cluster 中删除 2 个节点组,因此操作完成后共有 2 个节点组。删除分片的键空间会均匀地分布在其余分片上。
对于 Linux、macOS 或 Unix:
aws elasticache modify-replication-group-shard-configuration \ --replication-group-idmy-cluster\ --node-group-count2\ --node-groups-to-remove "0002" "0003" \ --apply-immediately
对于 Windows:
aws elasticache modify-replication-group-shard-configuration ^ --replication-group-idmy-cluster^ --node-group-count2^ --node-groups-to-remove "0002" "0003" ^ --apply-immediately
删除分片(ElastiCache API)
您可以使用 ElastiCache API 通过 ModifyReplicationGroupShardConfiguration 操作在线重新配置 Valkey 或 Redis OSS(已启用集群模式)集群中的分片。
以下过程介绍了如何通过使用 ElastiCache API 删除分片来重新配置 Valkey 或 Redis OSS(已启用集群模式)集群中的分片。
重要
在从复制组中删除节点组(分区)之前,ElastiCache 会确保所有数据将适合其余分区。如果数据将适合,将根据要求从复制组中删除指定分片(NodeGroupsToRemove),并将其密钥空间映射到其余分片。如果数据不适合剩余的节点组,则过程将终止,并且复制组的节点组配置将保留为与发出请求之前相同。
您可以使用 ElastiCache API 从 Valkey 或 Redis OSS(已启用集群模式)集群中删除一个或多个分片。您无法删除某个复制组中的所有分片。而必须删除复制组。有关更多信息,请参阅 删除复制组。
在ModifyReplicationGroupShardConfiguration中使用以下参数:
参数
-
ApplyImmediately=true– 必需。指定分片重新配置操作立即开始。 -
ReplicationGroupId– 必需。指定在哪个复制组(集群)上执行分片重新配置操作。 -
NodeGroupCount– 必需。指定操作完成时存在的分片(节点组)数量。删除分片后,NodeGroupCount的值必须小于当前分片数量。 -
NodeGroupsToRemove– 当--node-group-count小于当前节点组(分片)数量时,此参数为必需。要从复制组中删除的分片(节点组)ID 列表。
以下步骤描述了删除一个或多个分片的过程。
例 - 删除分片
以下示例从 Valkey 或 Redis OSS(已启用集群模式)集群 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 管理控制台、Amazon CLI 或 ElastiCache API 重新平衡 Valkey 或 Redis OSS(已启用集群模式)集群中的分片。
在线分片重新平衡(控制台)
以下过程介绍了如何通过使用 Amazon Web Services 管理控制台 重新平衡分片来重新配置 Valkey 或 Redis OSS(已启用集群模式)集群中的分片。
在 Valkey 或 Redis OSS(已启用集群模式)集群的分片之间重新平衡键空间
-
打开 ElastiCache 控制台(https://console.aws.amazon.com/elasticache/)。
-
在导航窗格中,选择 Valkey 集群或 Redis OSS 集群。
-
选择要重新平衡的 Valkey 或 Redis OSS(已启用集群模式)集群的名称,而不是名称左侧的框。
提示
Valkey 或 Redis OSS(已启用集群模式)集群的分片列中会显示 1 或大于 1 的值。
-
选择 Rebalance。
-
系统提示时,请选择 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 重新平衡分片来重新配置 Valkey 或 Redis OSS(已启用集群模式)集群中的分片。
例 - 重新平衡集群中的分片
以下示例演示重新平衡 Valkey 或 Redis OSS(已启用集群模式)集群 my-cluster 中的槽,以便使槽尽可能均匀分布。--node-group-count (4) 的值为集群中的当前分片数量。
对于 Linux、macOS 或 Unix:
aws elasticache modify-replication-group-shard-configuration \ --replication-group-idmy-cluster\ --node-group-count4\ --apply-immediately
对于 Windows:
aws elasticache modify-replication-group-shard-configuration ^ --replication-group-idmy-cluster^ --node-group-count4^ --apply-immediately
在线分片重新平衡(ElastiCache API)
您可以使用 ElastiCache API 通过 ModifyReplicationGroupShardConfiguration 操作在线重新配置 Valkey 或 Redis OSS(已启用集群模式)集群中的分片。
在ModifyReplicationGroupShardConfiguration中使用以下参数:
参数
-
ApplyImmediately=true– 必需。指定分片重新配置操作立即开始。 -
ReplicationGroupId– 必需。指定在哪个复制组(集群)上执行分片重新配置操作。 -
NodeGroupCount– 必需。要在集群中的所有分片之间重新平衡键空间,该值必须与当前分片数量相同。
以下过程介绍了如何通过使用 ElastiCache API 重新平衡分片来重新配置 Valkey 或 Redis OSS(已启用集群模式)集群中的分片。
例 - 集群重新平衡
以下示例演示重新平衡 Valkey 或 Redis OSS(已启用集群模式)集群 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>