

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

# Amazon DocumentDB 高可用性和複寫
<a name="replication"></a>

您可以使用複本執行個體，在 Amazon DocumentDB 中實現高可用性和讀取擴展 （與 MongoDB 相容）。單一 Amazon DocumentDB 叢集支援單一主要執行個體和最多 15 個複本執行個體。這些執行個體可以分佈在叢集區域內的可用區域之中。主要執行個體接受讀取和寫入流量，而複寫執行個體僅接受讀取請求。

叢集磁碟區是由叢集的多個資料複本組成。不過，叢集磁碟區中的資料會以單一邏輯磁碟區表示，以做為主要執行個體和叢集中的 Amazon DocumentDB 複本。複本執行個體是最終一致性 它們會透過最低複寫延遲 (通常在主要執行個體寫入更新後短於 100 毫秒) 來傳回查詢結果。複本延遲會根據資料庫變更率而有所不同。也就是，在資料庫發生大量寫入操作期間，您可能會發現複本延遲增加。

## 讀取擴展
<a name="replication.read-scaling"></a>

Amazon DocumentDB 複本非常適合用於讀取擴展，因為它們完全專用於叢集磁碟區上的讀取操作。寫入操作由主要執行個體管理。叢集中的所有執行個體將共用叢集磁碟區。因此，您不需要複寫和維護每個 Amazon DocumentDB 複本的資料副本。

## 高可用性
<a name="replication.high-availability"></a>

當您建立 Amazon DocumentDB 叢集時，取決於子網路群組中的可用區域數量 （必須至少有兩個），Amazon DocumentDB 會在可用區域中佈建執行個體。當您在叢集中建立執行個體時，Amazon DocumentDB 會自動將執行個體分散到子網路群組中的可用區域，以平衡叢集。這個動作還可防止所有執行個體位於相同的可用區域。

**範例**  
為說明要點，假設我們建立含有一個子網路群組，且該子網路群組有三個可用區域 (*AZ1*、*AZ2* 和 *AZ3*) 的叢集。

當叢集的第一個執行個體建立完成後，其為主執行個體，且位於其中一個可用區域。在此範例中，其位於 *AZ1*。建立的第二個執行個體為複本執行個體，其位於另外兩個可用區域其中之一，假設為 *AZ2*。建立的第三個執行個體為複本執行個體，其位於剩餘的可用區域，即 *AZ3*。如果您建立多個執行個體，它們會分佈在可用區域之中，讓您可在叢集中達到平衡。

如果故障發生在主執行個體 (AZ1)，將觸發容錯移轉，且其中一個現有的複本會提升至主要執行個體。當舊的主要執行個體恢復時，它會在佈建 (AZ1) 的相同可用區域中成為複本。當您佈建三執行個體叢集時，Amazon DocumentDB 會繼續保留該三執行個體叢集。Amazon DocumentDB 會自動處理執行個體故障的偵測、容錯移轉和復原，無需任何手動介入。

當 Amazon DocumentDB 執行容錯移轉並復原執行個體時，復原的執行個體會保留在原始佈建的可用區域中。不過，執行個體角色可能從主要變更為複本。這樣做可防止一連串的容錯移轉導致所有執行個體出現在同一個可用區域內。

您可以指定 Amazon DocumentDB 複本做為容錯移轉目標。也就是說，如果主要執行個體失敗，則從層指定的 Amazon DocumentDB 複本或複本會提升為主要執行個體。在對主要執行個體提出的讀取和寫入請求由於例外狀況而失敗的期間，會發生短暫的中斷。如果您的 Amazon DocumentDB 叢集不包含任何 Amazon DocumentDB 複本，當主要執行個體失敗時，會重新建立。提升 Amazon DocumentDB 複本比重新建立主要執行個體快得多。

對於高可用性案例，我們建議您建立一或多個 Amazon DocumentDB 複本。這些複本應與主要執行個體相同，且位於 Amazon DocumentDB 叢集的不同可用區域中。

