

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

# MemoryDB 多區域
<a name="multi-region"></a>

MemoryDB Multi-Region 是一個全受管、主動-主動、多區域資料庫，可讓您建置多區域應用程式，可用性高達 99.999%、微秒讀取和單位數毫秒寫入延遲。您可以改善區域降級的可用性和彈性，同時受益於多區域應用程式的低延遲本機讀取和寫入。

透過 MemoryDB 多區域，您可以建置高度可用的多區域應用程式，以提高彈性。它提供主動-主動複寫，因此您可以從最接近您客戶的區域提供本機讀取和寫入，具有微秒讀取和一位數毫秒寫入延遲。MemoryDB 多區域會在區域之間非同步複寫資料，資料通常會在一秒內傳播。它會自動解決更新衝突並修正資料差異問題，讓您專注於應用程式。

下列 AWS 區域目前支援 MemoryDB 多區域：美國東部 （維吉尼亞北部和俄亥俄）、美國西部 （奧勒岡北部、加利佛尼亞北部）、歐洲 （愛爾蘭、法蘭克福和倫敦） 和亞太區域 （東京、雪梨、孟買、首爾和新加坡）。

只要從 或使用最新的 AWS SDK AWS 管理主控台 或 按幾下滑鼠，即可輕鬆開始使用 MemoryDB 多區域 AWS CLI。

