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

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

MemoryDB 的在线重新分片和分片重新平衡

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

您可执行以下操作:

  • 横向扩展 – 通过向 MemoryDB 集群添加分片来增加读写容量。

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

  • 横向缩减 – 通过删除 MemoryDB 集群中的分片降低读写容量,从而降低成本。

目前,以下限制适用于 MemoryDB 在线重新分片:

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

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

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

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

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

您可以使用 Amazon Web Services Management Console、Amazon CLI 和 MemoryDB API 水平扩展或重新平衡 MemoryDB 集群。

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

您可以使用 Amazon Web Services Management Console、Amazon CLI 或 MemoryDB API 将分片添加到 MemoryDB 集群中。

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

  1. 登录到 Amazon Web Services Management Console 并打开 MemoryDB for Redis 控制台,网址:https://console.aws.amazon.com/memorydb/

  2. 从集群列表中,选择要从中添加分片的集群的名称。

  3. 分片和节点选项卡下,选择添加/删除分片

  4. 新分片数中,输入所需的分片数。

  5. 选择确认保留更改,或选择取消放弃更改。

以下过程介绍了如何通过使用 Amazon CLI 添加分片的方法重新配置 MemoryDB 集群中的分片。

update-cluster中使用以下参数:

参数
  • --cluster-name – 必需。指定在哪个集群上执行分片重新配置操作。

  • --shard-configuration – 必需。允许设置分片数量。

    • ShardCount – 设置此属性指定所需要的分片数量。

以下示例将集群 my-cluster 中的分片数量修改为 2。

对于 Linux、macOS 或 Unix:

aws memorydb update-cluster \ --cluster-name my-cluster \ --shard-configuration \ ShardCount=2

对于 Windows:

aws memorydb update-cluster ^ --cluster-name my-cluster ^ --shard-configuration ^ ShardCount=2

返回以下 JSON 响应:

{ "Cluster": { "Name": "my-cluster", "Status": "updating", "NumberOfShards": 2, "AvailabilityMode": "MultiAZ", "ClusterEndpoint": { "Address": "clustercfg.my-cluster.xxxxxx.memorydb.us-east-1.amazonaws.com", "Port": 6379 }, "NodeType": "db.r6g.large", "EngineVersion": "6.2", "EnginePatchVersion": "6.2.6", "ParameterGroupName": "default.memorydb-redis6", "ParameterGroupStatus": "in-sync", "SubnetGroupName": "my-sg", "TLSEnabled": true, "ARN": "arn:aws:memorydb:us-east-1:xxxxxxexamplearn:cluster/my-cluster", "SnapshotRetentionLimit": 0, "MaintenanceWindow": "wed:03:00-wed:04:00", "SnapshotWindow": "04:30-05:30", "DataTiering": "false", "AutoMinorVersionUpgrade": true } }

若要在已更新集群的状态从更新变为可用后查看其详细信息,请使用以下命令:

对于 Linux、macOS 或 Unix:

aws memorydb describe-clusters \ --cluster-name my-cluster --show-shard-details

对于 Windows:

aws memorydb describe-clusters ^ --cluster-name my-cluster --show-shard-details

返回以下 JSON 响应:

{ "Clusters": [ { "Name": "my-cluster", "Status": "available", "NumberOfShards": 2, "Shards": [ { "Name": "0001", "Status": "available", "Slots": "0-8191", "Nodes": [ { "Name": "my-cluster-0001-001", "Status": "available", "AvailabilityZone": "us-east-1a", "CreateTime": "2021-08-21T20:22:12.405000-07:00", "Endpoint": { "Address": "clustercfg.my-cluster.xxxxxx.memorydb.us-east-1.amazonaws.com", "Port": 6379 } }, { "Name": "my-cluster-0001-002", "Status": "available", "AvailabilityZone": "us-east-1b", "CreateTime": "2021-08-21T20:22:12.405000-07:00", "Endpoint": { "Address": "clustercfg.my-cluster.xxxxxx.memorydb.us-east-1.amazonaws.com", "Port": 6379 } } ], "NumberOfNodes": 2 }, { "Name": "0002", "Status": "available", "Slots": "8192-16383", "Nodes": [ { "Name": "my-cluster-0002-001", "Status": "available", "AvailabilityZone": "us-east-1b", "CreateTime": "2021-08-22T14:26:18.693000-07:00", "Endpoint": { "Address": "clustercfg.my-cluster.xxxxxx.memorydb.us-east-1.amazonaws.com", "Port": 6379 } }, { "Name": "my-cluster-0002-002", "Status": "available", "AvailabilityZone": "us-east-1a", "CreateTime": "2021-08-22T14:26:18.765000-07:00", "Endpoint": { "Address": "clustercfg.my-cluster.xxxxxx.memorydb.us-east-1.amazonaws.com", "Port": 6379 } } ], "NumberOfNodes": 2 } ], "ClusterEndpoint": { "Address": "clustercfg.my-cluster.xxxxxx.memorydb.us-east-1.amazonaws.com", "Port": 6379 }, "NodeType": "db.r6g.large", "EngineVersion": "6.2", "EnginePatchVersion": "6.2.6", "ParameterGroupName": "default.memorydb-redis6", "ParameterGroupStatus": "in-sync", "SubnetGroupName": "my-sg", "TLSEnabled": true, "ARN": "arn:aws:memorydb:us-east-1:xxxxxxexamplearn:cluster/my-cluster", "SnapshotRetentionLimit": 0, "MaintenanceWindow": "wed:03:00-wed:04:00", "SnapshotWindow": "04:30-05:30", "ACLName": "my-acl", "DataTiering": "false", "AutoMinorVersionUpgrade": true } ] }

