

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

# 扩展
<a name="scaling"></a>

您的应用程序需要处理的数据量几乎不会保持不变。它会随着您的业务增长或遇到正常的业务波动时增减。如果您自行管理应用程序，则需要预配置足量硬件来满足您的需求高峰，这会产生很高的费用。通过使用 MemoryDB，您可以扩展以满足当前需求，并且只需为您的使用量付费。

以下信息可帮助您查找有关要执行的扩展操作的正确主题。


**扩展 MemoryDB**  

| Action | MemoryDB | 
| --- | --- | 
|  横向扩展  |  [MemoryDB 的在线重新分片](cluster-resharding-online.md)  | 
|  更改节点类型  |  [通过修改节点类型来在线纵向扩展](cluster-vertical-scaling.md)  | 
|  更改分片数量  |  [扩展 MemoryDB 集群](scaling-cluster.md)  | 

# 扩展 MemoryDB 集群
<a name="scaling-cluster"></a>

由于对您的集群的需求发生变化，您可能决定通过更改 MemoryDB 集群中的分片数量来提高性能或降低成本。我们建议使用在线水平扩展来实现这一目的，因为采用这种方法，您的集群在扩展过程中可以继续为请求提供服务。

您决定重新调节集群的情况包括以下几种：
+ **内存压力：**

  如果集群中的节点存在内存压力，您可能会决定进行横向扩展，以便获得更多资源来更好地存储数据并为请求提供服务。

  您可以通过监控以下指标来确定您的节点是否承受内存压力：*FreeableMemory*SwapUsage**、和 *BytesUsedForMemoryDB*。
+ **CPU 或网络瓶颈：**

  如果 latency/throughput 问题困扰着您的集群，则可能需要向外扩展以解决问题。

  您可以通过监控以下指标来监控延迟和吞吐量级别：*CPUUtilization*NetworkBytesIn**、*NetworkBytesOut*、*CurrConnections*、和*NewConnections*。
+ **您的集群过度扩展：**

  对集群的当前需求是缩减集群不会降低性能，并可以降低成本。

  您可以使用以下指标监控集群的使用情况，以确定是否可以安全地进行扩展：*FreeableMemory*SwapUsageBytesUsedForMemory***、*、*CPUUtilization*、*NetworkBytesIn*NetworkBytesOut**、*CurrConnections*、和*NewConnections*。

**扩展的性能影响**  
当使用离线过程进行扩展时，您的集群在大部分过程中处于离线状态，因此无法为请求提供服务。当使用在线方法进行扩展时，由于扩展是计算密集型操作，因此会导致一定程度的性能下降，但是在整个扩展操作过程中您的集群仍然会继续为请求提供服务。性能的降低程度取决于您的常规 CPU 利用率和数据。

有两种方法可以扩展您的 MemoryDB 集群：横向和纵向扩展。
+ 利用横向扩展，可以通过添加或移除分片来更改集群中的分片数量。在线重新分片过程允许在集群继续处理传入请求的 in/out 同时进行扩展。
+ 纵向扩展 – 更改节点类型以调整集群大小。在线垂直扩展允许在集群继续处理传入请求的 up/down 同时进行扩展。

如果要通过横向缩减或纵享缩减来减小集群的大小和内存容量，请确保新配置具有足够的内存用于数据和引擎开销。

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

离线分片重新配置带来的主要优势便是，除了在集群中添加或删除分片以外，您还可以执行更多操作。在进行离线重新分片时，除了更改集群中的分片数量，您还可以执行以下操作：
+ 更改集群的节点类型。
+ 升级为更新的引擎版本。

**注意**  
启用了数据分层的集群不支持离线重新分片。有关更多信息，请参阅[数据分层](data-tiering.md)。

离线分片重新配置的主要缺点是，从过程的还原部分开始直到更新应用程序中的终端节点，集群一直处于离线状态。您的集群处于离线状态的时间长短因集群中的数据量而异。

**在离线状态下重新配置分片 MemoryDB 集群**

1. 创建现有 MemoryDB 集群的手动快照。有关更多信息，请参阅 [手动创建快照](snapshots-manual.md)。

1. 通过从快照中还原来创建新集群。有关更多信息，请参阅 [从快照还原](snapshots-restoring.md)。

1. 将您的应用程序中的终端节点更新为新集群的终端节点。有关更多信息，请参阅 [查找连接端点](endpoints.md)。

