多地区实例容灾

更新时间:

云消息队列 MQTT 版提供容灾功能,旨在帮助您在网络波动、机房故障或其他不可预见的灾难场景下,快速将MQTT流量切换到备用实例,从而提升服务的抗风险能力和可用性。本文为您介绍容灾的功能说明、工作原理、权限说明及容灾切换方式。

背景知识

功能介绍

通过容灾功能,您可以在多个地域分别创建云消息队列 MQTT 版实例,当某个地域故障时可以把流量切换到其他地域的实例以保证服务可用性。

产品定位

云消息队列 MQTT 版容灾功能当前只解决流量在多个实例间自由切换访问的权限兼容性问题,对于元数据、消息等不考虑互通。元数据、权限数据等需要您在每个实例对等创建。消息数据保持不同实例间隔离,您需要在业务层面进行全局的状态判断,例如消息的路由转发等操作。

使用限制

目前仅铂金版实例支持容灾功能,且需要提交工单申请。

容灾原理

假如您分别在华东1(杭州)、华东2(上海)地域各购买了一个云消息队列 MQTT 版实例,希望MQTT流量能够在两个地域的实例间进行容灾切换。

image
  1. 边缘设备通过地域实例接入点或者全局容灾接入点连接云上云消息队列 MQTT 版服务。

  2. 云上云消息队列 MQTT 版实例服务能够兼容设备参数,默认映射到本地域云消息队列 MQTT 版实例提供服务,但是实例必须同属于一个账号。

  3. 业务后端服务器需要多地域部署,并进行VPC网络打通(例如使用CEN打通),同时订阅所有地域云消息队列 MQTT 版实例消息,尤其是订阅设备上下线事件(用来判断当前设备连接到哪个地域的云消息队列 MQTT 版实例),以保存一个全局的路由表,在下行推送消息时查询路由表,得到设备当前连接的地域的实例并进行推送。

  4. 各地域的云消息队列 MQTT 版实例可提供一个用户侧的内网IP接入点,方便业务后端进行跨地域VPC互通。

说明
  • 容灾切换只涉及公网接入点(VIP)的切换,不涉及内网接入点的切换。

  • 云消息队列 MQTT 版没有限制参与容灾的实例或地域只能是两个,您可以按需使用三个或多个实例参与容灾。

权限兼容

用户侧

目前容灾功能暂不支持数据同步,包括权限数据。因此,您需要在每个实例上面创建对等的权限元数据,包括Topic、Group ID、RAM授权等。

image

云服务侧

由于云消息队列 MQTT 版产品默认是地域化、实例化的,MQTT设备连接参数中默认配置了实例ID、username、password等连接参数,当进行域名容灾切换时由于其他地域实例不能识别这些原有参数,因此需要进行兼容支持。例如通过容灾开关来进行入口实例ID替换,如下图所示,设备端连接切换到B实例后,会完全以B实例的上下文进行设备连接、消息收发。

image

容灾域名

正常状态下,设备使用实例域名进行就近接入,因为实例域名默认是和实例一一对应的,存在地域对应关系。当需要进行容灾切换时,再把问题实例域名指向另一个容灾实例的VIP, 设备侧无感地实现容灾切换。另外,我们也可以提供一个全局的容灾域名,当某个地域的实例出现问题时,自动移除问题实例VIP。如果您不想就近接入的话,可以默认使用这个全局容灾域名。

image

容灾切换方式

切换API

云消息队列 MQTT 版为您提供OpenAPI(DisasterDowngrade - 容灾降级DisasterRecovery - 容灾恢复),方便您手动进行实例容灾切换,切换时会修改问题实例域名的VIP指向,同时在全局容灾域名中下线问题实例VIP。

巡检切换

为了进一步保障容灾服务架构,云消息队列 MQTT 版产品会提供一个全局的巡检机制来自动判断是否需要容灾,并进行实例切换,比如巡检到其中某个实例不可用时会自动把MQTT流量切换到另一个实例。

设备端连接

设备端连接使用实例域名或者全局域名,不管是正常状态还是容灾状态,都是根据DNS解析的VIP进行设备的连接,所以设备端感知不到容灾过程。不过,如果要强制进行容灾切换,例如通过API主动切换,则必须对设备进行主动断连,并且等到DNS缓存失效后重新解析才能切换到新的VIP。