通过MSHA实现异地双活
方案概述
随着企业业务的发展,业务应用运行已经横跨多个地域,从性能和高可用方面考虑,核心业务需要进行单元化部署。在单元化部署的前提下,可能仍然存在集中运营的核心系统,对业务连续性的要求非常高,需要按照地域灵活切流和容灾,实现故障分钟级快速恢复,保证业务连续性和系统安全稳定运行。
本文档则介绍了一种通过多活容灾MSHA(Multi-Site High Availability)实现应用程序异地双活的方案。
方案优势
大规模实践沉淀
多活容灾MSHA商业化上线于2019年,产品技术与多活方案均来自于阿里内部多年异地多活单元化架构实践。商业化至今,多活容灾MSHA已经帮助数字政府、物流、能源、通信、互联网等众多行业头部客户落地了多活容灾架构,也沉淀了丰富多样的多活架构以支撑不同的业务形态。
使用MSHA提供的产品能力和多活方案,具备更强的落地可行性和更低的落地成本。如果完全自建从零探索,由于设计缺陷带来的业务损失(尤其是数据损失)可能无法估量,同时多活组件的可用性能力打磨在时间成本上将以年计。
一站式多活管控
多活容灾MSHA是一站式的管控平台。通过接入层、应用层、数据层的抽象设计,囊括系统架构中所有的多活容灾切面,提升全栈的管控能力。通过与云产品的深度集成,以及被集成的相关设计,提供多活架构建设、运维过程中创建、变更、监控、演练的一站式管控。
分钟级容灾切换
多活容灾MSHA基于对容灾架构的设计和全栈管控,提炼各类机房级故障场景下的一键切换,可以做到分钟级的RTO和RPO,非极端故障场景下可以做到秒级RTO。借助多活容灾MSHA提供的多活架构、常态化巡检监控以及日常容灾演练,不仅可以保障故障场景下的可切敢切,更能不断增强故障场景下容灾能力的确定性。与此同时,多活容灾MSHA作为容灾管控,也能够保障单地域故障场景下的管控可用性。
客户场景
单元化部署的业务需要地域级容灾能力
场景描述
业户应用的用户量和数据量很大,因此部分业务进行了单元化拆分,业务分布在异地的多个站点同时对外提供服务,并且使用独立的IAAS、PASS层集群。业务和数据单元化拆分后,各单元都可以完成完整的操作,但中心和各单元的仍然需要实现地域级别的容灾,在地域站点故障后能够快速切流,多重保障确保服务的稳定。
适用客户
业务体量较大,需要或者已实现单元化部署的业务系统
多地域间距离较远,无法忍受跨机房的网络RT
多地域单元化部署,但仍然存在全局性的风险
客户案例
客户背景
某客户期望打造智能化、平台化、个性化、集约化的全国性系统。该系统以集中系统支撑,通过资源集中调度和区域集中化运营,提升服务效能、降低服务成本、保障服务质量。
客户痛点(或客户诉求)
客户大力推进由之前分区域模式转迁到集中系统平台上来,因此业务连续性的要求非常高,要求可以按照地域灵活切流和容灾,实现故障分钟级快速恢复,保证业务连续性和系统安全稳定运行。
实施方案
使用MSHA实现异地双活系统,实现业务的双活容灾
入口流量按照地域进行分流,异常情况下可进行热切
数据层借助DTS产品能力实现双向数据实时同步,减小地域级故障导致数据丢失
客户收益
没有全局风险。不同数据中心承载不同地域流量,没有全国性风险。
资源冗余不浪费。应用双活,数据双活,流量按地域灵活调度。
切换能力强。单数据中心故障场景下的分钟级切换时效,演练场景可达秒级。
方案架构
本方案使用多活容灾MSHA(Multi-Site High Availability),实现异地双活的容灾架构。MSHA将业务系统自上而下分为接入层、应用层和数据层三层。配合产品提供的管控和数据面组件,实现多活架构的创建和管控。
接入层作为流量入口,MSHA提供了一个基于Tengine的流量网关实现,简称MSFE。MSFE需要在租户侧的ECS上搭建集群,能够实现机房级和应用级的流量路由,在地域级别的故障情况下,可以将机房流量切0,实现故障情况下的流量切换。
应用层是对应用服务的抽象概括,包括微服务、消息等。MSHA支持常见的微服务组件,包括Dubbo、SpringCloud、以及EDAS-HSF服务,并提供故障隔离、单元化服务寻址等能力。对于消息,MSHA支持云产品MQ以及开源RocketMQ,同样提供消息同步和故障隔离的能力。
数据层是对数据库服务的抽象概括,针对常见的关系型数据库包括RDS、PolarDB,以及Redis、MongoDB等提供数据双活的能力,借助DTS产品能力实现数据的双向同步。
产品费用及名词
产品费用
产品名称 | 产品说明 | 产品费用 |
多活容MSHA | 多活容灾MSHA(Multi-Site High Availability)是在阿里巴巴电商业务环境演进出来的多活容灾商业化产品,是应用高可用服务AHAS的核心模块,为客户提供容灾架构建设能力。 | 收费,详情参见产品计费。 |
云服务器ECS | 云服务器ECS(Elastic Compute Service)是一种简单高效、处理能力可弹性伸缩的计算服务。帮助您构建更稳定、安全的应用,提升运维效率,降低IT成本,使您更专注于核心业务创新。 | 收费,详情参见产品计费。 |
传统型负载均衡CLB | 传统型负载均衡CLB(Classic Load Balancer)是将访问流量根据转发策略分发到后端多台云服务器的流量分发控制服务。CLB扩展了应用的服务能力,增强了应用的可用性。 | 收费,详情参见产品计费。 |
微服务引擎MSE | 微服务引擎MSE(Microservices Engine)是一个面向业界主流开源微服务生态的一站式微服务平台,提供注册配置中心、云原生网关、微服务治理、分布式任务调度的能力。 | 收费,详情参见产品计费。 |
名词解释
名称 | 说明 |
应用高可用服务 AHAS | Application High Availability Service,专注于提高应用高可用能力的SaaS产品,主要包括多活容灾和流量防护两个独立的功能模块。其中流量防护已迁移至微服务治理MSE。 |
多活容灾 MSAH | Multi-Site High Availability,即多活容灾产品的简称,是在阿里巴巴电商业务环境演进出来的多活容灾架构解决方案,可以将业务恢复和故障恢复解耦,有基于灵活的规则调度、跨域跨云管控、数据保护等能力,保障故障场景下的业务快速恢复,助力企业的容灾稳定性建设。 |
异地多活(单元化) | 简称异地多活,分布在多云的多个站点同时对外提供服务。同时,多个站点是不同的云产品服务,也是独立的IAAS和PAAS层集群。由于机房间物理距离较大,因此不能接受跨机房的网络延迟。 |
业务逻辑数据中心 LDC | 对应物理地域,在MSHA的多Region容灾架构中,将逻辑数据中心定义为单元。当异地与同城多活架构嵌套使用时,单元可以嵌套单元格。 |
业务逻辑单元格 | 单元格,对应物理可用区。在MSHA的单Region多可用区容灾架构中,将逻辑数据中心定义为单元格。 |
MSFE | MSFE是一个基于Tengine的多活组件,全称为MSHA-FRONT-END,由MSHA产品提供的流量网关,负责⼊口流量的分发及路由。 |
安全性
多活容灾数据安全
多活容灾服务提供客户端加密和服务器加密,可有效防止数据在云端的潜在安全风险。
MSHA SDK获取到并落盘的数据是经过加密的,加密密钥是管控分配并且经过二次加密。在实际运行过程中,SDK会先用MSHA解密算法解密密钥,然后再用该密钥来解密数据,通过双重加密对数据进行保障,数据加密算法为AES算法。
MSHA的服务端推送数据经过双重加密,MSHA管控会为每个多活实例分配独有的加密密钥,用户密钥是MSHA经过自身的密钥经过加密后推送到配置中心的,在管控向配置中心推送数据时,会用该加密密钥进行加密,数据加密算法为AES算法。
多活容灾服务关联角色
MSHA服务关联角色(AliyunServiceRoleForMSHA)是为了完成MSHA自身的某个功能,需要获取其他云服务的访问权限,而提供的RAM角色。关于服务关联角色的更多信息,请参见服务关联角色。
MSHA在以下场景需要通过服务关联角色功能获取其他云服务资源的访问权限:
接入层集群管控功能需要访问ECS、SLB云服务的资源。
接入层域名管控功能需要访问云解析云服务的资源。
Kubernetes多活管控功能需要访问PrivateZone云服务及ACK云服务的资源。
数据层多活管控功能需要访问RDS、DRDS、DTS云服务的资源。
多活规则管控功能需要访问ACM云服务的资源。
注意事项
MSHA支持的模块列表
MSHA仅部分组件支持异地双活,在接入前需提前确认业务所使用的框架和组件,确认需要实现异地多活的组件在MSHA的支持清单内,支持的模块组件参见MSHA支持模块列表中异地多活(单元化)场景。
MSHA使用限制
在使用多活容灾MSHA时,需要提前了解使用限制,包括支持的框架版本要求,以免程序出现异常。如果您使用的框架版本不在支持范围内,请升级到支持的版本。
实施步骤
实施准备
已开通应用高可用服务AHAS铂金版。
确保业务应用已在阿里云ECS或者容器服务ACK上进行部署,并且在两个不同的地域均存在应用部署。
确保各地域VPC之间已经实现网络互通,可以基于阿里云产品云企业网CEN实现网络互通。具体操作,请参见使用云企业网实现跨地域跨账号VPC互通(企业版)。
实施规划
本次实施将完成异地双活的接入层环境搭建,具有基于灵活的规则调度、跨地域管控的能力,保障故障场景下的业务快速恢复,助力企业的容灾稳定性建设。当地域级的灾难发生时,业务基于一键切流的能力实现跨地域的容灾能力。关键部署说明如下:
使用应用高可用服务AHAS服务完成接入层模块的开通与业务设置,AHAS会引导用户开通业务所需的模块,并创建对应的业务逻辑数据中心(业务LDC)。
使用ECS + SLB搭建MSFE接入层集群。MSFE是一个基于Tengine的多活组件,需要多单元部署,能够承载所有的单元前端流量,并按照路由规则路由到正确单元的后端应用。AHAS控制台提供MSFE集群新建、扩容以及缩容等常规运维能力。
在AHAS控制台创建多活实例,并进行全局路由配置。通过路由标签解析,设置两个单元的流量分布。
实施时长
在实施准备工作完成的情况下,本方案实施预计时长:1.5小时。
操作步骤
产品模块开通
进入多活容灾管控控制台-多活基础下的模块开通页面。
在模块开通页面中,勾选实际业务需要部署的阿里云地域。本方案选择杭州和上海Region作为应用的两个业务单元。
根据业务模块和容灾要求,选择所需要实现异地双活的产品模块。本方案中选择使用MSFE作为接入层,其他产品模型暂不进行配置。
在下方确定预估费用后,点击保存配置即可完成多活基础中产品模块的开通。
创建业务LDC
进入多活容灾管控平台-业务LDC页面,点击新增业务LDC。
根据需要接入的实际业务,填写业务类型名称以及业务类型标识,其中业务类型标识是业务的唯一标识。
在LDC区域,点击添加逻辑单元,配置杭州和上海两个逻辑单元:
选择业务单元所在的地域,地域的选择需与模块开通时的地域保持一致。
填写逻辑单元名称和标识,该标识为逻辑单元的唯一标识。
选择该逻辑单元是否为中心单元,中心单元仅支持选择一个,另一个默认为普通单元。
选择该逻辑单元对应的资源所在的所有可用区。
点击添加逻辑单元格,输入逻辑单元格标识、逻辑单元格名称以及可用区。设置可用区后,在该可用区内启动的应用实例均属于该单元格。流量隔离选填,开启后该单元格的流量比例固定为0%,需要配置自定义的流量规则,才会引流到该单元格。
所有信息填写完毕后,点击确定即可完成业务LDC的配置。
配置MSFE接入层集群
在配置MSFE集群之前,首先需要在杭州和上海均创建ECS和SLB实例:
创建ECS实例,并为安全组开放8090端口
创建CLB实例,并创建SLB监听用于步骤a创建的ECS实例
录入ECS和SLB实例:
进入多活容灾管控平台-资源管理-ECS,分别选择业务LDC中配置的地域,点击同步ECS,勾选在步骤1创建的ECS实例,确认无误后点击确认完成ECS资源的录入。
进入多活容灾管控平台-资源管理-CLB,分别选择业务LDC中配置的地域,点击同步CLB,勾选在步骤1创建的CLB实例,确认无误后点击确认完成CLB资源的录入。
点击多活容灾管控平台-资源管理-接入层集群,分别选择业务LDC中配置的地域,在MSFE Tab页下点击新建集群,在填写好参数后点击确定即可。
集群协议选择http
网络类型选择VPC网络
选择最新的集群版本
勾选在步骤2-a中配置好的ECS实例
在创建完成的集群中点击新增CLB,将步骤2-b中配置好的CLB实例添加到集群,即可完成MSFE集群的创建。
创建多活实例
前置任务:多活实例使用Nacos进行管控命令的下发,因此在此之前需要提前在杭州和上海分别创建MSE注册配置中心。
进入多活容灾管控平台-多活实例页面,点击新建多活实例。在多活实例基础信息中,填写多活实例的名称、对应的业务LDC、多活架构类型以及所需要的多活组件。配置完成后点击下一步进入管道命令通道的配置。
在管控命令通道配置的页面中,我们选择对应的逻辑单元以及逻辑单元格,并在管控命令通道中填写在步骤1创建的MSE实例地址、命名空间以及对应的VPC ID。
配置完成后点击下一步,进入接入层集群的配置。在接入层集群的配置中,我们选择在提前创建好的MSFE集群即可。至此,我们完成了多活实例的创建。
全局路由和接入层配置
在多活容灾管控平台-多活实例页面点击创建完成的多活实例,进入实例详情页面。点击全局路由配置,为接入层配置路由规则。在本方案中,业务应用在HTTP Parameter中存在uid参数,可使用uid作为路由标签,用于业务流量的解析和分流。
在全局路由配置完成后,可对MSFE接入层进行配置。在多活容灾管控平台-接入层配置页面,点击新建域名。
接入类型可选择域名活着IP任意一种方式接入,本方案选择IP进行接入,这个IP是单元的Frontend Service对外提供的IP,可选择MSFE集群中CLB的公网地址作为IP填入。
纠错类型选择反向代理,将非本单元的请求跨单元代理到正确单元的应用SLB中。
从协议下拉列表中选择http协议。
生效集群并选择之前创建好的MSFE集群。
点击创建好的域名操作栏中的URI,添加URI解析。其中回源应用信息的输入格式为
IP:PORT
,多个回源应用用半角逗号相隔。在URI配置完毕后,多活实例会对Upstream定期发起健康检查,不健康的Upstream会被标记出来。在所有内容配置完毕后,点击目标域名右侧的生效即可。至此,可以使用配置的域名或者IP访问到目标应用。
多活切流
多活的核心功能是切流,在配置完多活实例后,将介绍在异地双活中如何创建切流任务并查看切流详情。
在多活容灾管控平台-多活实例页面,点击新建切流单,填写切流单的名称以及切流相关描述。
选择容灾场景,比如勾选单元故障,将故障单元内的流量切0,流量全部分配到正常单元。
点击下一步进入容灾切换预览页面,确认切换前后的流量变化。确认无误后点击执行预检查,预检通过后点击切换执行即可完成切流。
完成切流后可切流单页面上查看切流记录,以及切流的执行情况。