【Azure 事件中心】Azure Event Hub 新功能尝试 异地灾难恢复 (Geo Disaster Recovery) - LuBu0505/My-Code GitHub Wiki

问题描述

关于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)功能,它旨在让用户能够更轻松地从如此大规模的灾难中恢复,且无需更改应用程序配置。关键内容见下图红色区域。 image.png

所以,本文主要的操作就是根据此文档,启用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 image.png

创建成功后,页面下显示内容为: image.png

第二步:在主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 中是否自动田间。【答案是不会自动添加】 image.png

第三步:使用 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

演示动画: use alias access key.gif

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

在执行前,可以通过在线Dig工具,查看当前的Alias域名(lbeventhubertest.servicebus.chinacloudapi.cn)解析出来的Host指向的为 lbdiagnostictest01 image.png

开始执行Failover操作 (只需要在 Event Hub的页面中通过 点击Failover 案例即可) image.png

在执行完成Failover操作后,再次通过Dig工具,查看Alias域名(lbeventhubertest.servicebus.chinacloudapi.cn)解析出来的Host为:lbdiagnostictest02 image.png

第五步:验证发送的消息是否从主的EventHub 转移发送到次的Event Hub, 此处,通过 Azure Event Hub页面上的Metrics图表进行判断

分别在主/从 Event Hub页面中进入Metrics页面,查看Incoming Message的曲线 image.png

**特别注意:**按照设计,事件中心异地灾难恢复不会复制数据,因此,无法在辅助事件中心重复使用主事件中心的旧偏移值。建议通过以下方法之一重启事件接收器:

  • 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/

当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

分类: 【Azure 事件中心】

标签: Azure 环境事件中心 Azure Event Hub灾备恢复Geo-Recovery

⚠️ **GitHub.com Fallback** ⚠️