【Azure 事件中心】Azure Event Hub 新功能嘗試 -- 異地災難恢復 (Geo-Disaster Recovery)

2022-07-22 18:00:48

問題描述

關於Event Hub(事件中心)的災備方案,大多數就是新建另外一個備用的Event Hub,當主Event Hub出現不可用的情況時,就需要切換到備Event Hub上。 而在切換的過程中,難點在於如何讓使用者端應用無感知的切換到備份Event Hub,以前的方案有兩種:

1:在自己DNS伺服器中,設定DNS別名。然後在應用程式碼中,需要先根據DNS別名查詢到正確的Event Hub域名。實現方式:https://docs.azure.cn/zh-cn/event-hubs/event-hubs-federation-patterns

2:在應用的組態檔中,修改Event Hub的連結字串。

 

第一種方式需要自己設定DNS服務,並且在應用程式程式碼中需要加入根據DNS別名查詢Event Hub域名的操作,操作複雜。 第二種方式,需要在修改應用組態檔,導致應用需要重啟,或者是修改很多組態檔。

現在,Event Hub主動推出了異地災難恢復( Geo-Disaster Recovery)功能,它旨在讓使用者能夠更輕鬆地從如此大規模的災難中恢復,且無需更改應用程式設定。關鍵內容見下圖紅色區域。

所以,本文主要的操作就是根據此檔案,啟用Geo-Disaster Recovery功能。並通過手動執行Failover來驗證 主備 Event Hub能順利的接收訊息。 

 

驗證步驟

第一步: 根據檔案,啟用Geo-Disaster Recovery 功能

這一步的操作步驟, 執行簡單,根據頁面指引,一步一步完成即可。官網步驟:https://docs.azure.cn/zh-cn/event-hubs/event-hubs-geo-dr?tabs=portal

  1. 如下圖,進入Geo-Recovery頁面,點選 Initiate Pairing
  2. 在右側出現的設定頁面中,選擇與當前Event Hub不同的區域,如 China North 3
  3. 然後選擇新建一個Event Hub Namespace, 如 lbdiagnostictest02
  4. 最後,設定別名。這一步非常重要,因為當應用在使用Event Hub服務的連線字串時,不在是使用服務原本的名稱,而是此處設定的別名。 如 lbeventhubertest

建立成功後,頁面下顯示內容為:

 

第二步:在主Event Hub中新增新的消費組,同步檢視次Event Hub中,驗證是否已經同步設定資訊。同時反向驗證,先修改次Event Hub,檢視主Event Hub是否同步資訊

首先,在本實驗中,主Event Hub為 lbdiagnostictest01, 次Event Hub為 lbdiagnostictest02,對比兩個Event Hub後設資料。

然後,在 主Event Hub 中新增一個 testdr 消費組,檢查 次Event Hub 中是否自動新增。【答案是會自動新增】

最後,在 次Event Hub 中新增一個 testdr2 消費組,再次檢查 主Event Hub 中是否自動田間。【答案是不會自動新增】

 

第三步:使用 Azure Service Bus Explorer 和Event Hub 的

Azure Service Bus Explorer 工具的下載地址:https://github.com/paolosalvatori/ServiceBusExplorer/releases/download/5.0.7/ServiceBusExplorer-5.0.7.zip

演示動畫:

 

第四步:在Event Hub Geo-Disaster Recover頁面,執行Failover操作

在執行前,可以通過線上Dig工具,檢視當前的Alias域名(lbeventhubertest.servicebus.chinacloudapi.cn)解析出來的Host指向的為 lbdiagnostictest01

開始執行Failover操作 (只需要在 Event Hub的頁面中通過 點選Failover 案例即可)

在執行完成Failover操作後,再次通過Dig工具,檢視Alias域名(lbeventhubertest.servicebus.chinacloudapi.cn)解析出來的Host為:lbdiagnostictest02

 

第五步:驗證傳送的訊息是否從主的EventHub 轉移傳送到次的Event Hub, 此處,通過 Azure Event Hub頁面上的Metrics圖表進行判斷

分別在主/從 Event Hub頁面中進入Metrics頁面,檢視Incoming Message的曲線

 

 

特別注意:按照設計,事件中心異地災難恢復不會複製資料,因此,無法在輔助事件中心重複使用主事件中心的舊偏移值。建議通過以下方法之一重啟事件接收器:

  • EventPosition.FromStart() - 如果想要讀取輔助事件中心上的所有資料。
  • EventPosition.FromStart - 如果想要讀取自連線到輔助事件中心開始算起的所有新資料。
  • EventPosition.FromEnqueuedTime(dateTime) - 如果想要讀取自給定的日期和時間開始算起輔助事件中心收到的所有資料。

 

[END]

參考檔案

ServiceBusExplorer https://github.com/paolosalvatori/ServiceBusExplorer/releases

Azure 事件中心 - 異地災難恢復: https://docs.azure.cn/zh-cn/event-hubs/event-hubs-geo-dr?tabs=portal

Azure 事件中心故障轉移: https://docs.azure.cn/zh-cn/event-hubs/event-hubs-federation-patterns

Online Dig: https://www.diggui.com/