本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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 集群。以下步骤描述了这个过程。
-
登录 AWS Management Console 并打开 MemoryDB 控制台,网址为。https://console.aws.amazon.com/memorydb/
-
从集群列表中,选择要从中添加分片的集群的名称。
在分片和节点选项卡下,选择添加/删除分片
-
在新分片数中,输入所需的分片数。
-
选择确认保留更改,或选择取消放弃更改。
以下过程介绍了如何通过使用 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:删除集群。以下步骤描述了移除一个或多个分片的过程。
-
登录 AWS Management Console 并打开 MemoryDB 控制台,网址为。https://console.aws.amazon.com/memorydb/
-
从集群列表中,选择要从中删除分片的集群的名称。
在分片和节点选项卡下,选择添加/删除分片
-
在新分片数中,输入所需的分片数(最少为 1)。
-
选择确认保留更改,或选择取消放弃更改。
以下过程介绍了如何通过使用 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
– 设置此属性指定所需要的分片数量。