Azure 事件中樞 - 異地災害復原

許多企業必須能夠在資料處理資源的災難性中斷下恢復,在某些情況下,這甚至是產業法規的要求。

Azure 事件中樞已經將個別機器、甚至是整個機架的重大失敗風險,分散到橫跨資料中心內多個失敗網域的各個叢集中。 其會實作透明的失敗偵測和容錯移轉機制,讓服務能在發生這類失敗時,繼續在保證的服務等級內運作,而且通常不會感覺到有發生中斷。 如果您建立已啟用可用性區域的事件中樞命名空間,您可進一步降低中斷的風險並啟用高可用性。 使用可用性區域,中斷風險會進一步分散到三個位於不同實體位置的設備,而且服務會保留足夠的容量,立即應付徹底失去整個設備的重大事件。

完全作用中 Azure 事件中樞叢集模型加上可用性區域支援,能夠在硬體嚴重故障,甚至災難性損失整個資料中心的設備下恢復。 然而,還是可能有大規模實體損毀的嚴重情況,甚至連這些措施也難以防範。

事件中樞異地災害復原功能旨在更輕鬆從如此重大災害中復原,並永久放棄失敗的 Azure 區域,而不需要變更應用程式設定。 放棄 Azure 區域通常牽涉數個服務,此功能旨在協助保留複合應用程式設定的完整性。

異地災害復原功能確保命名空間的整個設定 (事件中樞、取用者群組和設定),在配對時持續從主要命名空間複寫至次要命名空間,還可讓您隨時起始僅此一次從主要命名空間容錯移轉至次要命名空間。 容錯移轉將已選擇的命名空間別名重新指向次要命名空間,然後中斷配對。 容錯移轉一旦起始,幾乎立即完成。

重要

  • 此功能支援以相同設定立即繼續作業,但不複寫事件資料。 除非災害導致損失所有區域,否則容錯移轉之後,即可復原主要事件中樞保留的事件資料,而且一旦恢復存取,即可從該處取得歷史事件。 若要在主動/主動設定中複寫事件資料和操作對應的命名空間,以應付中斷和災害,請勿依賴此異地災害復原功能集,而是遵循複寫指導
  • 對主要命名空間中實體的 Microsoft Entra 角色型存取控制 (RBAC) 指派,不會複寫至次要命名空間。 在次要命名空間中手動建立角色指派,以安全存取這些實體。

中斷與災害

請務必注意「中斷」和「災害」之間的差異。「中斷」是暫時無法使用 Azure 事件中樞,而且會影響服務的某些元件,例如訊息存放區,或甚至整個資料中心。 不過,修正問題之後,事件中樞就可再次使用。 中斷通常不會導致訊息或其他資料遺失。 這類中斷的範例可能是資料中心停電。 某些中斷只是因為暫時性或網路問題而造成的短暫連線中斷。

「災害」定義為永久或較長期遺失事件中樞叢集、Azure 區域或資料中心。 區域或資料中心不一定能再次使用,也可能會關閉數小時或數天。 這類災害的範例包括火災、水災或地震。 會變成永久的災害可能會導致某些訊息、事件或其他資料遺失。 不過,在大部分情況下,應該不會遺失資料,而且在備份資料中心之後,就可以復原訊息。

Azure 事件中樞的地理災害復原功能就是一個災害復原解決方案。 本文中所述的概念和工作流程適用於災害案例,不適用暫時性或暫時中斷。 如需 Microsoft Azure 中災害復原的詳細討論,請參閱本文

基本概念與術語

災害復原功能會實作中繼資料災害復原,並依賴主要和次要災害復原命名空間。

異地災害復原功能僅適用於標準、進階和專用 SKU。 您不需要進行任何連接字串變更,因為連接是透過別名建立的。

本文中使用下列術語:

  • 別名:所設定之災害復原設定的名稱。 別名提供單一穩定完整網域名稱 (FQDN) 連接字串。 應用程式會使用這個別名連接字串連接到命名空間。

  • 主要/次要命名空間:對應到別名的命名空間。 主要命名空間是「主動」,並且會接收訊息,可以是現有或新的命名空間。 次要命名空間是「被動」,並不會接收訊息。 這兩者間的中繼資料會進行同步處理,因此,這兩者均能順暢地接受訊息,而不需進行任何應用程式程式碼或連接字串變更。 若要確保只有主動命名空間會接收訊息,您必須使用別名。

  • 中繼資料:實體 (例如事件中樞和取用者群組);以及與命名空間相關聯之服務的屬性。 只有實體及其設定會自動複寫。 不會複寫訊息和事件。

  • 容錯移轉:啟用次要命名空間的程序。

支援的命名空間配對

以下是支援的主要和次要命名空間組合:

主要命名空間層 允許的次要命名空間層
標準 標準、專用
進階 進階
專用 專用

