多活容灾MSHA(Multi-Site High Availability)是一个云原生的多活容灾架构解决⽅案。本文介绍同城多活容灾架构的建设原则和难点,并通过一个电商业务案例,介绍如何基于MSHA来快速、无侵入的帮助业务实现同城多活容灾架构。

同城多活架构介绍

同城多活(DB主备)的架构图如下:

同城多活架构1.png

同城多活架构包含以下主要特征:

  • 应用可用区级多活。
  • 数据库跨可用区主备。
  • RPO:分钟级(AZ级故障)。
  • RTO:分钟级(AZ级故障)。

应用场景:

  • 针对可用区级的故障、灾难,期望业务具备分钟级恢复能力的场景。
  • 应用多可用区部署的情况下,期望RPC调用可用区内封闭,以避免跨可用区网络请求带来的RT增长。

建设原则:

  • 保证冗余。
  • 保持对等。
  • 保持封闭。

建设难点:

  • 流量管理难度高。
    • 当发生可用区级故障、灾难时:
      • 需具备HTTP、HTTPS流量的可用区级动态调配分流能力。
      • 需具备对故障AZ的RPC、MQ、任务调度流量切零能力。
    • 如果业务RT敏感,需具备可用区内流量封闭的能力以避免跨可用区的网络传输带来的RT增长。
  • 统一管控难度大。
    • 需对接支持众多的云产品和开源框架。
    • 切零规则、流量可用区内封闭规则、环境隔离规则、甚至异地多活路由规则共存的情况下,需保证规则的优先级、兼容性和冲突解决策略。
  • 业务无侵入难度大:要实现HTTP、RPC、MQ、任务调度等流量管控能力,通常需要业务应用配合改造,对业务代码侵入大。

业务背景信息

电商业务.png

本示例的电商业务包含以下应用:

  • frontend:入口Web应用,负责和用户交互。
  • cartservice:购物车应用。记录用户的购物车数据,使用自建的Redis。
  • productservice:商品应用。提供商品、库存服务,使用RDS MySQL。

技术栈:

  • SpringBoot。
  • RPC框架:SpringCloud,注册中心使用自建的Eureka。

案例背景:一次故障的发生

本示例的电商业务已自行进行了同城容灾能力建设,在杭州的多个可用区进行应用的对等部署,并自行实现了可用区级粒度的入口流量控制。但因为一次线上可用区级故障,才发现将故障可用区的HTTP流量切换到其他可用区后,下游的RPC、MQ调用仍然有概率访问到故障可用区内的机器,业务仍然无法使用,导致电商页面长时间无法访问,甚至电商业务瘫痪。

虽然故障最终得以解决,但故障导致的客户流失和企业口碑影响,对快速发展的业务造成不小的打击,迫使企业开始重视同城多活容灾能力的建设,以及定期做故障演练确保故障恢复能力的有效性。

同城多活架构改造

基于MSHA多活容灾解决方案,您可以快速地对业务进行同城多活容灾架构建设。

多活改造和MSHA接入包括以下方面:

  1. 开通并配置MSHA需要启用的多活模块。具体操作,请参见开通并配置MSHA
  2. 创建同城多活的命名空间,选择容灾架构类型为同城多活,将应用部署所在的2个可用区定义为2个单元格。具体操作,请参见新建命名空间
  3. 安装MSHA探针。具体操作,请参见为Java应用手动安装探针
  4. 配置接入层MSFE。具体操作,请参见配置MSFE
    改造后的应用架构如下图所示:同城多活架构改造后.png

复现故障

基于MSHA完成同城多活架构建设后,还需验证容灾能力是否符合预期。接下来将历史故障进行复现,通过制造真实的故障来验证容灾恢复能力。

  1. 演练准备。
    1. 登录AHAS控制台
    2. 在控制台左侧导航栏单击多活容灾
    3. 在左侧导航栏单击监控大盘,在顶部菜单栏,选择命名空间官方示例命名空间
    4. 同城多活区域,查看业务监控指标。
      说明 基于MSHA流量监控或其他监控能力,确定业务稳态的监控指标,以便在故障发生时判断故障影响面以及在故障恢复后判断业务的实际恢复情况。
      监控大盘.png

      演练预期:电商首页展示的查询链路对商品应用是强依赖,强依赖故障将导致业务不可用,且故障的爆炸半径应该控制在单元格内。

    5. 创建故障演练。

      创建杭州单元格B下的商品应用故障演练(例如网络丢包)。具体操作,请参见创建演练

  2. 故障注入。
    1. 在多活容灾的监控大盘页面同城多活区域,查看故障演练前配置的路由规则。

      本示例中杭州地域的各个单元格流量比例为50%。

      路由规则1.png

      示例的MSHA商城商品应用链路如下图所示,UserID为1000的用户路由到单元格B。

      查看链路1.png
    2. 对杭州域单元格B下的商品应用注入故障。
      1. AHAS控制台的左侧导航栏选择故障演练 > 我的空间
      2. 我的空间单击演练准备中创建的演练,然后单击演练
      3. 开始执行演练对话框中,单击确认故障注入2.png

        若故障注入成功,打开电商首页,有概率出现访问异常,符合预期。

        访问失败.png

切流恢复

接下来将验证故障场景下的容灾恢复能力。在杭州单元格B的商品应用发生故障的情况下,可使用MSHA切流功能将流量全部切换到另外的单元格,进行快速业务恢复(这里区别于传统的思路,不是去排查、处理和修复故障,而是立即使用切流进行恢复,将业务恢复和故障恢复解耦)。

容灾切换预期:将100%的流量比例都切换到单元格I,切流后业务完全恢复,不受单元格B的故障影响。

  1. 登录AHAS控制台
  2. 在控制台左侧导航栏中选择多活容灾
  3. 在左侧导航栏选择基础配置 > 命名空间,在顶部菜单栏选择官方示例命名空间
  4. 在多活容灾的左侧导航栏选择切流 > 同城多活切流
  5. 同城多活切流页面,单击切流
  6. 切流详情页面的规则调整区域,选择切流方式比例切流,从单元下拉列表中选择杭州中心单元,单击杭州中心单元-单元格B的一键切零
    同城切流.png
  7. 单击确定。在切流检查区域检查完成后,单击切流
  8. 切流任务页面,查看工单状态切流完成。表示切流已成功。
    切流完成.png
    验证结果
    1. 刷新MSHA商城首页,多次访问均能正常展示,符合预期。
    2. 通过查看实际调用链路,首页的流量始终访问到杭州单元格I中,不受单元格B故障的影响,符合预期。查看链路2.png

功能演示

故障注入和切流恢复的功能演示如下。

后续步骤

您还需要进行以下操作:

  • 终止注入故障。具体操作,请参见停止演练
  • 反馈演练结果,记录演练识别到的风险问题。具体操作,请参见反馈演练结果
  • 回切流量,将单元格B和单元格I的流量比例,通过再次切流恢复到各50%(演练前的状态)。具体操作,请参见同城多活切流
  • 在控制台的监控大盘,查看业务的稳态指标已恢复。