MemoryDB 的在线重新分片和分片重新平衡 - Amazon 内存 DB

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

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

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

您可执行以下操作:

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

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

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

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

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

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

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

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

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

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

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

你可以使用 AWS Management Console、 AWS CLI或 MemoryDB API 向你的 MemoryDB 集群添加分片。

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

  1. 登录 AWS Management Console 并打开 MemoryDB 控制台,网址为 https://console.aws.amazon.com/memorydb/。

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

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

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

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

以下过程介绍了如何通过使用 AWS 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 } ] }

有关更多信息,请参阅《命令参考》中的 update-cluster。 AWS CLI

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

UpdateCluster中使用以下参数:

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

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

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

有关更多信息,请参阅UpdateCluster

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

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

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

重要

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

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

  1. 登录 AWS Management Console 并打开 MemoryDB 控制台,网址为 https://console.aws.amazon.com/memorydb/。

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

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

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

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

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

重要

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

您可以使用从 MemoryDB 集群中移除一个或多个分片。 AWS CLI 您无法移除集群中的所有分片。而是必须删除集群。有关更多信息,请参阅 步骤 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 } ] }

有关更多信息,请参阅《命令参考》中的 update-cluster。 AWS CLI

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

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

重要

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

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

UpdateCluster中使用以下参数:

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

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

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