Azure DocumentDB 的可靠性

Azure DocumentDB 是一個完全託管的 NoSQL 資料庫服務,用於現代應用程式開發,並具備 MongoDB 相容性。 Azure DocumentDB 支援高可用性(HA)配置,具備同步複製的熱備援副本及區域冗餘。 它也提供位於另一個 Azure 區域的選用讀取複本,以及具時間點還原保留功能的自動備份,以防範意外資料遺失。

當您使用 Azure 時, 可靠性是共同的責任。 Microsoft 提供一系列功能以支援韌性與復原。 您有責任瞭解這些功能在您使用的所有服務中如何運作,並選取符合業務目標和正常運作時間目標所需的功能。

本文說明如何讓 Azure DocumentDB 具備彈性,應對各種潛在的中斷與問題,包括暫時性故障、可用性區域中斷、區域中斷及服務維護。 它也描述備份行為,並提供有關 HA 與跨區域複製的關鍵資訊。

可靠性的生產部署建議

欲了解提升叢集可靠性的建議清單,請參閱 Azure DocumentDB 中高可用性(HA)與跨區域複製的最佳實務。

可靠性架構概觀

本節說明服務運作中從可靠性角度來看最為重要的部分。 本節介紹邏輯架構,包含你部署和使用的部分資源與功能。 它還討論了物理架構,其中提供了有關服務如何在幕後工作的詳細信息。

邏輯架構

你部署的主要資源是 Azure DocumentDB 叢集。 每個叢集選擇運算層級並配置儲存空間。 你所選的層級決定了高可用性(HA)等可靠性特性的可用能力,也會影響你如何規劃韌性情境下的容量。

應用程式透過 連接字串 和端點連接到叢集。 Azure DocumentDB 提供用於讀寫操作的連線端點,並在設定後提供讀取副本叢集的端點。 這些端點讓你的應用程式能持續使用穩定的連線模式,同時服務在幕後管理故障轉移行為。

在每個叢集內,你的資料被組織為 資料庫、 收藏和 文件。 此 MongoDB 相容的資料模型是工作負載層級設計決策的基礎,如分片策略、讀寫模式,以及備份與還原範圍。

實體架構

Azure DocumentDB 會在 分片 上執行您的叢集,而這些分片代表執行該服務的節點(虛擬機器)。 你可以部署一個分片,或擴展到多個分片。 部署多個分片能提升擴展容量,但本身並不能提供 HA。

啟用 HA 時,Azure DocumentDB 會配置一組匹配的備用分片。 每個主要分片都有一個備用分片。 該服務會在每對主備援對間同步複製資料,若主分片失效則會升級備用分片。 欲了解更多關於 HA 的資訊,請參閱 Azure DocumentDB 中的高可用性。

Azure DocumentDB 使用 Azure 儲存體 來確保分區的持久性。 若 HA 被停用,每個分片會使用本地冗餘儲存(LRS)。 LRS 維護三份資料副本,但對於失去可用區域的韌性不足。 關於LRS耐久性的詳細資訊,請參見 冗餘選項摘要。

欲了解更多資訊,請參閱 Azure DocumentDB 中的可用性與災難復原(DR):幕後。

對瞬態故障的彈性

暫時性錯誤是元件中的短暫間歇性失敗。 它們經常出現在雲端等分散式環境中,而且是作業的一般部分。 暫時性錯誤會在短時間內自行修正。 請務必確保您的應用程式能妥善處理暫時性錯誤,通常透過重試受影響的請求來進行。

所有雲端託管應用程式在與任何雲端託管的 API、資料庫及其他元件通訊時,都應遵循 Azure 暫態故障處理指引。 如需相關資訊,請參閱處理瞬態故障的建議。

Azure DocumentDB 與 MongoDB 協定相容,因此應用程式通常透過 MongoDB 驅動程式來連接。 你負責設定應用程式的驅動重試設定,以處理暫時性故障,特別是連線中斷和故障轉移事件中的短寫入中斷。 請遵循以下準則:

  • 使用支援自動重試處理暫態連線失敗的 MongoDB 驅動程式。

  • 設定重試時採用指數退縮,並限制重試次數。

  • 如果可能,請將寫入作業設計為具冪等性,如此一來,重試這些作業也是安全的。 關於冪等性的一般實作指引,請參見 冪等消費者模式。

對可用性區域故障的抵抗力

可用性區域 是 Azure 區域內物理上獨立的資料中心群組。 當某個區域發生故障時,服務可以切換至其他剩餘的區域。

若要在 Azure DocumentDB 中使用可用性區域支援,請啟用高可用性(HA)。 當你在支援可用性區域的區域啟用 HA 時,叢集會變成區域冗餘,因為 Azure DocumentDB 會將備用分片放在與主分片不同的可用區。 除非主要分片故障,否則備用分片不會收到用戶端要求。

