MemoryDB 的線上重新分片和碎片重新平衡 - Amazon MemoryDB

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

MemoryDB 的線上重新分片和碎片重新平衡

透過使用 MemoryDB 的線上重新分片和碎片重新平衡,您可以在沒有停機時間的情況下動態擴展 MemoryDB。此方法表示叢集可以繼續提供請求的服務 (甚至是在擴展或重新平衡進行中時)。

您可以執行下列作業:

  • 外擴充 — 透過將碎片新增至 MemoryDB 叢集來增加讀取和寫入容量。

    如果您將一或多個碎片新增至叢集,則每個新碎片中的節點數目與現有碎片中最小的節點數目相同。

  • 擴充 — 透過從 MemoryDB 叢集移除碎片,減少讀取和寫入容量,從而降低成本。

目前,以下限制適用於 MemoryDB 線上重新分片:

  • 槽或金鑰空間和大型項目的限制為:

    如果碎片中的任何金鑰包含大型項目,在向外擴展或重新平衡時,不會將該金鑰遷移至新碎片。此功能可能造成不平衡的碎片。

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

  • 縮小時,任何新碎片中的節點數量等於現有碎片中的節點數量。

如需詳細資訊,請參閱 最佳實務:線上叢集大小調整

您可以使用 AWS Management Console、和 MemoryDB API 水平調整或重新平衡您的 MemoryDB 叢集。 AWS CLI

使用線上重新分片功能新增碎片

您可以使用 AWS Management Console、 AWS CLI或 MemoryDB API 將碎片新增至您的記憶體資料庫叢集。

您可以使用將 AWS Management Console 一或多個碎片新增至您的 MemoryDB 叢集。下列程序描述該程序。

  1. 登入 AWS Management Console 並開啟記憶體資料庫主控台,網址為 https://console.aws.amazon.com/memorydb/。

  2. 從叢集清單中,選擇要從中新增碎片的叢集名稱。

  3. 在「碎片和節點」選項卡下,選擇「添加/刪除碎片」

  4. 新的碎片數量中,輸入您想要的碎片數量。

  5. 選擇「確認」以保留變更,或選擇「取消」 捨棄。

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

使用下列參數搭配 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 } ] }

如需詳細資訊,請參閱 AWS CLI 命令參考中的更新叢集

您可以使用 MemoryDB API,使用此作業在線上重新設定 MemoryDB 叢集中的碎片。UpdateCluster

使用下列參數搭配 UpdateCluster

參數
  • ClusterName - 必要。指定要在哪個叢集上執行碎片重新配置作業。

  • ShardConfiguration - 必要。允許您設置碎片的數量。

    • ShardCount-設置此屬性以指定所需的碎片數量。

如需詳細資訊,請參閱UpdateCluster

使用線上重新分片移除碎片

您可以使用 AWS Management Console、 AWS CLI或 MemoryDB API 從您的 MemoryDB 叢集中移除碎片。

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

重要

在從叢集中移除碎片之前,MemoryDB 會確保所有資料都適合剩餘的碎片。如果數據適合,則會根據要求從叢集中刪除碎片。如果資料不適合剩餘的碎片,則會終止處理序,並且叢集會保留與發出要求之前相同的碎片配置。

您可以使用 AWS Management Console 從 MemoryDB 叢集中移除一或多個碎片。您無法移除叢集中的所有碎片。相反地,您必須刪除叢集。如需詳細資訊,請參閱 步驟 4:刪除叢集。下列程序說明移除一或多個碎片的程序。

  1. 登入 AWS Management Console 並開啟記憶體資料庫主控台,網址為 https://console.aws.amazon.com/memorydb/。

  2. 從叢集清單中,選擇要從中移除碎片的叢集名稱。

  3. 在「碎片和節點」選項卡下,選擇「添加/刪除碎片」

  4. 新的碎片數量中,輸入您想要的碎片數量(至少為 1)。

  5. 選擇「確認」以保留變更,或選擇「取消」 捨棄。

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

重要

在從叢集中移除碎片之前,MemoryDB 會確保所有資料都適合剩餘的碎片。如果數據適合,碎片將根據要求從集群中刪除,並將其密鑰空間映射到剩餘的碎片中。如果數據將不適合在剩餘的碎片,該進程被終止,並保留與發出請求之前相同的碎片配置集群。

您可以使用 AWS CLI 從 MemoryDB 叢集中移除一或多個碎片。您無法移除叢集中的所有碎片。相反地,您必須刪除叢集。如需詳細資訊,請參閱 步驟 4:刪除叢集

使用下列參數搭配 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 } ] }

如需詳細資訊,請參閱 AWS CLI 命令參考中的更新叢集

您可以使用 MemoryDB API,使用此作業在線上重新設定 MemoryDB 叢集中的碎片。UpdateCluster

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

重要

在刪除碎片 ROM 集群之前,MemoryDB 確保所有數據都適合剩餘的碎片。如果數據適合,碎片將根據要求從集群中刪除,並將其密鑰空間映射到剩餘的碎片中。如果數據將不適合在剩餘的碎片,該進程被終止,並保留與發出請求之前相同的碎片配置集群。

您可以使用 MemoryDB API 從您的 MemoryDB 叢集中移除一或多個碎片。您無法移除叢集中的所有碎片。相反地,您必須刪除叢集。如需詳細資訊,請參閱 步驟 4:刪除叢集

使用下列參數搭配 UpdateCluster

參數
  • ClusterName - 必要。指定要在哪個叢集 (叢集) 上執行碎片重新配置作業。

  • ShardConfiguration - 必要。允許您使用ShardCount屬性設置碎片的數量:

    ShardCount-設置此屬性以指定所需的碎片數量。