注意

您無法將位於相同專用叢集中的命名空間配對。 您可以配對位於不同叢集中的命名空間。

設定和容錯移轉流程

下一節是容錯移轉程序的概觀,並說明如何設定初始容錯移轉。

Image showing the overview of failover process

設定

首先建立或使用現有的主要命名空間,以及新的次要命名空間,然後將這兩個命名空間配對。 此配對會為您提供可用來連接的別名。 由於您使用別名,因此不需變更連接字串。 只需將新的命名空間新增至您的容錯移轉配對。

  1. 建立主要命名空間。

  2. 在不同區域中建立次要命名空間。 此步驟是選擇性的。 您可以在下一個步驟中建立配對時建立次要命名空間。

  3. 在 Azure 入口網站中,瀏覽至您的主要命名空間。

  4. 在左側功能表上選取 [異地復原],然後選取工具列上的 [起始配對]

    Initiate pairing from the primary namespace

  5. 在 [起始配對] 頁面上,請遵循下列步驟:

    1. 選取現有的次要命名空間,或在不同區域建立次要命名空間。 在此範例中,已選取現有的命名空間。
    2. 針對 [別名],輸入異地災害復原配對的別名。
    3. 然後,選取 [建立]

    Select the secondary namespace

  6. 您應該會看到 [異地災害復原別名] 頁面。 您也可以在左側功能表上選取 [異地復原],從主要命名空間瀏覽至此頁面。

    Geo-DR alias page

  7. 在 [異地災害復原別名] 頁面上,選取左側功能表上的 [共用存取原則],以存取別名的主要連接字串。 請使用此連接字串,不要直接使用主要/次要命名空間的連接字串。

  8. 在此 [概觀] 頁面上,您可以執行下列動作:

    1. 中斷主要和次要命名空間之間的配對。 選取工具列上的 [中斷配對]

    2. 手動容錯移轉至次要命名空間。 選取工具列上的 [容錯移轉]

      警告

      容錯移轉會啟動次要命名空間,並從異地災害復原配對中移除主要命名空間。 建立另一個命名空間,以產生新的異地災害復原配對。

最後,您應該新增某些監視來偵測是否需要容錯移轉。 在大部分情況下,服務是大型生態系統的一部分,因此不太可能自動容錯移轉,容錯移轉通常都必須與其餘子系統或基礎結構同步執行。

範例

在此案例的一個範例中,請考慮銷售點 (POS) 解決方案,它會發出訊息或事件。 事件中樞會將這些事件傳遞至某些對應或重新格式化解決方案,接下來將對應資料轉接到另一個系統,以進一步處理。 屆時,這些系統都會裝載於相同的 Azure 區域。 根據基礎結構中的資料流程,決定何時容錯移轉和要移轉什麼。

您可以使用監視系統或使用自訂監視解決方案來自動容錯移轉。 不過,這類自動化會採用額外的計劃和工作,這部分不在本文的範圍內。

容錯移轉流程

如果您初始化容錯移轉,需要兩個步驟:

  1. 如果發生另一個中斷,您會希望能夠再次進行容錯移轉。 因此,請設定另一個被動命名空間,並更新配對。

  2. 一旦主要命名空間再次可供使用之後,從先前的主要命名空間提取訊息。 然後,針對地理復原設定以外的一般訊息使用該命名空間,或者刪除舊的主要命名空間。

注意

僅支援失敗轉接語意。 在此案例中,您容錯移轉然後與新的命名空間重新配對。 不支援容錯復原;例如,在 SQL 叢集。

Image showing the failover flow

手動容錯移轉

本節說明如何使用 Azure 入口網站、CLI、PowerShell、C# 等來手動容錯移轉。

  1. 在 Azure 入口網站中,瀏覽至您的主要命名空間。

  2. 在左側功能表上選取 [異地復原]

  3. 手動容錯移轉至次要命名空間。 選取工具列上的 [容錯移轉]

    警告

    容錯移轉會啟動次要命名空間,並從異地災害復原配對中移除主要命名空間。 建立另一個命名空間,以產生新的異地災害復原配對。

管理

如果您發生錯誤;例如,您在初始化安裝期間配對錯誤的區域,您可以隨時中斷兩個命名空間的配對。 如果您想要使用配對的命名空間作為一般命名空間,請刪除別名。

考量

