本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon DocumentDB 高可用性和複寫
您可以使用複本執行個體,在 Amazon DocumentDB (與 MongoDB 相容性) 中實現高可用性和讀取擴展。單一 Amazon DocumentDB 叢集可支援單一主要執行個體和最多 15 個複本執行個體。這些執行個體可以分佈在叢集區域內的可用區域之中。主要執行個體接受讀取和寫入流量,而複寫執行個體僅接受讀取請求。
叢集磁碟區是由叢集的多個資料複本組成。不過,叢集磁碟區中的資料會以單一邏輯磁碟區表示給主執行個體和叢集中的 Amazon DocumentDB 複本。複本執行個體是最終一致性 它們會透過最低複寫延遲 (通常在主要執行個體寫入更新後短於 100 毫秒) 來傳回查詢結果。複本延遲會根據資料庫變更率而有所不同。也就是,在資料庫發生大量寫入操作期間,您可能會發現複本延遲增加。
讀取擴展
Amazon DocumentDB 複本適用於讀取擴展,因為它們完全專用於叢集磁碟區上的讀取操作。寫入操作由主要執行個體管理。叢集中的所有執行個體將共用叢集磁碟區。因此,您不必為每個 Amazon DocumentDB 複本複本複寫和維護資料副本。
高可用性
建立 Amazon DocumentDB 叢集時,視子網路群組中的可用區域數目 (必須至少有兩個) 而定,Amazon DocumentDB 會在可用區域佈建執行個體。當您在叢集中建立執行個體時,Amazon DocumentDB 會自動將執行個體分配到子網路群組中的可用區域,以平衡叢集。這個動作還可防止所有執行個體位於相同的可用區域。
範例
為了說明這一點,請考慮一個範例,其中建立的叢集具有具有三個可用區域的子網路群組:AZ1AZ2、和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 叢集的可用區域應該位於不同的可用區域。
如需詳細資訊,請參閱下列內容:
全域叢集提供高可用性
如需跨多個高可用性 AWS 區域,您可以設定 Amazon DocumentDB 全域叢集。每個全域叢集跨越多個區域,從而實現低延遲的全域讀取,以及從中斷的 AWS 區域. Amazon DocumentDB 會自動處理從主要區域到每個次要區域的所有資料和更新的複寫作業。
新增 複本
叢集中新增的第一個執行個體即為主要執行個體。在第一個執行個體後新增的每個執行個體即為複寫執行個體。除了主要執行個體之外,叢集最多可以有 15 個複本執行個體。
使用建立叢集時 AWS Management Console,會同時自動建立主要執行個體。若要在您建立叢集和主要執行個體的同時建立複本,請選擇 Create replica in different zone (在不同區域中建立複本)。如需詳細資訊,請參閱 建立 Amazon DocumentDB 叢集 中的步驟 4.d。若要將更多複本新增至 Amazon DocumentDB 叢集,請參閱。將 Amazon DocumentDB 執行個體新增至叢集
使用建立叢集時,您必須明確建立主要執行個體和複本執行個體。 AWS CLI 如需詳細資訊,請參閱下列主題中的「使用 AWS CLI」一節:
複寫延遲
複寫延遲通常為 50 毫秒或更少。增加複本滯後的最常見原因是:
-
主要複本的高寫入速率會導致僅供讀取複本落後於主要複本。
-
長時間執行的查詢 (例如,大型連續掃描、彙總查詢) 和內送寫入複寫之間的爭用僅供讀取複本。
-
僅供讀取複本上的大量並行查詢。
若要減少複寫延遲,請嘗試下列疑難排解技巧:
-
如果您的寫入率高或CPU使用率高,建議您擴展叢集中的執行個體。
-
如果僅供讀取複本上有長時間執行的查詢,而且查詢的文件的更新頻繁,請考慮變更長時間執行的查詢,或針對主要/寫入複本執行查詢,以避免在僅供讀取複本上發生爭用。
-
如果僅供讀取複本上有大量並行查詢或只有高CPU使用率,則另一個選項是擴展僅供讀取複本的數目以分配工作負載。
-
由於複寫延遲是高寫入輸送量和長時間執行查詢的結果,因此建議您將 DBClusterReplicaLagMaximum CW 指標與慢速查詢記錄器和
WriteThroughput
/WriteIOPS
指標結合使用,以疑難排解複寫延遲。
一般而言,我們建議您的所有複本都使用相同的執行個體類型,以便叢集容錯移轉不會導致效能降低。
如果您選擇擴展和向外擴展 (例如,六個較小的執行個體與三個較大的執行個體),我們通常建議您嘗試在向外擴展之前先向上擴展 (較大的執行個體),因為每個資料庫執行個體都會獲得更大的緩衝區快取。
主動地,您應該設定複寫延遲警示,並將其閾值設定為一個值,您認為複本執行個體上的資料在開始影響應用程式功能之前可能落後 (或「過時」) 的上限。一般而言,我們建議由於暫時性工作負載,在發出警報之前,超過數個資料點的複寫延遲閾值。
注意
此外,我們建議您針對超過 10 秒的複寫延遲設定另一個警示。如果您超過多個資料點的這個臨界值,建議您擴展執行個體或降低主要執行個體的寫入輸送量。