如果你停用 HA,Azure DocumentDB 不會把待命分片放在其他可用區,所以可用性區失效可能會讓你的叢集無法使用。

區域冗餘的 Azure DocumentDB 叢集圖示,主分片與備用分片分別位於不同可用性區域。

圖中顯示一個 Azure DocumentDB 叢集,分布於三個可用區域。 兩個主要實體分片位於可用區 1,對應的待命實體分片則位於可用區 2。 每個主分片與待命分片之間的箭頭顯示同步複製。 此範例中,可用區 3 不含分片。

要求

  • 區域支援:若要使用 Azure DocumentDB 的可用性區域,請選擇同時支援 Azure DocumentDB 與可用性區域的區域。 檢查 各區域可取得的產品 ,並與 支援供應區域的區域做比較。

  • 高可用性: 你必須在叢集上啟用 HA。 HA 要求叢集必須使用 M30(或更高階)的運算層。

Considerations

雖然部分 Azure DocumentDB API 包含對同區部署模式的參考,但 Azure DocumentDB 不支援同區 HA 部署。 該服務支援區域冗餘的 HA 部署。

跨區域分佈的執行個體

Microsoft 為叢集選擇了兩個可用性區域。 在區域冗餘的 HA 部署中,Azure DocumentDB 會將所有主要分片放在一個區域,所有備用分片放在另一個區域。

Cost

啟用 HA 後,Azure DocumentDB 會為每個主要分片配置備用分片,這會增加叢集的運算與儲存成本。 在支援可用性區域的區域,HA 也會讓叢集區域變得冗餘。 在某些部署模式下,Azure DocumentDB 預設啟用 HA。 對於生產工作負載,請保持 HA 啟用。 對於開發和測試工作負載,你可以停用 HA 來降低成本。 價格詳情請參見 Azure DocumentDB 定價。

設定可用性區域支援

  • 建立新的區域冗餘 Azure DocumentDB 叢集:當你在支援可用性區域的區域建立叢集時,啟用 HA 讓叢集區域冗餘。 詳細步驟請參見快速入門:透過 Azure 入口建立 Azure DocumentDB 叢集。

  • 在現有的 Azure DocumentDB 叢集上啟用區域冗餘:你可以在現有叢集上啟用 HA。 Azure DocumentDB 叢集啟用或關閉高可用性時,資料庫不會有停機。 詳細步驟請參見擴展 Azure DocumentDB 叢集。

所有區域都狀況良好時的行為

本節說明在支援可用性區域且所有區域均運作中,為 HA 配置 Azure DocumentDB 叢集時,會遇到什麼情況。

  • 跨區作業: 主要分片負責所有客戶端的請求。 位於不同可用區域中的待命分片不會接收用戶端請求,除非主要分片發生故障。

  • 跨區域資料複寫: 主分片與備用分片之間的複製是同步的。 寫入會先在主要與待命分片上都完成持久化,服務才會回傳回應。

區域失敗期間的行為

本節說明當你在支援可用性區域的區域中為 HA 配置 Azure DocumentDB 叢集時,當某個區域發生故障時,會遇到的情況。

  • 偵測與回應:Microsoft 會監控分片健康狀況,並代為處理偵測與故障轉移操作。 若主分片因區域故障而無法使用,Azure DocumentDB 會自動升遷備用分片,並透過建立新的備用分片重建冗餘。

  • 通知: Microsoft 不會在區域關閉時自動通知您。 不過,你可以使用 Azure 服務健康狀態 來了解服務整體健康狀況,包括任何區域故障,並且可以設定 Service Health 警示來通知你問題。

  • 作用中的要求:在容錯移轉前尚未受到認可的進行中要求可能會失敗,且必須由用戶端重試。 如果你的應用程式處理 暫時性故障,這些重試通常會自動完成。

  • 預期資料遺失:Azure DocumentDB 會在主分片與備用分片間同步複製資料,因此不會有資料遺失。

  • 預期的停機時間: 讀取操作不預期會有停機時間。 在進行寫入作業時,故障轉移完成前可能會發生短暫中斷。 如果您的應用程式正確地重試 暫時性故障,這通常會表現為短暫的效能變慢。

  • 重新劃分:連接字串 不會改變,所以客戶端會繼續使用相同的端點。 該服務會自動將流量重新導向至已提升為主用的待命分片,並重建新的待命分片。

區域復原

當可用性區域恢復時,Azure DocumentDB 會自動恢復叢集所使用的所有區域的正常操作。

測試區域失敗

Azure DocumentDB 平台負責管理區域冗餘叢集的流量路由、故障轉移與區域恢復。 你不需要啟動或驗證可用性區故障流程。

