MemoryDB 的在线重新分片 - Amazon MemoryDB

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

MemoryDB 的在线重新分片

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

您可执行以下操作:

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

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

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

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

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

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

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

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

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

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

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

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

您可以使用将一个或多个分片 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

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

UpdateCluster中使用以下参数:

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

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

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

有关更多信息,请参阅UpdateCluster

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

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

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

重要

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

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

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

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

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

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

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

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

重要

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

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

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

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

以下过程描述了如何通过使用 MemoryDB 删除分片来重新配置 MemoryDB 集群中的分片。API

重要

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

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

UpdateCluster中使用以下参数:

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

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

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