如需詳細資訊，請參閱下列內容：
+ [了解 Amazon DocumentDB 叢集容錯能力](db-cluster-fault-tolerance.md)
+ [Amazon DocumentDB 容錯移轉](failover.md)
  + [控制容錯移轉目標](failover.md#failover-target_control)

### 全球叢集的高可用性
<a name="replication.high-availability.global-clusters"></a>

若要在多個叢集之間實現高可用性 AWS 區域，您可以設定 [Amazon DocumentDB 全域叢集](https://docs.aws.amazon.com/documentdb/latest/developerguide/global-clusters.html)。每個全域叢集橫跨多個區域，可實現低延遲的全域讀取，並從 中斷中復原災難 AWS 區域。Amazon DocumentDB 會自動處理從主要區域複寫所有資料和更新到每個次要區域。

## 新增 複本
<a name="replication.adding-replicas"></a>

叢集中新增的第一個執行個體即為主要執行個體。在第一個執行個體後新增的每個執行個體即為複寫執行個體。除了主要執行個體之外，叢集最多可以有 15 個複本執行個體。

當您使用 建立叢集時 AWS 管理主控台，會自動同時建立主要執行個體。若要在您建立叢集和主要執行個體的同時建立複本，請選擇 **Create replica in different zone (在不同區域中建立複本)**。如需詳細資訊，請參閱 [建立 Amazon DocumentDB 叢集](db-cluster-create.md) 中的步驟 4.d。若要將更多複本新增至 Amazon DocumentDB 叢集，請參閱 [將 Amazon DocumentDB 執行個體新增至叢集](db-instance-add.md)。

使用 AWS CLI 建立叢集時，您必須明確建立主要執行個體和複本執行個體。如需詳細資訊，請參閱下列主題中的「使用 AWS CLI」一節：
+ [建立 Amazon DocumentDB 叢集](db-cluster-create.md)
+ [將 Amazon DocumentDB 執行個體新增至叢集](db-instance-add.md)

## 複寫延遲
<a name="troubleshooting.replication-lag"></a>

複寫延遲通常為 50 毫秒或更短。複本延遲增加的最常見原因是：
+ 主要 上的高寫入速率，會導致僅供讀取複本落後主要複本。
+ 長時間執行查詢 （例如，大型循序掃描、彙總查詢） 和傳入寫入複寫之間的僅供讀取複本上的爭用。
+ 僅供讀取複本上非常大量的並行查詢。

若要將複寫延遲降至最低，請嘗試下列疑難排解技巧：
+ 如果您有高寫入率或高 CPU 使用率，建議您擴展叢集中的執行個體。
+ 如果您的僅供讀取複本上有長時間執行的查詢，而且非常頻繁地更新正在查詢的文件，請考慮變更長時間執行的查詢，或針對主要/寫入複本執行查詢，以避免僅供讀取複本發生爭用。
+ 如果僅供讀取複本上有非常大量的並行查詢或高 CPU 使用率，則另一個選項是擴展讀取複本數量以分散工作負載。
+ 由於複寫延遲是高寫入輸送量和長時間執行查詢的結果，我們建議您使用 DBClusterReplicaLagMaximum CW 指標搭配慢查詢記錄器和 `WriteThroughput`/`WriteIOPS` 指標來疑難排解複寫延遲。

一般而言，我們建議所有複本都是相同的執行個體類型，因此叢集容錯移轉不會導致效能降低。

如果您選擇向上擴展和向外擴展 （例如，6 個較小的執行個體與三個較大的執行個體），通常建議您先嘗試向上擴展 （較大的執行個體），然後再向外擴展，因為每個資料庫執行個體都會獲得較大的緩衝快取。

主動設定複寫延遲警示，並將其閾值設定為您認為在複本執行個體上資料開始影響應用程式功能之前落後 （或過時） 多長時間的上限值。一般而言，由於暫時性工作負載，我們建議在發出警示之前超過數個資料點的複寫延遲閾值。

**注意**  
此外，我們建議您為超過 10 秒的複寫延遲設定另一個警示。如果您針對多個資料點超過此閾值，我們建議您擴展執行個體或降低主要執行個體的寫入輸送量。