對區域範圍故障的復原能力

你可以將每個 Azure DocumentDB 叢集部署在單一 Azure 區域內。 為支援區域故障韌性,建議在另一個區域新增一個副本叢集來配置跨區域複製。

跨區域複製

Azure DocumentDB 支援透過副本叢集進行跨區域複製。 副本叢集會以獨立叢集的形式出現在您的資源群組中。 你可以使用這個複本叢集來進行災難復原和讀取擴充。 Azure DocumentDB 會自動且非同步地將資料變更從主叢集複製到複本叢集。

從主要 Azure DocumentDB 叢集到另一個區域的讀取副本叢集的非同步複製圖。

圖表顯示某個應用程式透過讀寫連接字串連線到主要區域中的主要叢集。 虛線箭頭表示從主叢集到次要區域中的讀取副本叢集的非同步複寫。

若主區域失效,副本叢集可升級為讀寫叢集。 全域讀寫連線字串會自動更新為指向提升後的叢集。

主要區域失效後,已升級的 Azure DocumentDB 副本處理流量的示意圖。

圖表顯示,應用程式在完成提升後,透過讀寫連線字串連線到次要區域中的複本叢集。 故障符號標示主要叢集、主要區域及先前非同步複製路徑。

本節總結跨區域複製的可靠性考量。 欲了解更多資訊,請參閱「管理 Azure DocumentDB 叢集上的跨區域及同區域複製,以及 Azure DocumentDB 中的跨區域與同區域複製最佳實務」。

區域間的故障切換

Azure DocumentDB 支援三種推廣模式:

  • 強制升級:立即將複本叢集升級為可接受寫入作業,並透過全域讀寫連線字串重新導向傳入的寫入流量。 此模式可減少停機時間,但可能導致資料遺失,因為會遺失未複製的寫入。

  • 服務管理故障轉移: 你可以設定叢集使用服務管理故障轉移。 Microsoft 會監控你的主要叢集,如果主要叢集不健康,會自動觸發強制升遷。

  • 優雅升級:可防止資料遺失,但在複寫尚未複寫的寫入時,需要一些停機時間。 優雅升級需要兩個叢集都處於良好狀態,因此您無法在區域服務中斷期間執行此作業。

欲了解更多資訊,請參閱 Azure DocumentDB 中的跨區域故障轉移模式。

要求

  • 區域支援:你可以在所有支援 Azure DocumentDB 的 Azure 區域中使用跨區域複製。

  • 運算層級: 跨區域複製需要 M30 或更高等級的運算等級。

Considerations

  • 網路存取: 複本叢集不會繼承主叢集的網路設定。 在副本叢集上分別設定防火牆規則或私有端點,並在故障轉移前測試連線狀況。 欲了解更多資訊,請參閱 連續寫入、叢集副本的讀取操作及連線字串。

  • 功能支援: 副本叢集不支援點即時還原(PITR)或區域內 HA。

    如果主要叢集已啟用 HA,您需負責在升級為主要叢集的叢集上重新啟用 HA。

    欲了解更多資訊,請參閱 Azure DocumentDB 服務限制與配額。

Cost

跨區域複製會增加複本叢集的運算與儲存資源成本。 跨區域資料傳輸費用亦適用。 價格詳情請參見 Azure DocumentDB 定價與頻寬定價。

設定多區域支援

  • 建立一個複本叢集: 要啟用跨區複製,請從你的主叢集建立一個副本叢集。 你可以在建立主叢集時或之後建立複本叢集。 相關步驟請參見「管理 Azure DocumentDB 叢集上的跨區域及同一區域複製」。

  • 設定自動故障轉移:如果你想讓 Azure 在主要區域中斷時自動升遷副本,請啟用服務管理故障轉移。 欲了解更多資訊,請參閱 啟用服務管理故障轉移。

    Note

    Microsoft 通常僅在極端事件中觸發服務管理故障轉移,例如整個區域中斷或大量受影響客戶。 在觸發故障轉移之前,可能會有延遲。 若您需要快速恢復可用性,我們建議您透過由客戶啟動的強制升級來管理容錯移轉流程。

當所有區域都正常時的行為

本節說明當你配置 Azure DocumentDB 叢集進行跨區域複製且所有區域均可運作時,會遇到什麼情況。

  • 跨區域作業: 主要叢集負責所有讀寫流量。 複本叢集提供唯讀流量,你可以用來擴展讀取工作負載,或將讀取流量維持在特定區域內。 全域讀寫連線字串一律指向目前可寫入的叢集,因此用戶端不必追蹤哪個區域為主要區域。

  • 跨區域資料複寫: 主叢集與複本叢集之間的複製是非同步的。 寫入會在主叢集上提交並確認給客戶端,然後再複製到副本叢集。 此方法可防止跨區域網路延遲影響寫入效能。 由於複製是非同步的,主叢集與副本叢集之間預期會有一些複製延遲,任何未複製的寫入在強制故障轉移時可能會遺失。