# 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` – 设置此属性指定所需要的分片数量。

# 通过修改节点类型来在线纵向扩展
<a name="cluster-vertical-scaling"></a>

通过对 MemoryDB 使用在线纵向扩展，您可以在最短停机的情况下动态扩展集群。这样，即使在扩展时，您的集群也可以处理请求。

**注意**  
不支持在使用数据分层功能的集群（例如，使用 r6gd 节点类型的集群）和不使用数据分层功能的集群（例如，使用 r6g 节点类型的集群）之间扩缩。有关更多信息，请参阅 [数据分层](data-tiering.md)。

您可执行以下操作：
+ **纵向扩展** – 通过调整 MemoryDB 集群的节点类型以使用较大的节点类型来增加读取和写入容量。

  MemoryDB 动态调整集群大小，同时保持在线并处理请求。
+ **缩减** – 通过向下调整节点类型以使用较小节点来减少读写容量。同样，MemoryDB 动态调整集群大小，同时保持在线并处理请求。在这种情况下，您可以通过缩小节点来降低成本。

**注意**  
扩展和缩减过程依赖于使用新选择的节点类型创建集群并将新节点与先前节点同步。为确保秤 up/down 流畅无阻，请执行以下操作：  
虽然纵向扩展过程旨在保持完全在线，但它确实依赖于在旧节点和新节点之间同步数据。我们建议您在预期数据流量最小时启动扩展/缩减。
尽可能在生产前调试环境中测试扩展期间的应用程序行为。

# 在线纵向扩展
<a name="cluster-vertical-scaling-scaling-up"></a>

