多活容灾MSHA(Multi-Site High Availability)是一个云原生的多活容灾架构解决⽅案。本文介绍同城多活容灾架构的建设原则和难点,并通过一个电商业务案例,介绍如何基于MSHA来快速、无侵入的帮助业务实现同城多活容灾架构。
同城多活架构介绍
同城多活(DB主备)的架构图如下:
同城多活架构包含以下主要特征:
- 应用可用区级多活。
- 数据库跨可用区主备。
- RPO:分钟级(AZ级故障)。
- RTO:分钟级(AZ级故障)。
应用场景:
- 针对可用区级的故障、灾难,期望业务具备分钟级恢复能力的场景。
- 应用多可用区部署的情况下,期望RPC调用可用区内封闭,以避免跨可用区网络请求带来的RT增长。
建设原则:
- 保证冗余。
- 保持对等。
- 保持封闭。
建设难点:
- 流量管理难度高。
- 当发生可用区级故障、灾难时:
- 需具备HTTP、HTTPS流量的可用区级动态调配分流能力。
- 需具备对故障AZ的RPC、MQ、任务调度流量切零能力。
- 如果业务RT敏感,需具备可用区内流量封闭的能力以避免跨可用区的网络传输带来的RT增长。
- 当发生可用区级故障、灾难时:
- 统一管控难度大。
- 需对接支持众多的云产品和开源框架。
- 切零规则、流量可用区内封闭规则、环境隔离规则、甚至异地多活路由规则共存的情况下,需保证规则的优先级、兼容性和冲突解决策略。
- 业务无侵入难度大:要实现HTTP、RPC、MQ、任务调度等流量管控能力,通常需要业务应用配合改造,对业务代码侵入大。
业务背景信息
本示例的电商业务包含以下应用:
- frontend:入口Web应用,负责和用户交互。
- cartservice:购物车应用。记录用户的购物车数据,使用自建的Redis。
- productservice:商品应用。提供商品、库存服务,使用RDS MySQL。
技术栈:
- SpringBoot。
- RPC框架:SpringCloud,注册中心使用自建的Eureka。
案例背景:一次故障的发生
本示例的电商业务已自行进行了同城容灾能力建设,在杭州的多个可用区进行应用的对等部署,并自行实现了可用区级粒度的入口流量控制。但因为一次线上可用区级故障,才发现将故障可用区的HTTP流量切换到其他可用区后,下游的RPC、MQ调用仍然有概率访问到故障可用区内的机器,业务仍然无法使用,导致电商页面长时间无法访问,甚至电商业务瘫痪。
虽然故障最终得以解决,但故障导致的客户流失和企业口碑影响,对快速发展的业务造成不小的打击,迫使企业开始重视同城多活容灾能力的建设,以及定期做故障演练确保故障恢复能力的有效性。
同城多活架构改造
基于MSHA多活容灾解决方案,您可以快速地对业务进行同城多活容灾架构建设。
多活改造和MSHA接入包括以下方面:
复现故障
基于MSHA完成同城多活架构建设后,还需验证容灾能力是否符合预期。接下来将历史故障进行复现,通过制造真实的故障来验证容灾恢复能力。
- 演练准备。
- 故障注入。
切流恢复
接下来将验证故障场景下的容灾恢复能力。在杭州单元格B的商品应用发生故障的情况下,可使用MSHA切流功能将流量全部切换到另外的单元格,进行快速业务恢复(这里区别于传统的思路,不是去排查、处理和修复故障,而是立即使用切流进行恢复,将业务恢复和故障恢复解耦)。
容灾切换预期:将100%的流量比例都切换到单元格I,切流后业务完全恢复,不受单元格B的故障影响。
功能演示
故障注入和切流恢复的功能演示如下。
后续步骤
您还需要进行以下操作: