混合云应用双活容灾最佳实践
作者:远跖
Cloud Native
业务混合云容灾实践
Cloud Native
业务仅在 IDC 单机房部署,缺少容灾能力。
IDC 容量不足,物理机器升级替换周期长,不足以支撑业务的快速发展。
当前应用部署架构
frontend:Web 应用,负责和用户交互。
cartservice:购物车应用,提供购物车添加、存储和查询服务。
productservice:商品应用,提供商品、库存服务。
SpringBoot。
RPC 框架:SpringCloud、Dubbo,注册中心使用自建的 Nacos、Zookeeper。
数据库 Redis 和 MySQL。
云上云下互容灾,切换 RTO 为分钟级。期望云上云下相互容灾,继续发挥 IDC 的价值,且不 100% 依赖于云。面对 IDC 或云故障场景,关键时刻要敢切换、能切换,且切换 RTO 要求小于 10 分钟。
无数据一致性风险。云上云下的两个数据中心数据强一致,日常态和容灾切换过程中都要避免存在脏写等数据一致性风险。
一站式管控。业务容灾涉及的技术栈框架和云产品,需要统一管控、统一运维、统一切换,操作收敛在一站式管控平台,方便故障场景快速白屏化操作,自动化执行。
实施周期短,改造成本低。业务存在多个产品线,依赖关系复杂、调用链路长,且处于高速发展频繁迭代时期,期望容灾建设不会给业务研发团队带来改造负担。
流量管理难度高
若采用 DNS 将流量按权重解析到云上和云下,存在修改 DNS 解析生效时间长的问题(通常为十分钟或小时级,参见 DNS 解析生效时间 FAQ[2]),不能满足容灾切换小于 10 分钟的要求。 业务应用所依赖的 Redis 和 MySQL,IDC内采用开源自建而云上直接使用云产品,要实现开源自建+云产品的容灾切换能力难。
容灾切换数据质量保障难
容灾切换过程中,可能因数据同步延迟导致读到旧数据,以及切换规则推送到分布式应用节点时间不一致等原因可能造成云上云下数据库同时读写而出现脏写的问题,整个切换过程数据质量保障是个关键点,同时也是难点。
无业务代码侵入难
要实现 Redis、MySQL 容灾切换能力,通常需要业务应用配合改造,对业务代码侵入大。
应用双活架构
选择离 IDC 物理距离<=200km 的云上 Region,网络延迟较低(约 5~7ms)。
应用、中间件云上云下冗余对称部署,同时对外提供服务(应用双活)。
数据库异地主备,异步复制备份。应用读写同一数据中心的数据库,避免考虑一致性问题。
详细方案
应用流量双活
服务互通和同单元优先调用
数据同步&数据库连接切换
一站式管控&无业务代码侵入
应用上云
选择跟自建 IDC 较近的阿里云地域,云上完全冗余的部署一套应用、中间件和数据库,以便搭建云上云下双活容灾架构。在这个 Demo 案例中,选择杭州 Region 作为容灾单元。
网络打通:
接入 CEN 云企业网,实现云上云下网络互通(详见多接入方式构建企业级混合云文档[3])。
接入集群部署和配置:
云上云下部署 MSHA 接入层集群(MSFE),上挂 SLB 用于公网接入以及 MSFE 集群的负载均衡(参见使用文档[4])。 录入域名、URI 和后端应用地址,从而具备云上云下分流和分钟级切流能力(参见使用文档[5])。
应用:
云上分批部署业务应用。 JAVA 应用安装 MSHA-Agent,并使用 Nacos 作为管控命令下发通道,从而具备微服务同单元优先调用以及数据库访问连接切换能力(参见使用文档[6])。
中间件和数据库:
云上部署 MSE 托管 ZK/Nacos 注册中心、云数据库 Redis 和 RDS,建议使用跨可用区部署高可用版本,具备同城双活容灾能力。 若存在某应用仅 IDC 部署的情况,需要配置注册中心的服务同步(参见使用文档[7])。 配置云数据库 Redis/RDS 和自建 Redis/MySQL 的数据同步(参见使用文档[8])。
改造后的应用部署架构
RPO:<=1min(依赖于 DTS 同步性能)
RTO:<=1min(依赖于 DTS 同步延迟,MSHA 组件实现秒级切换。整体 RTO<=1min)
7.1 演练准备
进入 MSHA 控制台,在左侧菜单栏选择监控大盘。页面顶部,下拉选择切换到实际使用的命名空间。
查看页面中的各项监控指标。
7.2 应用故障注入
进入 Chaos 故障演练产品控制台[9],顶部选择切换到相应地域,左侧导航栏选择我的空间。
在我的空间选择配置好的演练(50% 概率网络丢包),然后单击执行演练。
7.3 切流恢复
预期
切流操作
3. 单击执行预检查,在切流检查区域,单击确认,开始切流。
4. 在切流任务页面的当前状态显示切流完成,表示切流已成功。
5. 刷新电商 Demo 首页,多次访问均能正常展示,符合预期。
7.4 数据库故障注入
7.5 切换数据库进行恢复
预期
应用连接的数据库切换到杭州后,业务完全恢复,不受北京单元的故障影响。
切流操作
1. 进入 MSHA 控制台,在左侧导航栏选择异地应用双活>数据层配置。
2.在数据保护规则列表中,找到商品、订单、购物车数据库,逐个点击主备切换。
3. 点击主备切换后,会进入预检查页面,确认各检查项状态正常后,点击在确认执行,则进入切换详情页,并自动执行切换流程。
4. 主备切换详情页,可以看到切换进度和切换结果,任务进度 100% 后,表示切换完成。
5. 商品、订单、购物车数据库都主备切换完成后。多次访问电商 Demo 首页或进行下单,发现均已正常,主备切换后业务功能完全恢复,符合预期。
总结
Cloud Native
相关阅读
Cloud Native
[1] MSHA 云原生多活容灾解决方案
https://www.aliyun.com/product/aliware/ahas/msha
[2] DNS 解析生效时间 FAQ
https://help.aliyun.com/document_detail/39837.html
[3] 多接入方式构建企业级混合云文档
https://help.aliyun.com/document_detail/181844.html
[4] 使用文档
https://help.aliyun.com/document_detail/184980.html
[5] 使用文档
https://help.aliyun.com/document_detail/328617.html
[6] 使用文档
https://help.aliyun.com/document_detail/295852.html
[7] 使用文档
https://help.aliyun.com/document_detail/369539.html
[8] 使用文档
https://help.aliyun.com/document_detail/184971.html
[9] Chaos 故障演练产品控制台
https://common-buy.aliyun.com/?commodityCode=ahas_001#/buy
[10] Chaos 故障演练
https://common-buy.aliyun.com/?commodityCode=ahas_001#/buy
延伸阅读
MSHA 多活容灾解决方案首页: https://www.aliyun.com/product/aliware/ahas/msha
MSHA 支持的 4 种容灾架构介绍: https://help.aliyun.com/document_detail/338374.html
Chaos 故障演练产品首页: https://www.aliyun.com/product/aliware/ahas/chaos
文章转载:
(版权归原作者所有,侵删) 阿里巴巴云原生
点击下方“阅读原文”查看更多