

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

透過使用線上重新分片和搭配 MemoryDB，您可以動態擴展 MemoryDB，無需停機。此方法表示叢集可以繼續提供請求的服務 (甚至是在擴展或重新平衡進行中時)。

您可以執行下列動作：
+ **橫向擴展** – 透過將碎片新增至 MemoryDB 叢集來增加讀取和寫入容量。

  如果您將一或多個碎片新增至叢集，則每個新碎片中的節點數目與現有碎片中最小的節點數目相同。
+ **向內擴展** – 從 MemoryDB 叢集移除碎片，以減少讀取和寫入容量，進而降低成本。

目前，下列限制適用於 MemoryDB 線上重新分片：
+ 槽或金鑰空間和大型項目的限制為：

  如果碎片中的任何索引鍵包含大型項目，則該索引鍵在向外擴展 時不會遷移至新的碎片。此功能可能造成不平衡的碎片。

  如果碎片中的任何金鑰包含大型項目 (序列化後項目大於 256 MB)，在向內擴展時，不會刪除該碎片。此功能可能造成一些碎片不會遭到刪除。
+ 向外擴展時，任何新碎片中的節點數目等於現有碎片中的節點數目。

如需詳細資訊，請參閱[最佳實務：線上叢集大小調整](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 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/memorydb/](https://console.aws.amazon.com/memorydb/) 的 MemoryDB 主控台。

1. 從叢集清單中，選擇您要從中新增碎片的叢集名稱。

1. 在**碎片和節點**索引標籤下，選擇**新增/刪除碎片**

1. 在**新的碎片數量**中，輸入您想要的碎片數量。

1. 選擇**確認**以保留變更，或選擇**取消**以捨棄。

### 新增碎片 (AWS CLI)
<a name="cluster-resharding-online-add-cli"></a>

下列程序說明如何使用 新增碎片來重新設定 MemoryDB 叢集中的碎片 AWS CLI。

使用下列參數搭配 `update-cluster`。

**Parameters**
+ `--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
        }
    ]
}
```

如需詳細資訊，請參閱《 AWS CLI 命令參考》中的 [update-cluster](https://docs.aws.amazon.com/cli/latest/reference/memorydb/update-cluster.html)。

### 新增碎片 (MemoryDB API)
<a name="cluster-resharding-online-add-api"></a>

您可以使用 MemoryDB API，透過 `UpdateCluster`操作，在線上重新設定 MemoryDB 叢集中的碎片。

使用下列參數搭配 `UpdateCluster`。

**Parameters**
+ `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>

下列程序說明如何使用 移除碎片，以重新設定 MemoryDB 叢集中的碎片 AWS 管理主控台。

**重要**  
從叢集移除碎片之前，MemoryDB 會確保所有資料都符合其餘碎片。如果資料適合，碎片會依要求從叢集中刪除。如果資料不符合其餘碎片，則程序會終止，而叢集會保留與發出請求之前相同的碎片組態。

您可以使用 從 MemoryDB 叢集 AWS 管理主控台 中移除一或多個碎片。您無法移除叢集中的所有碎片。您必須刪除叢集。如需詳細資訊，請參閱[步驟 5：刪除叢集](getting-started.md#clusters.delete)。下列程序說明移除一或多個碎片的程序。

****

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/memorydb/](https://console.aws.amazon.com/memorydb/) 的 MemoryDB 主控台。

1. 從叢集清單中，選擇您要從中移除碎片的叢集名稱。

1. 在**碎片和節點**索引標籤下，選擇**新增/刪除碎片**

1. 在**新的碎片數量**中，輸入您想要的碎片數量 （最少 1 個）。

1. 選擇**確認**以保留變更，或選擇**取消**以捨棄。

### 移除碎片 (AWS CLI)
<a name="cluster-resharding-online-remove-cli"></a>

下列程序說明如何使用 移除碎片，以重新設定 MemoryDB 叢集中的碎片 AWS CLI。

**重要**  
從叢集移除碎片之前，MemoryDB 會確保所有資料都符合其餘碎片。如果資料適合，碎片會依要求從叢集中刪除，且其金鑰空間會映射至剩餘的碎片。如果資料不符合其餘碎片，則程序會終止，而叢集會保留與發出請求之前相同的碎片組態。

您可以使用 從 MemoryDB 叢集 AWS CLI 中移除一或多個碎片。您無法移除叢集中的所有碎片。您必須刪除叢集。如需詳細資訊，請參閱[步驟 5：刪除叢集](getting-started.md#clusters.delete)。

使用下列參數搭配 `update-cluster`。

**Parameters**
+ `--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
        }
    ]
}
```

如需詳細資訊，請參閱《 AWS CLI 命令參考》中的 [update-cluster](https://docs.aws.amazon.com/cli/latest/reference/memorydb/update-cluster.html)。

### 移除碎片 (MemoryDB API)
<a name="cluster-resharding-online-remove-api"></a>

您可以使用 MemoryDB API，透過 `UpdateCluster`操作，在線上重新設定 MemoryDB 叢集中的碎片。

下列程序說明如何使用 MemoryDB API 移除碎片，以重新設定 MemoryDB 叢集中的碎片。

**重要**  
從叢集移除碎片之前，MemoryDB 會確保所有資料都符合其餘碎片。如果資料適合，碎片會依要求從叢集中刪除，且其金鑰空間會映射至剩餘的碎片。如果資料不符合其餘碎片，則程序會終止，而叢集會保留與發出請求之前相同的碎片組態。

您可以使用 MemoryDB API 從 MemoryDB 叢集中移除一或多個碎片。您無法移除叢集中的所有碎片。您必須刪除叢集。如需詳細資訊，請參閱[步驟 5：刪除叢集](getting-started.md#clusters.delete)。

使用下列參數搭配 `UpdateCluster`。

**Parameters**
+ `ClusterName` - 必要。指定要在哪個叢集 （叢集） 上執行碎片重新設定操作。
+ `ShardConfiguration` - 必要。可讓您使用 `ShardCount` 屬性設定碎片數量：

  `ShardCount` – 設定此屬性以指定您想要的碎片數量。