**Topics**
+ [纵向扩展 MemoryDB 集群（控制台）](#cluster-vertical-scaling-console)
+ [扩展 MemoryDB 集群 (CLI AWS )](#scaling.scaleUp.cli)
+ [纵向扩展 MemoryDB 集群（MemoryDB API）](#verticalscaling.scaleup.api)

## 纵向扩展 MemoryDB 集群（控制台）
<a name="cluster-vertical-scaling-console"></a>

以下过程介绍如何使用 AWS 管理控制台纵向扩展 MemoryDB 集群。在此过程中，MemoryDB 集群将继续处理请求，且停机时间降至最短。

**纵向扩展集群（控制台）**

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

1. 从集群列表中，选择集群。

1. 选择 **Actions**（操作），然后选择 **Modify**（修改）。

1. 在**修改集群**对话框中：

   1. 从 **Node type** 列表中选择您希望扩展到的节点类型。要扩展，请选择大于现有节点的节点类型。

1. 选择**保存更改**。

   集群状态更改为*正在修改*。当状态变为 *available* 时，即表示修改完成，您可以开始使用新集群。

## 扩展 MemoryDB 集群 (CLI AWS )
<a name="scaling.scaleUp.cli"></a>

以下过程介绍如何使用 AWS CLI纵向扩展 MemoryDB 集群。在此过程中，MemoryDB 集群将继续处理请求，且停机时间降至最短。

**向上扩展 MemoryDB 集群 (CLI AWS )**

1. 通过运行带有以下参数的 AWS CLI `list-allowed-node-type-updates`命令来确定可以扩展到的节点类型。

   对于 Linux、macOS 或 Unix：

   ```
   aws memorydb list-allowed-node-type-updates \
   	    --cluster-name my-cluster-name
   ```

   对于 Windows：

   ```
   aws memorydb list-allowed-node-type-updates ^
   	    --cluster-name my-cluster-name
   ```

   以上命令的输出类似于此处所示（JSON 格式）。

   ```
   {
   	    "ScaleUpNodeTypes": [
   	        "db.r6g.2xlarge", 
   	        "db.r6g.large"	        
   	    ],
   	    "ScaleDownNodeTypes": [
   	        "db.r6g.large"	        
   	    ], 
   }
   ```

   有关更多信息，请参阅《*AWS CLI 参考*资料》中的 [list-allowed-node-type-up](https://docs.aws.amazon.com/cli/latest/reference/memorydb/list-allowed-node-type-updates.html) dates。

1. 使用 AWS CLI `update-cluster`命令和以下参数修改集群以向上扩展到新的更大的节点类型。
   + `--cluster-name` – 要纵向扩展的集群的名称。
   + `--node-type` – 要扩展集群的新节点类型。此值必须是步骤 1 中由 `list-allowed-node-type-updates` 命令返回的节点类型之一。

   对于 Linux、macOS 或 Unix：

   ```
   aws memorydb update-cluster  \
   	--cluster-name my-cluster \
   	--node-type db.r6g.2xlarge
   ```

   对于 Windows：

   ```
   aws memorydb update-cluster ^
   	    --cluster-name my-cluster ^
   	    --node-type db.r6g.2xlarge ^
   ```

   有关更多信息，请参阅 [ update-cluster](https://docs.aws.amazon.com/cli/latest/reference/memorydb/update-cluster.html)。

## 纵向扩展 MemoryDB 集群（MemoryDB API）
<a name="verticalscaling.scaleup.api"></a>

以下过程使用 MemoryDB API 将集群从其当前节点类型扩展为较大的新节点类型。在此过程中，MemoryDB 会更新 DNS 条目使其指向新的节点。您可以在该集群继续保持在线并处理传入请求时扩展启用自动失效转移的集群。

纵向扩展为较大的节点类型所需的时间因节点类型和当前集群中的数据量不同而异。

**纵向扩展 MemoryDB 集群（MemoryDB API）**

1. 使用带以下参数的 MemoryDB API `ListAllowedNodeTypeUpdates` 操作确定您可纵向扩展的节点类型。
   + `ClusterName` – 集群的名称。使用此参数可描述特定集群而非所有集群。

   ```
   https://memory-db.us-east-1.amazonaws.com/
   	   ?Action=ListAllowedNodeTypeUpdates
   	   &ClusterName=MyCluster
   	   &Version=2021-01-01
   	   &SignatureVersion=4
   	   &SignatureMethod=HmacSHA256
   	   &Timestamp=20210802T192317Z
   	   &X-Amz-Credential=<credential>
   ```

   有关更多信息，请参阅《M *emoryDB API* 参考》[ListAllowedNodeTypeUpdates](https://docs.aws.amazon.com/memorydb/latest/APIReference/API_ListAllowedNodeTypeUpdates.html)中的。

1. 使用带以下参数的 `UpdateCluster` MemoryDB API 操作将当前集群扩展为新的节点类型。
   + `ClusterName` – 集群的名称。
   + `NodeType` – 此集群中集群的较大的新节点类型。此值必须是步骤 1 中由 `ListAllowedNodeTypeUpdates` 操作返回的实例类型之一。

   ```
   https://memory-db.us-east-1.amazonaws.com/
   	   ?Action=UpdateCluster	  
   	   &NodeType=db.r6g.2xlarge
   	   &ClusterName=myCluster
   	   &SignatureVersion=4
   	   &SignatureMethod=HmacSHA256
   	   &Timestamp=20210801T220302Z
   	   &Version=2021-01-01
   	   &X-Amz-Algorithm=Amazon4-HMAC-SHA256
   	   &X-Amz-Date=20210801T220302Z
   	   &X-Amz-SignedHeaders=Host
   	   &X-Amz-Expires=20210801T220302Z
   	   &X-Amz-Credential=<credential>
   	   &X-Amz-Signature=<signature>
   ```

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

# 在线缩减
<a name="cluster-vertical-scaling-scaling-down"></a>

**Topics**
+ [缩减 MemoryDB 集群（控制台）](#cluster-vertical-scaling-down-console)
+ [缩小 MemoryDB 集群 (CLI AWS )](#scaling.scaledown.cli)
+ [缩减 MemoryDB 集群（MemoryDB API）](#scaling.vertical.scaledown.api)

## 缩减 MemoryDB 集群（控制台）
<a name="cluster-vertical-scaling-down-console"></a>

以下过程介绍如何使用 AWS 管理控制台缩减 MemoryDB 集群。在此过程中，MemoryDB 集群将继续处理请求，且停机时间降至最短。

**缩减 MemoryDB 集群（控制台）**

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

1. 从集群列表中，选择首选集群。

1. 选择 **Actions**（操作），然后选择 **Modify**（修改）。

1. 在**修改集群**对话框中：

   1. 从 **Node type** 列表中选择您希望扩展到的节点类型。要缩减，请选择小于现有节点的节点类型。请注意，并不是可缩减到所有节点类型。

1. 选择**保存更改**。

   集群状态更改为*正在修改*。当状态变为 *available* 时，即表示修改完成，您可以开始使用新集群。

## 缩小 MemoryDB 集群 (CLI AWS )
<a name="scaling.scaledown.cli"></a>

以下过程介绍如何使用 AWS CLI缩减 MemoryDB 集群。在此过程中，MemoryDB 集群将继续处理请求，且停机时间降至最短。

**缩小 MemoryDB 集群 (CLI AWS )**

1. 通过运行带有以下参数的 AWS CLI `list-allowed-node-type-updates`命令来确定可以缩减到的节点类型。

   对于 Linux、macOS 或 Unix：

   ```
   aws memorydb list-allowed-node-type-updates \
   	    --cluster-name my-cluster-name
   ```

   对于 Windows：

   ```
   aws memorydb list-allowed-node-type-updates ^
   	    --cluster-name my-cluster-name
   ```

   以上命令的输出类似于此处所示（JSON 格式）。

   ```
   {
   	    "ScaleUpNodeTypes": [
   	        "db.r6g.2xlarge", 
   	        "db.r6g.large"	        
   	    ],
   	    "ScaleDownNodeTypes": [
   	        "db.r6g.large"	        
   	    ], 
   }
   ```

   有关更多信息，请参阅 [list-allowed-node-type-updates。](https://docs.aws.amazon.com/cli/latest/reference/memorydb/list-allowed-node-type-updates.html)

1. 使用 `update-cluster` 命令和以下参数修改集群以缩减为较小的新节点类型。
   + `--cluster-name` – 要缩减的集群的名称。
   + `--node-type` – 要扩展集群的新节点类型。此值必须是步骤 1 中由 `list-allowed-node-type-updates` 命令返回的节点类型之一。

   对于 Linux、macOS 或 Unix：

   ```
   aws memorydb update-cluster  \
   	    --cluster-name my-cluster \
   	    --node-type db.r6g.large
   ```

   对于 Windows：

   ```
   aws memorydb update-cluster ^
   	    --cluster-name my-cluster ^
   	    --node-type db.r6g.large
   ```

   有关更多信息，请参阅 [ update-cluster](https://docs.aws.amazon.com/cli/latest/reference/memorydb/update-cluster.html)。

## 缩减 MemoryDB 集群（MemoryDB API）
<a name="scaling.vertical.scaledown.api"></a>

以下过程使用 MemoryDB API 将集群从其当前节点类型扩展为较小的新节点类型。在此过程中，MemoryDB 集群将继续处理请求，且停机时间降至最短。

缩减为较小的节点类型所需的时间因节点类型和当前集群中的数据量而异。

**缩减（MemoryDB API）**

1. 使用带有以下参数的 [ListAllowedNodeTypeUpdates](https://docs.aws.amazon.com/memorydb/latest/APIReference/API_ListAllowedNodeTypeUpdates.html)API 来确定可以缩减为哪些节点类型：
   + `ClusterName` – 集群的名称。使用此参数可描述特定集群而非所有集群。

   ```
   https://memory-db.us-east-1.amazonaws.com/
   	   ?Action=ListAllowedNodeTypeUpdates
   	   &ClusterName=MyCluster
   	   &Version=2021-01-01
   	   &SignatureVersion=4
   	   &SignatureMethod=HmacSHA256
   	   &Timestamp=20210802T192317Z
   	   &X-Amz-Credential=<credential>
   ```

1. 使用带有以下参数的 [UpdateCluster](https://docs.aws.amazon.com/memorydb/latest/APIReference/API_UpdateCluster.html)API 将当前集群缩小到新的节点类型。
   + `ClusterName` – 集群的名称。
   + `NodeType` – 此集群中集群的较小的新节点类型。此值必须是步骤 1 中由 `ListAllowedNodeTypeUpdates` 操作返回的实例类型之一。

   ```
   https://memory-db.us-east-1.amazonaws.com/
   	   ?Action=UpdateCluster	   
   	   &NodeType=db.r6g.2xlarge
   	   &ClusterName=myReplGroup
   	   &SignatureVersion=4
   	   &SignatureMethod=HmacSHA256
   	   &Timestamp=20210801T220302Z
   	   &Version=2021-01-01
   	   &X-Amz-Algorithm=Amazon4-HMAC-SHA256
   	   &X-Amz-Date=20210801T220302Z
   	   &X-Amz-SignedHeaders=Host
   	   &X-Amz-Expires=20210801T220302Z
   	   &X-Amz-Credential=<credential>
   	   &X-Amz-Signature=<signature>
   ```