請記住下列考量:

  1. 設計上,事件中樞異地災害復原並不會複寫資料,因此您無法在次要事件中樞上重複使用主要事件中樞的舊位移值。 建議您使用下列其中一種方法來重新啟動您的事件接收器:

    • EventPosition.FromStart() - 如果您想要讀取次要事件中樞上的所有資料。
    • EventPosition.FromEnd() - 如果您想要讀取連線到次要事件中樞之後的所有新資料。
    • EventPosition.FromEnqueuedTime(dateTime) - 如果您想要讀取次要事件中樞上自指定日期和時間之後接收的所有資料。
  2. 在您的容錯移轉規劃中,您也應該考慮時間因素。 例如,如果您中斷連線時間超過 15 到 20 分鐘,您可能會決定初始化容錯移轉。

  3. 事實上,未複寫任何資料就表示未複寫目前作用中的工作階段。 此外,重複的偵測和排程訊息可能無法運作。 新的工作階段、排程訊息及新的重複項目會運作。

  4. 容錯移轉複雜分散式基礎結構應該至少演練一次。

  5. 同步處理實體可能需要一些時間,大約每分鐘 50-100 個實體。

  6. 次要命名空間的管理平面的某些層面會在異地復原配對為作用中時變成唯讀。

  7. 當異地復原配對為作用中時,次要命名空間的資料平面會是唯讀的。 次要命名空間的資料平面將接受 GET 要求,以啟用用戶端連線和存取控制的驗證。

可用性區域

事件中樞支援可用性區域,在 Azure 區域內提供錯誤隔離位置。 只有在具有可用性區域的 Azure 區域中,才支援可用性區域。 可用性區域的資料中心之間會複寫中繼資料和資料 (事件)。

建立命名空間時,如果您選取的區域具有可用性區域,則會看到下列反白顯示的訊息。

Image showing the Create Namespace page with region that has availability zones

注意

當您使用 Azure 入口網站時,會自動啟用透過可用性區域支援的區域備援。 您無法在入口網站中加以停用。 您可以使用 Azure CLI 命令 az eventhubs namespace 搭配 --zone-redundant=false,或使用 PowerShell 命令 New-AzEventHubNamespace 搭配 -ZoneRedundant=false 來建立已停用區域備援的命名空間。

私人端點

關於異地災害復原與使用私人端點的命名空間一起使用,本節提供其他考量。 若要瞭解如何在一般情況下搭配使用私人端點與事件中樞,請參閱設定私人端點

新配對

如果您嘗試在具有私人端點的主要命名空間與沒有私人端點的次要命名空間之間建立配對,配對將會失敗。 只有當主要和次要命名空間都具有私人端點時,配對才會成功。 建議您在主要和次要命名空間,以及在建立私人端點的所在虛擬網路上使用相同的設定。

注意

當您嘗試將具有私人端點的主要命名空間和次要命名空間配對時,驗證程序只會檢查次要命名空間上是否存在私人端點。 不會檢查端點是否正常運作,或在容錯移轉之後是否可運作。 您必須負責確保具有私人端點的次要命名空間在容錯移轉之後能如預期般運作。

若要測試主要和次要命名空間上的私人端點組態是否相同,請將讀取要求 (例如取得事件中樞) 傳送至虛擬網路外部的次要命名空間,並確認您收到來自服務的錯誤訊息。

現有配對

如果主要和次要命名空間之間的配對已存在,在主要命名空間上的私人端點建立將會失敗。 若要解決此問題,請先在次要命名空間上建立私人端點,然後再為主要命名空間建立私人端點。

注意

我們允許對次要命名空間唯讀存取,也允許更新私人端點設定。

建立應用程式和事件中樞命名空間的災害復原設定時,您必須針對裝載您應用程式主要和次要執行個體的虛擬網路,建立主要和次要事件中樞命名空間的私人端點。

假設您有兩個虛擬網路:VNET-1、VNET-2 和這些主要和次要命名空間:EventHubs-Namespace1-Primary、EventHubs-Namespace2-Secondary。 您需要執行下列步驟:

  • 在 EventHubs-Namespace1-Primary 上,建立兩個私人端點,且這兩個端點使用 VNET-1 和 VNET-2 中的子網路
  • 在 EventHubs-Namespace2-Secondary 上,建立兩個私人端點,且這兩個端點使用 VNET-1 和 VNET-2 中的相同子網路

Private endpoints and virtual networks

這種方法的優點是,容錯移轉可能會發生在與事件中樞命名空間無關的應用程式層。 請考量下列案例:

僅限應用程式容錯移轉:這裡,應用程式不存在於 VNET-1,但會移至 VNET-2。 由於在主要和次要命名空間的 VNET-1 和 VNET-2 上都設定了這兩個私人端點,應用程式會正常執行。

僅限事件中樞命名空間容錯移轉同樣地,此案例中由於在主要和次要命名空間的虛擬網路上都設定了這兩個私人端點,應用程式就會正常運作。

注意

如需虛擬網路的異地災害復原指引,請參閱虛擬網路 - 商務持續性

角色型存取控制

對主要命名空間中實體的 Microsoft Entra 角色型存取控制 (RBAC) 指派,不會複寫至次要命名空間。 在次要命名空間中手動建立角色指派,以安全存取這些實體。

下一步

請參閱下列範例或參考文件。