天天看點

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

問題描述

關于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#dns-based-failover-configuration

2:在應用的配置檔案中,修改Event Hub的連結字元串。

第一種方式需要自己配置DNS服務,并且在應用程式代碼中需要加入根據DNS别名查找Event Hub域名的操作,操作複雜。 第二種方式,需要在修改應用配置檔案,導緻應用需要重新開機,或者是修改很多配置檔案。

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

【Azure 事件中心】Azure 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#setup

  1. 如下圖,進入Geo-Recovery頁面,點選 Initiate Pairing。
  2. 在右側出現的配置頁面中,選擇與目前Event Hub不同的區域,如 China North 3
  3. 然後選擇建立一個Event Hub Namespace, 如 lbdiagnostictest02
  4. 最後,設定别名。這一步非常重要,因為當應用在使用Event Hub服務的連接配接字元串時,不在是使用服務原本的名稱,而是此處設定的别名。 如 lbeventhubertest
【Azure 事件中心】Azure Event Hub 新功能嘗試 -- 異地災難恢複 (Geo-Disaster Recovery)

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

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

第二步:在主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 事件中心】Azure Event Hub 新功能嘗試 -- 異地災難恢複 (Geo-Disaster Recovery)

第三步:使用 Azure Service Bus Explorer 和Event Hub 的Alias Primary Connection String 的連接配接字元串,開始發送萬條資料

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

示範動畫:

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

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

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

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

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

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

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

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

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

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

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

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

  • 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#failover

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

當在複雜的環境中面臨問題,格物之道需:濁而靜之徐清,安以動之徐生。 雲中,恰是如此!

繼續閱讀