**Topics**
+ [先決條件和限制](multi-region.prereq.md)
+ [運作方式](multi-region.how.md)
+ [一致性和衝突解決](#multi-region.conflict)
+ [搭配主控台使用 MemoryDB 多區域](multi-Region.console.md)
+ [搭配 CLI 使用 MemoryDB 多區域](multi-Region.cli.md)
+ [監控 MemoryDB 多區域](multi-Region.monitoring.md)
+ [使用 MemoryDB 多區域擴展](multi-Region.Scaling.md)
+ [支援和不支援的命令](multi-Region.SupportedCommands.md)

# 先決條件和限制
<a name="multi-region.prereq"></a>

開始使用 MemoryDB 多區域之前，請注意下列事項：
+ **MemoryDB 多區域會在您選擇的區域之間複寫資料** - 透過建立多區域叢集，您了解並同意資料會在您選取的區域之間移動。

  從多區域群組移除區域也會刪除該區域中的區域叢集。
+ **區域可用性** - 下列 AWS 區域支援 MemoryDB 多區域：美國東部 （維吉尼亞北部和俄亥俄）、美國西部 （奧勒岡北部、加利佛尼亞北部）、歐洲 （愛爾蘭、法蘭克福和倫敦） 和亞太區域 （東京、雪梨、孟買、首爾和新加坡）。
+ **行為和設定** - 所有多區域區域叢集會有相同數量的碎片、執行個體類型、Valkey 引擎版本、TLS 和參數群組設定。您可以為每個區域叢集選擇不同的 IAM 身分驗證、ACLs、快照視窗、標籤、客戶受管金鑰 (CMKs) 和維護時段。

  使用 MemoryDB 多區域時，不同區域中的叢集可能會有不同數量的複本。
+ **支援的節點類型 ** - 大小為 XL 及以上的 R7g 節點支援 MemoryDB 多區域。

  MemoryDB 多區域支援 Valkey 引擎 7.3 版及更新版本。
+ **支援的資料類型** - MemoryDB 多區域目前支援大多數 Redis OSS 或 Valkey 資料類型，我們將在未來新增對更多資料類型的支援。支援的資料類型包括字串、雜湊、集合和排序集合，但並非所有操作這些資料類型的命令都受到支援。
+ **區域總數** - 透過 MemoryDB 多區域，您將能夠在最多五個 AWS 區域之間自動複寫 MemoryDB 叢集資料。
+ **支援的選項** - MemoryDB 多區域支援水平/垂直擴展、IAM 整合、ACLs、自動和隨需快照、自動軟體修補和監控。
+ **備份和還原** - 您可以建立快照來備份多區域區域叢集的資料。您可以手動建立快照，也可以使用 MemoryDB 的自動快照排程器，每天在每個區域叢集個別指定的時間拍攝新的快照。
+ **遷移** - 您可以選擇還原任何 MemoryDB 或 Redis OSS/Valkey RDB 格式備份。若要從備份遷移資料，請建立新的 MemoryDB 多區域叢集，並從 Amazon S3 指定快照位置。如果是 MemoryDB 快照，您也可以指定名稱。MemoryDB 多區域將使用快照中的資料建立區域叢集。由於 MemoryDB 多區域支援字串、雜湊、集合、排序集合資料類型，因此您只能遷移這些支援資料類型的快照資料。如果備份檔案包含不支援的 Redis OSS 資料類型，根據預設，MemoryDB 多區域遷移操作會失敗。
+ **資源保留** - MemoryDB 多區域旨在保護區域可用性。有些資源會永久保留在每個節點上，以確保本機讀取和寫入請求可以獨立於對等區域中的工作負載。這些資源也可用來在對等區域中的事件期間保護本機可用性，包括區域隔離事件及其復原期間。相較於單一區域 MemoryDB，這會產生不同的效能特性。MemoryDB 多區域支援水平和垂直擴展，以擴展可用的資源。
+ **沒有 RPO/RTO SLAs** - MemoryDB 多區域不提供指定的 RPO/RTO SLA。它將繼續接受與其他 AWS 區域隔離的 AWS 區域中的寫入，可能會無限期地增加交叉複寫延遲。我們期望客戶使用「MultiRegionClusterReplicationLag」指標偵測隔離，並根據他們想要的 RPO，將應用程式流量重新導向至另一個區域。
+ **沒有單一端點或自動容錯移轉：**- 如果發生區域中斷，您必須手動將客戶流量重新導向至另一個區域中的應用程式堆疊。您必須確保他們已正確設定 MemoryDB 叢集的多區域存取權。
+ **不支援 TTL ** - MemoryDB 多區域不支援 TTL （存留時間）。
+ **不支援資料分層或向量搜尋 ** - MemoryDB 多區域不支援向量搜尋和資料分層功能。
+ MemoryDB 多區域不支援read-modify-write(APPEND、RENAMENX 等）。
+ MemoryDB 多區域不保證 Redis OSS 交易的原子性和一致性。
+ **驗證模型** - 可以從任何支援的區域叫用 MemoryDB 多區域 API 動作。在 IAM 政策中指定多區域叢集的 ARN，可以限制許可範圍。多區域叢集 ARN 的格式為 `arn:aws:memorydb::<account-id>:multiregioncluster/multi-region-cluster-name`。ARN 中沒有區域資訊。
+ **輸送量限制** - MemoryDB 多區域可支援區域中每個節點高達 1.3 GB/s 的讀取輸送量，以及每個碎片約 50 MB/s 的全域彙總寫入輸送量。
+ **AWS 政策** - AWS ReadOnlyAccess 政策提供對 AWS 服務和資源的唯讀存取權，但不會自動擷取一或多個多區域叢集的詳細資訊。若要擷取一或多個多區域叢集的詳細資訊，請使用 [AmazonMemoryDBReadOnlyAccess](security-iam-awsmanpol.md#iam.identitybasedpolicies.predefinedpolicies-readonly)政策或建立 [ IAM 客戶受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html) 。
+ **刪除區域叢集** - 刪除區域叢集時，任何相關聯的客戶受管金鑰 (CMKs) 必須保持有效，直到區域叢集完成刪除為止。這可確保剩餘的區域叢集可以收斂至一致的狀態。

# 運作方式
<a name="multi-region.how"></a>

以下是 MemoryDB 多區域的運作方式。
+ **概念**

  多區域叢集是一或多個區域叢集的集合，所有叢集都由單一 AWS 帳戶擁有。

  區域叢集是屬於多區域叢集之 AWS區域中的單一叢集。每個區域叢集都會存放相同的資料集。任何指定的多區域叢集在每個 AWS 區域只能有一個區域叢集。

  當您建立多區域叢集時，它包含多個區域叢集 （每個區域一個），MemoryDB 會將其視為單一單位。當應用程式將資料寫入任何區域叢集時，MemoryDB 會自動並以非同步方式將該資料複寫至多區域叢集內的所有其他區域叢集。您可以將區域叢集新增至多區域叢集，以便在其他區域中使用。您將能夠在最多五個區域之間自動複寫 MemoryDB 叢集資料。
+ **可用性和耐久性**

  在極少數的區域隔離或區域降級的情況下，您可以更新全域 DNS，將流量重新導向至您的應用程式至其他運作狀態良好的區域之一，而不需要任何資料庫重新設定，可簡化為應用程式維持高可用性的程序。MemoryDB 會持久地將來自所有區域的寫入存放在多可用區域交易日誌中，以確保區域內不會遺失資料。MemoryDB 多區域會追蹤區域中已確認但尚未複寫至所有成員叢集的所有寫入。如果區域遭到隔離或降級，它仍會繼續接受本機寫入。當隔離的區域再次連接到多區域叢集時，已確認但尚未複寫到其他區域的寫入將會複寫到多區域叢集中的所有區域。MemoryDB 多區域也會使用 CRDT 機制，自動將等待中的寫入與中斷期間其他區域可能發生的任何更新進行協調。
+ **連線至 MemoryDB 多區域叢集**

  若要將資料寫入區域叢集並從中讀取資料，您可以使用其中一個支援的 Redis OSS/Valkey 用戶端 （包括 Valkey GLIDE) 來連線到該叢集。每個區域叢集都有您的 Redis OSS/Valkey 用戶端可以連線的端點。您可以使用 AWS 主控台、CLI 或 API 擷取區域叢集端點。然後，您可以在應用程式中使用 （或設定） 此端點從區域叢集讀取/寫入資料。

## 一致性和衝突解決
<a name="multi-region.conflict"></a>

對其中一個區域叢集中的金鑰所做的任何更新都會以非同步方式傳播到多區域叢集中的其他區域叢集，通常在一秒內。如果區域變得隔離或降級，MemoryDB 多區域會追蹤任何已執行但尚未傳播到所有成員叢集的寫入。當區域恢復上線時，MemoryDB 多區域會繼續將任何待定寫入從該區域傳播到其他區域中的成員叢集。它也會繼續將寫入從其他成員叢集傳播到現在恢復線上的 區域。無論區域隔離多長時間，所有之前成功的寫入都將最終傳播。

如果您的應用程式大約同時更新不同區域中的相同金鑰，則可能會發生衝突。MemoryDB 多區域使用無衝突複寫資料類型 (CRDT)，在衝突並行寫入之間進行協調。CRDT 是一種資料結構，無需協調即可獨立並行更新。這表示寫入寫入衝突會在每個複本上以最終一致性獨立合併。

具體而言，MemoryDB 會使用 2 個層級的 Last Writer Wins (LWW) 來解決衝突。對於字串資料類型，LWW 會在金鑰層級解決衝突。對於其他資料類型，LWW 會解決子索引鍵層級的衝突。衝突解決是完全受管的，並在背景發生，不會影響應用程式的可用性。以下是雜湊資料類型的範例：

區域 A 在時間戳記 T1 執行「HSET K F11 V1」；區域 B 在時間戳記 T2 執行「HSET K F22 V2」；複寫後，區域 A 和 B 都會具有兩個欄位的金鑰 K。當不同區域同時更新相同集合中的不同子索引鍵時，因為 MemoryDB 在雜湊資料類型的子索引鍵層級解決衝突時，這兩個更新不會彼此衝突。因此，最終資料將包含這兩個更新的效果。


| 時間 | 區域 A | 區域 B | 
| --- | --- | --- | 
|  T1  |   HSET K F1 V1  |    | 
|  T2  |    |   HSET K F2 V2  | 
|  T3  |  同步  |  同步  | 
|  T4  |   K：\$1F1：V1、F2：V2\$1  |  K：\$1F1：V1、F2：V2\$1  | 

### CRDT 和範例
<a name="clusters.multi-Region.CRDT"></a>

 MemoryDB 多區域實作無衝突複寫資料類型 (CRDT)，以解決從多個區域發出的並行寫入衝突。CRDT 允許不同區域在最終收到同一組操作時獨立實現最終一致性，無論排序為何。

 當單一金鑰在多個區域中同時更新時，需要解決寫入寫入衝突，才能達到資料一致性。MemoryDB Multi-Region 使用 Last Writer Wins (LWW) 策略來判斷獲勝操作，而且只會最終觀察「之後發生」的操作效果。如果 op1 的效果已在 Regionit 中套用，則表示操作 op1「之前發生」操作 op2 是在執行 op2 時原始執行的。

 對於集合 (Hash、Set 和 SortedSet) MemoryDB 多區域解析元素層級的衝突。這可讓 MemoryDB 多區域使用 LWW 來解決每個元素的寫入/寫入衝突。例如，從多個區域同時將不同的元素新增至相同的集合，將導致包含所有元素的集合。

**並行執行：上次寫入器獲勝**

在 MemoryDB 多區域中，當同時建立金鑰時，在任何區域上執行的最後一個操作都會決定金鑰的結果。例如：

![\[並行執行：最後寫入器獲勝。\]](http://docs.aws.amazon.com/zh_tw/memorydb/latest/devguide/images/concurrent-ex-last-writer-wins.png)


金鑰 x 是在區域 B 上以值 "b" 建立，但在此之後，相同的金鑰是在區域 A 中以值 "a" 建立。最後，金鑰會收斂為值 "a"，因為區域 A 中的操作是上次執行的操作。

**並行執行與衝突的資料類型：最後寫入器獲勝**

在上述範例中，金鑰是在兩個區域中使用相同類型建立的。如果使用不同的資料類型建立金鑰，也會觀察到類似的行為：

![\[並行執行與衝突的資料類型：最後寫入器獲勝。\]](http://docs.aws.amazon.com/zh_tw/memorydb/latest/devguide/images/concurrent-ex-conflict-data-types-last-writer-wins.png)


金鑰 x 在區域 B 上建立為字串，值為 "b"。但之後，在該操作複寫到區域 A 之前，會在區域 A 中建立相同的金鑰做為雜湊。最後，金鑰會收斂在區域 A 上建立雜湊，因為區域 A 中的操作是上次執行的操作。

**並行 create-deletion：上次寫入器獲勝**

在同時刪除和建立 （表示值的取代/增加） 的情況下，上次執行的操作將會獲勝。最終結果將由刪除操作的順序決定。如果刪除之前發生：

![\[並行 create-deletion：如果之前發生刪除，最後寫入器會獲勝。\]](http://docs.aws.amazon.com/zh_tw/memorydb/latest/devguide/images/concurrent-create-delete-last-writer-wins-before.jpg)


已在區域 B 上刪除類型 Set 的金鑰 x。在此之後，區域 A 上的該金鑰會新增新的成員。最終，金鑰會收斂為在區域 A 上新增唯一元素的 Set，因為區域 A 上的操作是上次執行的操作。

如果刪除發生在以下時間之後：

![\[並行 create-deletion：如果刪除之後發生，最後寫入器會獲勝。\]](http://docs.aws.amazon.com/zh_tw/memorydb/latest/devguide/images/concurrent-create-delete-last-writer-wins-after.jpg)


已在區域 A 上將新的成員新增至金鑰 x 類型 設定。在區域 B 上刪除金鑰之後，該金鑰最終會收斂為刪除金鑰，因為區域 B 上的操作是上次執行的操作。

**計數器、並行操作：具有最後一個寫入器獲勝的完整值複寫**

MemoryDB 多區域中的計數器透過執行完整值複寫和套用last-writer-strategy，與非計數器類型的行為類似。並行操作不會合併，但最後一個操作將取而代之。例如：

![\[最後一個寫入器獲勝時的完整值複寫。\]](http://docs.aws.amazon.com/zh_tw/memorydb/latest/devguide/images/concurrent-full-rep-last-writer-wins.jpg)


在此案例中，金鑰 x 的起始值為 1。然後，區域 B 將計數器 x 增加 2，然後不久後區域 A 將計數器增加 1。由於區域 A 是上次執行的操作，金鑰 x 最終會收斂至值 2，因為增加 1 是上次執行的操作。

**非確定性命令會複寫為確定性**

為了確保不同區域的值一致性，MemoryDB Multi-Region 非確定性命令會複寫為確定性。非確定性命令是依賴外部因素的命令，例如 SETNX。SETNX 取決於金鑰是否存在，而且金鑰可能存在於遠端區域，但不存在於接收命令的本機區域中。因此，否則非確定性命令會複寫為完整值複寫。如果是字串，則會將其複寫為 SET 命令。

![\[將複寫為確定性的非確定性命令。\]](http://docs.aws.amazon.com/zh_tw/memorydb/latest/devguide/images/nondeterministic_commands.png)


總而言之，字串類型的所有操作都會複寫為 SET 或 DEL，雜湊類型的所有操作都會複寫為 HSET 或 HDEL，設定類型的所有操作都會複寫為 SADD 或 SREM，排序設定的所有操作都會複寫為 ZADD 或 ZREM。

# 搭配主控台使用 MemoryDB 多區域
<a name="multi-Region.console"></a>

以下是搭配 主控台使用 MemoryDB 多區域的方法。

**Topics**
+ [在 MemoryDB 多區域建立新的叢集](#multi-Region.console.create)
+ [將快照還原至多區域叢集內的新叢集或現有叢集](#multi-Region.console.restore)
+ [修改 MemoryDB 多區域中的叢集](#multi-Region.console.modify)
+ [在 MemoryDB 多區域中刪除叢集](#multi-Region.console.delete)

## 在 MemoryDB 多區域建立新的叢集
<a name="multi-Region.console.create"></a>

1. 從叢集清單或儀表板導覽至建立叢集區段。  
![\[建立叢集、主控台檢視。\]](http://docs.aws.amazon.com/zh_tw/memorydb/latest/devguide/images/create-multi-region1.png)

1.  在**叢集類型**欄位中，選取**多區域叢集**。

1.  在**叢集建立方法**欄位中，選取**輕鬆建立**。

1.  填寫**名稱**和**描述**，驗證預設值，然後選取**建立**。

**建立和設定叢集**

1. 從叢集清單或儀表板導覽至建立叢集區段。  
![\[建立和設定叢集、主控台檢視。\]](http://docs.aws.amazon.com/zh_tw/memorydb/latest/devguide/images/create-multi-region2-configure.png)

1.  在**叢集類型**欄位中，選取**多區域叢集**。

1.  在**叢集建立方法**欄位中，選取**建立新叢集**。

1.  填寫**名稱**和**描述**，驗證值，然後選取**建立**。

## 將快照還原至多區域叢集內的新叢集或現有叢集
<a name="multi-Region.console.restore"></a>

1. 從叢集清單或儀表板導覽至建立叢集區段。  
![\[還原叢集、主控台檢視。\]](http://docs.aws.amazon.com/zh_tw/memorydb/latest/devguide/images/restore-multi-region-from-snapshot1.png)

1. 在**叢集類型**欄位中，選取**多區域叢集**。

1.  在**叢集建立方法**欄位中，選取**從快照還原**。

1.  選取來源快照，然後填入必要欄位。檢閱您的選擇，然後選取**還原**。  
![\[選取來源快照以還原至多區域叢集的主控台檢視。\]](http://docs.aws.amazon.com/zh_tw/memorydb/latest/devguide/images/restore-multi-region-from-snapshot2-confirm.png)

1. 若要查看您的多區域叢集，請導覽至叢集區段：  
![\[用於修改多區域叢集之叢集區段的主控台檢視。\]](http://docs.aws.amazon.com/zh_tw/memorydb/latest/devguide/images/restore-multi-region-from-snapshot3-confirm.png)

1. 現在選取目標多區域叢集名稱。  
![\[主控台檢視，選擇要修改的多區域叢集。\]](http://docs.aws.amazon.com/zh_tw/memorydb/latest/devguide/images/restore-multi-region-from-snapshot4-confirm.png)

1. 現在選取目標區域叢集名稱。  
![\[選取要修改的區域叢集的主控台檢視。\]](http://docs.aws.amazon.com/zh_tw/memorydb/latest/devguide/images/restore-multi-region-from-snapshot5-confirm.png)

## 修改 MemoryDB 多區域中的叢集
<a name="multi-Region.console.modify"></a>

1. 導覽至叢集區段。您應該會看到所有目前的叢集。  
![\[這是我的映像。\]](http://docs.aws.amazon.com/zh_tw/memorydb/latest/devguide/images/modify-multi-region1.png)

   然後，根據您要修改的叢集類型，從下列步驟中選取 。

1. 若要使用 Muti-Region 叢集修改單一叢集，請先選取其所屬的多區域。然後選取動作上的編輯按鈕 （右上角）。然後選取目標單一叢集。您也可以從**詳細資訊**頁面修改此叢集。

**修改區域叢集**

1. 若要修改多區域叢集，請選取目標多區域叢集名稱。  
![\[主控台檢視，選擇要修改的目標多區域叢集。\]](http://docs.aws.amazon.com/zh_tw/memorydb/latest/devguide/images/modify-multi-region2.png)

   然後選取叢集，然後從動作 （右上角） 或從詳細資訊頁面選取**編輯**按鈕。

1. 若要新增區域叢集，請選取選取的目標多區域叢集，然後移至**動作**下拉式清單，然後選取**新增 AWS 區域**。您也可以前往 AWS 區域的詳細資訊頁面，選取目標多區域叢集，然後從該處新增 。  
![\[選取目標多區域叢集以新增區域叢集的主控台檢視。\]](http://docs.aws.amazon.com/zh_tw/memorydb/latest/devguide/images/modify-multi-region3-add-regional-cluster.png)

1. 若要新增區域，請選取目標區域。然後填入必要資訊，然後選取**新增 AWS 區域**。  
![\[主控台檢視，選擇要新增區域的目標多區域叢集。\]](http://docs.aws.amazon.com/zh_tw/memorydb/latest/devguide/images/modify-multi-region4-add-region.png)

1. 若要將新的區域叢集新增至空的多區域叢集，您會看到與建立多區域叢集中相同的選項。唯一的差別是多區域叢集資訊已存在。  
![\[選取空多區域叢集以新增新區域叢集的主控台檢視。\]](http://docs.aws.amazon.com/zh_tw/memorydb/latest/devguide/images/modify-multi-region5-add-regional-cluster-to-empty.png)

## 在 MemoryDB 多區域中刪除叢集
<a name="multi-Region.console.delete"></a>

1. 若要刪除區域中的單一叢集，請選取目標區域叢集。然後前往動作選單下拉式清單，選取個別叢集，然後選取**刪除**。  
![\[選取要刪除之單一叢集的主控台檢視。\]](http://docs.aws.amazon.com/zh_tw/memorydb/latest/devguide/images/delete-multi-region1-select.png)

   您會收到確認視窗，包括刪除前建立快照的選項。如果您仍要刪除，請在文字欄位中輸入「刪除」，然後選取**刪除**。  
![\[解析要刪除的確認時段檢視。\]](http://docs.aws.amazon.com/zh_tw/memorydb/latest/devguide/images/delete-multi-region2-snapshot.png)

1. 若要刪除具有多區域叢集的所有相關區域叢集，請選取其中具有一或多個叢集的目標多區域叢集。然後，選取目標多區域叢集，前往動作功能表下拉式清單，然後選取**刪除**。  
![\[選取 以刪除具有多區域叢集之所有相關叢集的主控台檢視。\]](http://docs.aws.amazon.com/zh_tw/memorydb/latest/devguide/images/delete-multi-region3-associated-clusters.png)

1. 若要刪除整個多區域叢集，請選取目標空白多區域叢集。然後前往動作選單下拉式清單，然後選取**刪除**。  
![\[刪除整個多區域叢集的主控台檢視。\]](http://docs.aws.amazon.com/zh_tw/memorydb/latest/devguide/images/delete-multi-region4-entire-mrc.png)

# 搭配 CLI 使用 MemoryDB 多區域
<a name="multi-Region.cli"></a>

以下是搭配 CLI 使用 MemoryDB 多區域的方法

**注意**  
MemoryDB 多區域僅支援節點類型 db.r7g.xlarge 及更高版本。

## 使用 MemoryDBMulti 區域建立叢集
<a name="multi-Region.cli.create"></a>

**建立多區域叢集**

```
aws memorydb create-multi-region-cluster \
	--multi-region-cluster-name-suffix my-multi-region-cluster \
	--node-type db.r7g.xlarge \
	--engine valkey \
	--region us-east-1
```

**在美國東部 （維吉尼亞北部） 區域建立區域叢集**

```
aws memorydb create-cluster \
	--cluster-name my-cluster \
	--multi-region-cluster-name my-multi-region-cluster \
	--node-type db.r7g.xlarge \
	--acl-name open-access \
	--region us-east-1 \
```

**在歐洲 （愛爾蘭） 區域建立區域叢集**

```
aws memorydb create-cluster \
	--cluster-name my-cluster \
	--multi-region-cluster-name my-multi-region-cluster \
	--node-type db.r7g.xlarge \
	--acl-name open-access \
	--region eu-west-1 \
```

**描述來自任何區域的多區域叢集**

```
aws memorydb describe-multi-region-cluster \
	--multi-region-cluster-name my-multi-region-cluster \
	--region eu-west-1
```

## 更新多區域叢集
<a name="multi-Region.cli.update"></a>

**修改節點類型**

```
aws memorydb update-multi-region-cluster \
	--multi-region-cluster-name my-multi-region-cluster \
	--node-type db.r7g.4xlarge \
	--region us-east-1
```

**修改碎片計數**

```
aws memorydb update-multi-region-cluster \
	--multi-region-cluster-name my-multi-region-cluster \
	--shard-configuration \
	ShardCount=3 \
	--update-strategy COORDINATED \
	--region us-east-1
```

## 擴展 MemoryDB 叢集
<a name="multi-Region.cli.scaling"></a>

首先，列出可以使用 `list-allowed-node-type-updates`命令向上或向下擴展的節點：

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

這將提供可以向上或向下擴展的節點清單。若要接著更新它們，您可以使用 `update-cluster`命令：

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

如需使用多區域擴展的詳細資訊，請參閱[使用 MemoryDB 多區域擴展](multi-Region.Scaling.md)。

## 在 MemoryDB 多區域中刪除叢集
<a name="multi-Region.cli.update"></a>

**刪除區域叢集**

```
aws memorydb delete-cluster \	
	--cluster-name my-cluster \
	--multi-region-cluster-name my-multi-region-cluster \
	--region us-east-1
```

**刪除多區域叢集**

```
aws memorydb delete-multi-region-cluster \
	--multi-region-cluster-name my-multi-region-cluster \
	--region us-east-1
```

# 監控 MemoryDB 多區域
<a name="multi-Region.monitoring"></a>

您可以使用 Amazon CloudWatch 來監控多區域叢集的行為和效能。MemoryDB 會發佈多區域叢集中每個區域叢集的`MultiRegionClusterReplicationLag`指標。

`MultiRegionClusterReplicationLag` 顯示從將更新寫入遠端多區域叢集多可用區域交易日誌到將更新寫入本機多區域區域叢集中主節點之間經過的時間。此指標以毫秒表示，會在碎片層級針對每個來源和目的地區域對發出。

`MultiRegionClusterReplicationLag` 在正常操作期間應該很穩定。的升高值`MultiRegionClusterReplicationLag`可能表示來自一個區域叢集的更新未及時傳播到其他區域叢集。隨著時間的推移，這可能會導致其他區域叢集*落後*，因為它們不再持續收到更新。

`MultiRegionClusterReplicationLag` 如果 AWS 區域變得隔離或降級，而且您在該區域中有區域叢集， 可能會增加。在這種情況下，您可以暫時將應用程式的讀取和寫入活動重新導向至其他運作狀態良好的 AWS 區域。

# 使用 MemoryDB 多區域擴展
<a name="multi-Region.Scaling"></a>

隨著叢集的需求變更，您可以變更 MemoryDB 叢集中的節點類型或碎片數量，以決定改善效能或降低成本。擴展 MemoryDB 多區域叢集會擴展其中的所有區域叢集。MemoryDB 多區域叢集支援線上重新分片。MemoryDB 多區域叢集不支援離線重新分片。

您用來決定重新擴展叢集的可能條件包括下列：
+ **記憶體壓力**

  如果區域叢集中的節點處於記憶體壓力下，您可以決定向外擴展或向上擴展，以便有更多資源來更好地存放資料並處理請求。

  您可以監控下列指標來判斷節點是否受到記憶體壓力：FreeableMemory、SwapUsage、BytesUsedForMemoryDB 和 MultiRegionClusterReplicationLag 
+ **CPU 或網路瓶頸**

  如果延遲/輸送量問題膨脹您的叢集，您可能需要向外擴展或向上擴展以解決問題。

  您可以透過監控下列指標來監控延遲和輸送量層級：`CPUUtilization`、`NetworkBytesIn`、` NetworkBytesOut`、`CurrConnections`、` NewConnections`、` and MultiRegionClusterReplicationLag`。
+ ** 您的叢集過度擴展**

  叢集目前的需求是，縮減或縮減規模不會影響效能並降低成本。

您可以監控叢集的使用，以判斷是否可以使用下列指標安全地縮減或縮減規模：FreeableMemory、SwapUsage、BytesUsedForMemoryDB、CPUUtilization、NetworkBytesIn、NetworkBytesOut、CurrConnections、NewConnections 和 MultiRegionClusterReplicationLag 

有兩種方式可以擴展您的 MemoryDB 多區域叢集：水平和垂直擴展。
+ 水平擴展可讓您透過新增或移除碎片，變更 MemoryDB 多區域叢集中的碎片數量。線上重新分片程序允許向內/向外擴展，同時區域叢集繼續處理傳入的請求。
+ 垂直 會變更節點類型，以調整 MemoryDB 多區域叢集的大小。線上垂直擴展允許在區域叢集繼續處理傳入請求時向上/向下擴展。

根據預設，擴展會使用「協同」更新策略。這表示所有區域叢集都會成功擴展，或沒有區域叢集會擴展。

向外擴展操作也支援「不協調」更新策略。這表示某些區域叢集可能會成功橫向擴展，而某些區域叢集則嘗試橫向擴展失敗。如果一個區域叢集向外擴展成功，則所有其他區域叢集會繼續重試向外擴展，直到其他每個向外擴展也成功為止。

如果所有區域叢集都無法向外擴展，多區域叢集會失敗「不協調」向外擴展。

**注意**  
當區域叢集在不同時間向外擴展時，「不協調」向外擴展可能會在區域叢集之間產生長時間的不平衡容量。它可能會導致 MultiRegionClusterReplicationLag 指標和區域叢集資料長時間分歧。

MemoryDB 多區域叢集區域叢集的複本節點數量可以有不同的組態，但區域叢集中的所有碎片都有相同的複本節點數量。

如果您要透過向內擴展或向下擴展來減少 MemoryDB 多區域叢集的大小和記憶體容量，請確保新組態有足夠的記憶體和可用 IPs 供資料使用、足夠的引擎額外負荷，以及區域叢集的 MultiRegionClusterReplicationLag 指標在幾秒或一分鐘範圍內。

您可以使用 AWS 管理主控台、 和 MemoryDB API 水平和垂直擴展 AWS CLI MemoryDB 多區域叢集。

# 支援和不支援的命令
<a name="multi-Region.SupportedCommands"></a>

**支援的命令**

**注意**  
SET 命令目前不支援 EX、PX、EXAT、PXAT 和 KEEPTTL 選項。
RESTORE 命令不支援將 TTL 設定為非零值。也不支援 ABSTTL、IDLETIME 和 FREQ 選項。


| 資料類型 | commands | 
| --- | --- | 
|  String  |  SET\$1、DECR、DECRBY、GET、GETRANGE、SUBSTR、GETDEL、GETSET、INCR、INCRBY、INCRBYFLOAT、MGET、MSET、MSETNX、SETNX、STRLEN、LCS  | 
|  雜湊  |  HINCRBY、HINCRBYFLOAT、HDEL、HSET、HMSET、HGET、HEXISTS、HLEN、HKEYS、HVALS、HGETALL、HMGET、HSTRLEN、HSETNX、HRANDFIELD、HSCAN  | 
|  設定  |  SADD、SREM、SISMEMBER、SMISMEMBER、SCARD、SMEMBERS、SRANDMEMBER、SSCAN、SUNION、SINTERCARD、SINTER、SDIFF、SPOP  | 
|  已排序集合  |  ZADD、HINSTERRBY、ZSCORE、ZMSCORE、ZCARD、ZRANK、ZRANGE、ZRANGEBYSCORE、ZRANGEBYLEX、ZREVRANGE、ZREVRANGEBYLEX、ZREVRANGEBYSCORE、ZREMRANGEBYLEX、ZREMRANGEBYSCORE、ZREMRANGEBYSRANK、ZUNION、ZINTER、ZINTERCARD、ZDIFF、ZLEXCOUNT、ZCOUNT、ZREM、ZMPOP、ZPOPMIN、ZPOPMAX、ZSCAN、ZRANDMEMBER  | 
|  一般  |  SCAN， DEL， UNLINK， DUMP， RESTORE\$1\$1， EXISTS， KEY， RANDOMKEY， TYPE  | 

**不支援的命令**

不支援命令的一般類別是不支援的資料類型 (Bitmaps、Hyperloglog、List、Geospatial 和 Stream)、TTL 相關命令、封鎖命令和函數相關命令。完整清單如下：


| 資料類型 | commands | 
| --- | --- | 
| String | 附加、GETEX、SETEX、SETRANGE | 
| 點陣圖 | BITCOUNT、BITFIELD、BITFIELD\$1RO、BITOP、BITPOS、GETBIT、SETBIT | 
| Hyperloglog | PFADD、PFCOUNT、PFDEBUG、PFMERGE、PFSELFTEST | 
| 清單 | BLMOVE、BLMPOP、BLPOP、BRPOP、BRPOPLPUSH、LINDEX、LINSERT、LLEN、LMOVE、LMPOP、LPOP、LPOS、 PUSH、LPUSHX、LRANGE、LREM、LSET、LTRIM、RPOP、RPOPLPUSH、RPUSH、RPUSHX | 
| 設定 | SMOVE、SUNIONSTORE、SDIFFSTORE、SINTERSTORE | 
| 已排序集合 | BZMPOP、BZPOPMAX、BZPOPMIN、ZDIFFSTORE、ZINTERSTORE、ZRANGESTORE、ZUNIONSTORE | 
| Geospatial (地理空間) | GEOADD、GEODIST、GEOHASH、GEOPOS、GEORADIUS、GEORADIUS\$1RO、GEORADIUSBYMEMBER、GEORADIUSBYMEMBER\$1RO、GEOSEARCH、GEOSEARCHSTORE | 
| 串流 | XACK、XADD、XAUTOCLAIM、XCLAIM、XDEL、XLEN、XPENDING、XRANGE、XREAD、XREADGROUP、XREVRANGE、XSETID、XTRIM、XGROUP、XINFO | 
| 一般 | COPY， FLUSHDB， FLUSHALL， MOVE， RENAME， RENAMENX， SORT， SORT\$1RO， SWAPDB， OBJECT， FUNCTION， FCALL， FCALL\$1RO， EXPIRE， EXPIREAT， EXPIRETIME， PERSIST， PEXPIRE， PEXPIREAT， PEXPIRETIME， PSETEX， PTTL， TTL | 