

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

# MemoryDB 的在线重新分片
<a name="cluster-resharding-online"></a>

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

您可执行以下操作：
+ **横向扩展** – 通过向 MemoryDB 集群添加分片来增加读写容量。

  如果您向集群添加一个或多个分片，则每个新分片中的节点数量与最小的现有分片中的节点数量相同。
+ **横向缩减** – 通过删除 MemoryDB 集群中的分片降低读写容量，从而降低成本。

目前，以下限制适用于 MemoryDB 在线重新分片：
+ 槽或键空间和大型项目存在以下限制：

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

  如果某个分片中的任何密钥包含大型项目（序列化后大于 256MB 的项目），则在缩减时不会删除该分片。此功能可导致某些分片无法删除。
+ 在横向扩展时，任何新分片中的节点数量等于现有分片中的节点数量。

有关更多信息，请参阅 [最佳实践：在线调整集群大小](best-practices-online-resharding.md)。

您可以使用 AWS 管理控制台、 AWS CLI和 MemoryDB API 水平扩展 MemoryDB 集群。

## 通过在线重新分片功能添加分片
<a name="cluster-resharding-online-add"></a>

你可以使用 AWS 管理控制台、 AWS CLI或 MemoryDB API 向你的 MemoryDB 集群添加分片。

### 添加分片（控制台）
<a name="cluster-resharding-online-add-console"></a>

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

****

1. 登录 AWS 管理控制台 并打开 MemoryDB 控制台，网址为。[https://console.aws.amazon.com/memorydb/](https://console.aws.amazon.com/memorydb/)

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

1. 在**分片和节点**选项卡下，选择**添加/删除分片**

1. 在**新分片数**中，输入所需的分片数。

1. 选择**确认**保留更改，或选择**取消**放弃更改。

### 添加分片（AWS CLI）
<a name="cluster-resharding-online-add-cli"></a>

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

在`update-cluster`中使用以下参数：

**参数**
+ `--cluster-name` – 必需。指定在哪个集群上执行分片重新配置操作。
+ `--shard-configuration` – 必需。允许设置分片数量。
  + `ShardCount` – 设置此属性指定所需要的分片数量。

**Example**  
以下示例将集群 `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](https://docs.aws.amazon.com/cli/latest/reference/memorydb/update-cluster.html)。 AWS CLI 

### 添加分片（MemoryDB API）
<a name="cluster-resharding-online-add-api"></a>

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

在`UpdateCluster`中使用以下参数：

**参数**
+ `ClusterName` – 必需。指定在哪个集群上执行分片重新配置操作。
+ `ShardConfiguration` – 必需。允许设置分片数量。
  + `ShardCount` – 设置此属性指定所需要的分片数量。

有关更多信息，请参阅 [UpdateCluster](https://docs.aws.amazon.com/memorydb/latest/APIReference/API_UpdateCluster.html)。

## 通过在线重新分片功能删除分片
<a name="cluster-resharding-online-remove"></a>

您可以使用 AWS 管理控制台、 AWS CLI或 MemoryDB API 从 MemoryDB 集群中移除分片。

### 删除分片（控制台）
<a name="cluster-resharding-online-remove-console"></a>

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

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

您可以使用从 MemoryDB 集群中移除一个或多个分片。 AWS 管理控制台 您无法移除集群中的所有分片。而是必须删除集群。有关更多信息，请参阅 [步骤 5：删除集群](getting-started.md#clusters.delete)。以下步骤描述了移除一个或多个分片的过程。

****

1. 登录 AWS 管理控制台 并打开 MemoryDB 控制台，网址为。[https://console.aws.amazon.com/memorydb/](https://console.aws.amazon.com/memorydb/)

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

1. 在**分片和节点**选项卡下，选择**添加/删除分片**

1. 在**新分片数**中，输入所需的分片数（最少为 1）。

1. 选择**确认**保留更改，或选择**取消**放弃更改。

### 删除分片（AWS CLI）
<a name="cluster-resharding-online-remove-cli"></a>

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

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

您可以使用从 MemoryDB 集群中移除一个或多个分片。 AWS CLI 您无法移除集群中的所有分片。而是必须删除集群。有关更多信息，请参阅 [步骤 5：删除集群](getting-started.md#clusters.delete)。

在`update-cluster`中使用以下参数：

**参数**
+ `--cluster-name` – 必需。指定在哪个集群上执行分片重新配置操作。
+ `--shard-configuration` – 必需。允许使用 `ShardCount` 属性设置分片数量：

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

**Example**  
以下示例将集群 `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](https://docs.aws.amazon.com/cli/latest/reference/memorydb/update-cluster.html)。 AWS CLI 

### 移除分片（MemoryDB API）
<a name="cluster-resharding-online-remove-api"></a>

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

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

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

您可以使用 MemoryDB API 从 MemoryDB 集群中移除一个或多个分片。您无法移除集群中的所有分片。而是必须删除集群。有关更多信息，请参阅 [步骤 5：删除集群](getting-started.md#clusters.delete)。

在`UpdateCluster`中使用以下参数：

**参数**
+ `ClusterName` – 必需。指定在哪个集群上执行分片重新配置操作。
+ `ShardConfiguration` – 必需。允许使用 `ShardCount` 属性设置分片数量：

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