區域失敗期間的行為

本節說明當您設定 Azure DocumentDB 叢集進行跨區域複製,且主叢集區域發生故障時,會發生什麼情況。

  • 偵測與回應: 偵測故障並回應的責任取決於叢集所使用的故障轉移類型。

    • 若啟用服務管理故障轉移,Azure DocumentDB 會偵測故障並自動強制升級副本叢集。
    • 如果未啟用由服務管理的容錯移轉,您就必須負責偵測服務中斷並觸發強制升級。

    欲了解更多資訊,請參閱 Azure DocumentDB 中的跨區域故障轉移模式。

  • Notification: Microsoft 不會自動通知你區域故障。 不過,你可以使用 Azure 服務健康狀態 來了解整體服務的健康狀況,包括任何區域故障,並且可以設定 服務健康警示 來通知你問題。

  • 目前的請求: 任何對失敗主要區域的主動請求都可能失敗。 容錯移轉完成後,應用程式應重新連線並對已升級的叢集重試。

  • 預期資料遺失: 區域故障期間的故障轉移是非計畫性的,因此未複製的寫入可能會遺失,因為複寫是非同步的。

  • 預期的停機時間: 整體停機時間取決於偵測時間、故障切換模式及用戶端重新連線行為。

    對於客戶主動發起的強制促銷,總停機時間包括偵測故障並啟動回應流程所需的時間,以及完成促銷的時間。

    一旦促銷啟動,通常會在幾分鐘內完成。

  • 重新導向: 全域讀寫連線字串在完成升級後,會自動指向升級後的叢集。 使用叢集特定連線字串的應用程式可能需要設定更新,以便將流量導向健康叢集。

區域復原

Azure DocumentDB 在恢復後不會自動回傳到原始區域。 要將寫入操作返回原始區域,請在重新建立偏好拓撲後再進行一次升遷。 使用優雅升級,以避免在容錯回復期間發生資料遺失。 優雅升級需要短暫的停機時間,您可以在自己選擇的時間執行,例如維護期間。 如需詳細資訊,請參閱觸發優雅升級。

區域故障測試

定期測試你的災難復原流程,在受控環境中推廣副本叢集。

  • 使用強制升級來模擬服務中斷情況下的行為。 此測試可能導致資料遺失,建議在非生產環境下執行。 更多資訊請參見 觸發強制晉升。

  • 想要避免資料遺失時,請在計畫性切換演練中使用 graceful promotion。 如需詳細資訊,請參閱觸發優雅升級。

備份與還原

針對大部分的解決方案,您不應該只依賴備份。 請改用本指南中所述的其他功能來支持復原需求。 不過,備份可防範其他方法未發生的一些風險。 欲了解更多資訊,請參閱冗餘、複寫與備份是什麼?

Azure DocumentDB 會自動進行持續備份,以啟用點即時復原(PITR)。 這些自動備份能幫助你在不小心刪除或修改資料後恢復原始版本。 Azure DocumentDB 在不影響資料庫操作效能或可用性的情況下進行備份。

Azure DocumentDB 會將備份與來源資料分開儲存。 在支援可用性區域的區域,服務會將備份快照儲存在三個可用性區域。 Azure DocumentDB 管理這些備份,你無法匯出它們。 服務對活躍叢集保留 35 天備份,對活躍突發層(M10、M20、M25)叢集保留 7 天,對已刪除叢集保留 7 天。

你可以把備份還原到新的叢集。 完成後,你需要執行一系列還原後的任務。

欲了解更多資訊,請參閱 Azure DocumentDB 中的「還原叢集」。

服務維護的韌性

Microsoft 定期執行服務更新及其他維護。 Azure 平台自動處理這些活動,確保維護過程對您來說無縫且透明。 除非您收到透過 Azure 服務健康狀態 計畫維護 的通知,否則維護期間將不會有停機。

計畫性維護事件仍可能對客戶操作造成短暫的短暫故障。 你的應用程式應使用 暫態故障的復原能力 中的重試指引來處理這些事件。

服務等級協定

Azure 服務的服務層級協議(SLA)描述了每項服務的預期可用性,以及您的解決方案必須符合的條件,以達成該可用性預期。 欲了解更多資訊,請參閱線上服務的服務等級協議。

對於 Azure DocumentDB,可用性 SLA 僅在叢集啟用高可用性(HA)時適用。 以下配置適用不同的可用性SLA:

  • 使用跨區域複寫來跨多個 Azure 區域的已啟用 HA 叢集。

  • 單一區域內啟用 HA 的叢集。