有关更多信息,请参阅Amazon CLI命令参考中的 update-cluster

您可以通过 UpdateCluster 操作使用 MemoryDB API 在线重新配置 MemoryDB 集群中的分片。

UpdateCluster中使用以下参数:

参数
  • ClusterName – 必需。指定在哪个集群上执行分片重新配置操作。

  • ShardConfiguration – 必需。允许设置分片数量。

    • ShardCount – 设置此属性指定所需要的分片数量。

有关更多信息,请参阅 UpdateCluster

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

您可以使用 Amazon Web Services Management Console、Amazon CLI 或 MemoryDB API 从 MemoryDB 集群中移除分片。

以下过程介绍了如何通过使用 Amazon Web Services Management Console 删除分片的方法重新配置 MemoryDB 集群中的分片。

重要

在从集群中删除分片之前,MemoryDB 可确保所有数据将适合其余分片。如果数据适合,将根据要求从集群中删除分片。如果数据不适合剩余的分片,则过程将终止,并且集群的分片配置将保留为与发出请求之前相同。

您可以使用 Amazon Web Services Management Console 从 MemoryDB 集群中移除一个或多个分片。您无法移除集群中的所有分片。而是必须删除集群。有关更多信息,请参阅步骤 4:删除集群。以下步骤描述了移除一个或多个分片的过程。

  1. 登录到 Amazon Web Services Management Console 并打开 MemoryDB for Redis 控制台,网址:https://console.aws.amazon.com/memorydb/

  2. 从集群列表中,选择要从中删除分片的集群的名称。

  3. 分片和节点选项卡下,选择添加/删除分片

  4. 新分片数中,输入所需的分片数(最少为 1)。

  5. 选择确认保留更改,或选择取消放弃更改。

以下过程介绍了如何通过使用 Amazon CLI 删除分片的方法重新配置 MemoryDB 集群中的分片。

重要

在从集群中删除分片之前,MemoryDB 可确保所有数据将适合其余分片。如果数据适合,将根据要求从集群中删除分片,并将其密钥空间映射到其余分片。如果数据不适合剩余的分片,则过程将终止,并且集群的分片配置将保留为与发出请求之前相同。

您可以使用 Amazon CLI 从 MemoryDB 集群中移除一个或多个分片。您无法移除集群中的所有分片。而是必须删除集群。有关更多信息,请参阅步骤 4:删除集群

update-cluster中使用以下参数:

参数
  • --cluster-name – 必需。指定在哪个集群上执行分片重新配置操作。

  • --shard-configuration – 必需。允许使用 ShardCount 属性设置分片数量:

    ShardCount – 设置此属性指定所需要的分片数量。

以下示例将集群 my-cluster 中的分片数量修改为 2。

对于 Linux、macOS 或 Unix:

aws memorydb update-cluster \ --cluster-name my-cluster \ --shard-configuration \ ShardCount=2

对于 Windows:

aws memorydb update-cluster ^ --cluster-name my-cluster ^ --shard-configuration ^ ShardCount=2

返回以下 JSON 响应:

