共用方式為


Azure 受控 Redis 的故障轉移和修補 (預覽)

若要建置復原且成功的用戶端應用程式,請務必瞭解 Azure 受控 Redis (預覽)服務中的故障轉移。 容錯移轉可以是計劃性管理作業的一環,或者非計劃性硬體或網路失敗導致容錯移轉。 當管理服務修補 Azure 受控 Redis 二進位檔時,通常會使用快取故障轉移。

在本文中,您會找到以下資訊:

  • 容錯移轉是什麼?
  • 修補期間發生容錯移轉的原因。
  • 建置復原性用戶端應用程式的方式。

容錯移轉是什麼?

讓我們從 Azure 受控 Redis 的故障轉移概觀開始。

快取結構的快速摘要

此圖顯示 Azure 受控 Redis 供應項目的架構。

快取是由包含個別和私人 IP 位址的多個虛擬機器建構而成。 每個虛擬機 (或 “node”) 會平行執行多個 Redis 伺服器進程(稱為「分區」)。 多個分區可讓每個虛擬機上的 vCPU 更有效率地使用率,以及更高的效能。 並非所有的主要 Redis 分區都位於相同的 VM/節點上。 相反地,主要和複本分區會分散到這兩個節點。 因為主要分區使用比復本分區更多的 CPU 資源,因此此方法可讓更多主要分區平行執行。 每個節點都有 高效能的 Proxy 程式來管理分區、處理連線管理,以及觸發自我修復。 即使一個分區關閉,其他分區仍可使用。

如需 Azure 受控 Redis 架構的深入詳細數據,請參閱 這裡

容錯移轉的說明

當一或多個複本分區升級為成為主要分區,而舊的主要分區關閉現有的連線時,就會發生故障轉移。 故障轉移可能是計劃性或非計劃性。

「計劃性容錯移轉」會在兩個不同的時間執行:

  • 系統更新,例如 Redis 修補或 OS 升級。
  • 管理作業,例如調整或重新啟動。

節點會收到更新的預先通知,所以可以合作方式交換角色,並快速更新變更的負載平衡器。 計劃性容錯移轉通常會在 1 秒內完成。

非計劃性故障轉移可能會因為硬體故障、網路失敗,或叢集中一或多個節點的其他非預期中斷而發生。 其餘節點上的複本分區(s)會自行升階為主要複本,以維護可用性,但程式需要較長的時間。 復本分區必須先偵測其主要分區無法使用,才能啟動故障轉移程式。 復本分區也必須確認此非計劃性失敗不是暫時性或本機的,以避免不必要的故障轉移。 此偵測延遲代表非計劃性容錯移轉通常會在 10 到 15 秒內完成。

為什麼發生修補?

Azure 受控 Redis 服務會定期使用最新的平臺功能和修正來更新快取。 若要修補快取,服務會遵循下列步驟:

  1. 服務會建立新的最新 VM,以取代正在修補的所有 VM。
  2. 然後,它會將其中一個新的 VM 升級為叢集領導者。
  3. 一個接一個地,所有要修補的節點都會從叢集中移除。 這些 VM 上的任何分區都會降級並移轉至其中一個新的 VM。
  4. 最後,所有已取代的 VM 都會遭到刪除。

叢集快取的每個分區會個別修補,而且不會關閉與另一個分區的連線。

相同資源群組和區域中的多個快取也是一次修補一個分區。 位於不同資源群組或不同區域時,快取可能會同時修補。

由於完整數據同步處理會在程式重複之前發生,因此快取不太可能發生數據遺失。 您可以匯出資料並啟用持續性,進一步防止資料遺失。

其他快取負載

每當發生故障轉移時,快取就必須將數據從一個節點複寫到另一個節點。 此複寫會導致伺服器記憶體和 CPU 中的負載增加。 如果快取執行個體已是高負載,用戶端應用程式可能遇到延遲增加。 在極端案例中,用戶端應用程式可能收到逾時例外狀況。

容錯移轉如何影響我的用戶端應用程式?

用戶端應用程式可能會從其 Azure 受控 Redis 實例收到一些錯誤。 用戶端應用程式顯示的錯誤數目,取決於容錯移轉時該連線上擱置的作業數目。 透過關閉其連線的節點所路由的任何連線,都會看到錯誤。

連線中斷時,很多用戶端程式庫可能擲回不同類型的錯誤,包括:

  • 逾時例外狀況
  • 連線例外狀況
  • 通訊端例外狀況

例外狀況的數目和類型取決於快取關閉連線時,要求在程式碼路徑中的位置。 例如,發生容錯移轉時,傳送要求但尚未收到回應的作業可能會發生逾時例外狀況。 已關閉連線物件上的新要求會收到連線例外狀況,直到成功重新連線為止。

大部分的用戶端程式庫會嘗試重新連線快取 (如果程式庫已設定這麼做)。 但未預期的 Bug 有時會將程式庫物件置於無法復原的狀態。 如果錯誤持續超過預先設定的時間,建議重新建立連線物件。 在 Microsoft.NET 和其他物件導向語言中,使用 ForceReconnect 模式可以重新建立連線,而不重新啟動應用程式。

維護期間包含哪些更新?

維護包含下列更新:

  • Redis 伺服器更新:Redis 伺服器二進位檔的任何更新或修補程式。
  • 虛擬機 (VM) 更新:裝載 Redis 服務之虛擬機的任何更新。 VM 更新包括修補裝載環境中的軟體元件,以升級網路元件或解除委任。

維護是否出現在修補前 Azure 入口網站的服務健康情況中?

否,維護不會出現在入口網站或任何其他位置的服務健康情況之下

用戶端網路設定變更

某些用戶端網路組態變更可能會觸發 沒有可用的 連線錯誤。 這些變更可能包括︰

  • 在預備和生產位置間交換用戶端應用程式的虛擬 IP 位址。
  • 調整應用程式執行個體的大小或數目。

這類變更可能會導致通常持續不到一分鐘的連線問題。 用戶端應用程式可能會失去與其他外部網路資源的連線,但也會失去與 Azure 受控 Redis 服務的連線。

内建復原性

您無法完全避免容錯移轉。 所以請撰寫用戶端應用程式,增強連線中斷和失敗要求的復原性。 大部分的用戶端程式庫會自動重新連線快取端點,但少數會嘗試重試失敗的要求。 根據應用程式案例,使用重試邏輯與輪詢可能很合理。

如何設定應用程式的復原性?

請參閱以下設計模式來建置復原性用戶端,尤其是斷路器和重試模式: