本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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 叢集。下列程序描述該程序。
-
從叢集清單中,選擇要從中新增碎片的叢集名稱。
在「碎片和節點」選項卡下,選擇「添加/刪除碎片」
-
在新的碎片數量中,輸入您想要的碎片數量。
-
選擇「確認」以保留變更,或選擇「取消」 捨棄。
下列程序說明如何使用新增碎片來重新設定 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)。
-
選擇「確認」以保留變更,或選擇「取消」 捨棄。
下列程序說明如何使用移除碎片來重新設定 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
-設置此屬性以指定所需的碎片數量。