{ "Cluster": { "Name": "my-cluster", "Status": "updating", "NumberOfShards": 2, "AvailabilityMode": "MultiAZ", "ClusterEndpoint": { "Address": "clustercfg.my-cluster.xxxxxx.memorydb.us-east-1.amazonaws.com", "Port": 6379 }, "NodeType": "db.r6g.large", "EngineVersion": "6.2", "EnginePatchVersion": "6.2.6", "ParameterGroupName": "default.memorydb-redis6", "ParameterGroupStatus": "in-sync", "SubnetGroupName": "my-sg", "TLSEnabled": true, "ARN": "arn:aws:memorydb:us-east-1:xxxxxxexamplearn:cluster/my-cluster", "SnapshotRetentionLimit": 0, "MaintenanceWindow": "wed:03:00-wed:04:00", "SnapshotWindow": "04:30-05:30", "DataTiering": "false", "AutoMinorVersionUpgrade": true } }

若要在已更新集群的状态从更新变为可用后查看其详细信息,请使用以下命令:

对于 Linux、macOS 或 Unix:

aws memorydb describe-clusters \ --cluster-name my-cluster --show-shard-details

对于 Windows:

aws memorydb describe-clusters ^ --cluster-name my-cluster --show-shard-details

返回以下 JSON 响应:

{ "Clusters": [ { "Name": "my-cluster", "Status": "available", "NumberOfShards": 2, "Shards": [ { "Name": "0001", "Status": "available", "Slots": "0-8191", "Nodes": [ { "Name": "my-cluster-0001-001", "Status": "available", "AvailabilityZone": "us-east-1a", "CreateTime": "2021-08-21T20:22:12.405000-07:00", "Endpoint": { "Address": "clustercfg.my-cluster.xxxxxx.memorydb.us-east-1.amazonaws.com", "Port": 6379 } }, { "Name": "my-cluster-0001-002", "Status": "available", "AvailabilityZone": "us-east-1b", "CreateTime": "2021-08-21T20:22:12.405000-07:00", "Endpoint": { "Address": "clustercfg.my-cluster.xxxxxx.memorydb.us-east-1.amazonaws.com", "Port": 6379 } } ], "NumberOfNodes": 2 }, { "Name": "0002", "Status": "available", "Slots": "8192-16383", "Nodes": [ { "Name": "my-cluster-0002-001", "Status": "available", "AvailabilityZone": "us-east-1b", "CreateTime": "2021-08-22T14:26:18.693000-07:00", "Endpoint": { "Address": "clustercfg.my-cluster.xxxxxx.memorydb.us-east-1.amazonaws.com", "Port": 6379 } }, { "Name": "my-cluster-0002-002", "Status": "available", "AvailabilityZone": "us-east-1a", "CreateTime": "2021-08-22T14:26:18.765000-07:00", "Endpoint": { "Address": "clustercfg.my-cluster.xxxxxx.memorydb.us-east-1.amazonaws.com", "Port": 6379 } } ], "NumberOfNodes": 2 } ], "ClusterEndpoint": { "Address": "clustercfg.my-cluster.xxxxxx.memorydb.us-east-1.amazonaws.com", "Port": 6379 }, "NodeType": "db.r6g.large", "EngineVersion": "6.2", "EnginePatchVersion": "6.2.6", "ParameterGroupName": "default.memorydb-redis6", "ParameterGroupStatus": "in-sync", "SubnetGroupName": "my-sg", "TLSEnabled": true, "ARN": "arn:aws:memorydb:us-east-1:xxxxxxexamplearn:cluster/my-cluster", "SnapshotRetentionLimit": 0, "MaintenanceWindow": "wed:03:00-wed:04:00", "SnapshotWindow": "04:30-05:30", "ACLName": "my-acl", "DataTiering": "false", "AutoMinorVersionUpgrade": true } ] }

有关更多信息,请参阅Amazon CLI命令参考中的 update-cluster

您可以通过 UpdateCluster 操作使用 MemoryDB API 在线重新配置 MemoryDB 集群中的分片。

以下过程介绍了如何通过使用 MemoryDB API 删除分片的方法重新配置 MemoryDB 集群中的分片。

重要

在从集群中移除分片之前,MemoryDB 可确保所有数据适合其余分片。如果数据适合,将根据要求从集群中删除分片,并将其密钥空间映射到其余分片。如果数据不适合剩余的分片,则过程将终止,并且集群的分片配置将保留为与发出请求之前相同。

您可以使用 MemoryDB API 从 MemoryDB 集群中移除一个或多个分片。您无法移除集群中的所有分片。而是必须删除集群。有关更多信息,请参阅步骤 4:删除集群

UpdateCluster中使用以下参数:

参数
  • ClusterName – 必需。指定在哪个集群上执行分片重新配置操作。

  • ShardConfiguration – 必需。允许使用 ShardCount 属性设置分片数量:

    ShardCount – 设置此属性指定所需要的分片数量。