华为云多活高可用服务MAS从入门到实战:架构解析、对接配置与最佳实践指南
目录
- 一、认识华为云多活高可用服务MAS
- 二、MAS的核心架构与核心能力
- 三、MAS的五大应用场景
- 四、MAS对接全流程:以MySQL与Redis为例
准备工作与前置条件
创建MAS命名空间
购买并配置MAS多活实例
创建MAS应用
配置数据监控——MySQL监控与Redis监控 - 五、应用侧SDK接入实战:Spring Boot项目对接MAS
引入MAS-DB-SDK依赖
获取SDK接入配置
配置application.yaml文件
在代码中创建并使用DataSource
MAS-Mongo-SDK与MAS-Redis-SDK接入要点 - 六、混沌工程——让系统在演练中更坚韧
- 七、低成本构建多活架构的五条实践建议
- 八、常见问答(FAQ)
一、认识华为云多活高可用服务MAS
企业在业务扩张进程中会遭遇众多瓶颈:单一可用区或地域难以承载高可靠性诉求,系统容量逼近性能上限或访问延迟无法达到预期标准,云厂商技术锁定导致难以获取前沿技术和价格优势,以及业务指数级扩张带来的架构压力。这些挑战倒逼企业寻求更高阶的高可用解决方案。
多活高可用服务(Multi-Site High Availability Service,简称MAS)正是在此背景下应运而生的。它源自华为消费者多活应用高可用方案,提供从流量入口、数据到应用层的端到端业务故障切换及容灾演练能力,在故障场景下快速恢复业务,显著提升业务连续性。MAS不仅仅是一个单一产品,本质上它是一个完整的应用多活高可用解决方案,能够在同城场景下实现多活故障自动切换,由MAS服务与应用层SDK协同完成。
多活高可用服务MAS源自华为消费者多活应用高可用方案,提供从流量入口、数据到应用层的端到端的业务故障切换及容灾演练能力,保障故障场景下的业务快速恢复,提升业务连续性。具体而言,MAS等于多活接入服务加上应用层SDK,再加上数据同步管道和统一管控中心。而一个完整可落地的多活方案则需要技术产品MAS、咨询服务、生态伙伴和容灾规范共同构成。
从RTO与RPO来看,MAS能够实现秒级的恢复时间目标和数据恢复点目标,这在业界具有显著优势。双活架构下可以达到RPO为0、RTO达秒级,可用性高达99.99%,而多地多活架构更能实现秒级RPO、分钟级RTO和99.995%的超高可用性。
需要先登录华为云控制台,点击:华为云控制台,还没有账号,点击:注册并关联,已有账号点击:登录后关联
二、MAS的核心架构与核心能力
要理解MAS的运作原理,首先需要熟悉两个基本概念:Region(区域)和可用区(Availability Zone,简称AZ)。Region从地理位置和网络时延维度划分,同一个Region内共享计算、存储、网络等公共服务。每个Region由多个AZ构成,一个AZ是一个或多个物理数据中心的集合,拥有独立的基础设施,不同AZ之间通过高速光纤连接,为企业构建跨AZ的高可用系统提供了物理基础。
MAS的架构可以概括为“端到端”全覆盖,涵盖管理面、流量入口、应用层和数据层的全链路仲裁和多活容灾管控。它通过以下几个核心组件协同工作:多活接入服务负责流量入口的管理和调度;应用层SDK嵌入业务代码,实现了数据库层面的读写分离和故障感知;数据同步管道确保跨数据源的数据一致性;统一管控中心提供全局的可视化运维和故障切换策略管理。
MAS还具备混沌工程能力。混沌工程是一种通过主动向系统引入故障来识别并修复系统未知隐患的工程实践。MAS内置的CAST混沌工程服务提供了丰富的故障模式库,支持通过编排攻击目标、攻击策略进行故障注入,同时可以添加背景流量和资源监控,帮助企业在真实故障发生前就发现系统弱点。
MAS的六项核心能力可以具体归纳为:第一,端到端的仲裁和多活容灾管控;第二,安全可靠的数据同步管道;第三,可落地的多活容灾标准规范;第四,低成本的容灾演练能力;第五,咨询加专业实施服务;第六,流量、业务、数据的端到端可用保障。正是这些核心能力,奠定了MAS在企业高可用架构中的基石地位。
三、MAS的五大应用场景
MAS覆盖了从基础灾备到极致高可用的全系列场景,企业可以根据自身的可用性需求和成本预算灵活选择。
场景一:同城灾备。适用于容灾可用性要求达到99.9%,业务分布在同一个地域的场景。该模式下支持同城跨AZ的应用和数据灾备,主备之间通过数据同步保持一致性,灾难发生时业务可以切换到备AZ。
场景二:同城双活。将可用性要求进一步提升至99.95%,要求业务双活,同城跨AZ的应用数据多活,并分担部分业务流量。相较于主备模式,双活架构下两个AZ都在处理业务请求,资源利用率更高,故障切换也更加平滑。
场景三:两地三中心。可用性要求达到99.99%,同时进行跨AZ和跨Region容灾。在同城双活的基础上增加了异地灾备中心,形成最高程度的业务连续性和数据可用性保障。
场景四:异地多活(单元化)。适用于容灾可用性要求达到99.99%以上,业务对时延敏感,且数据需要分区化的场景。通过分区化管理加应用数据多活,系统可扩展性强,可以随时增加新的分区。
场景五:混沌工程。适用于向被测系统主动引入故障,通过故障注入、故障演练的方式提升系统可靠性。MAS的混沌工程能力可以独立于实际容灾架构使用,作为日常稳定性建设的组成部分。
在读写分离场景下,MAS支持多种路由策略。single-read-write(单读写)模式类似于主备库,所有读写操作都路由到active节点,节点之间通过DRS进行数据同步保证数据一致。local-read-single-write(本地读单写)适用于读多写少的场景,读操作根据路由算法读取近端节点,写操作遵循写入active节点。在Redis场景下还支持double-write(双写)模式,写操作同步写入近端Redis,同时异步发送到远端,无需外部数据同步。
四、MAS对接全流程:以MySQL与Redis为例
下面以最常见的MySQL数据库场景为主线,完整演示MAS的对接流程。
4.1 准备工作与前置条件
在使用MAS之前,需要确保已经完成了基础准备。首先需要有已注册并开通的华为云账号,同时登录账号需拥有使用MAS的权限。如果当前账号权限不足,需要在IAM控制台中创建用户并赋予相应权限进行授权。
对于数据源的准备,以MySQL为例,需要提前准备一个MAS多活实例和两个MySQL数据库实例。这两个数据库既可以购买华为云RDS for MySQL实例,也可以在自己本地的两台机器上部署。最佳的实践是将两个数据库部署在同一Region下的不同可用区,以实现不同可用区之间的故障转移能力。两个MySQL数据库需要配置相同的数据库名称、用户名和密码。建议在数据库实例中专门创建一个独立于业务数据库的监控数据库,用于MAS探测连接,授予只读权限以避免安全风险。
网络层面的准备工作同样关键:需要为数据库绑定弹性公网IP或确保MAS实例与RDS实例处于相同的VPC和安全组中,并在安全组规则中开放MySQL的默认端口3306。如果在网络连接不稳定的场景下使用MAS,需要注意MAS对网络时延有明确要求,通常要求在5毫秒以内,以保障探活和切换的准确性。
4.2 创建MAS命名空间
命名空间是实现多活架构的逻辑隔离单元。创建命名空间时分区类型需要选择“华为云”,空间名称可自定义(如namespace-demo),主备可用区分别选择两个不同的可用区(如az1和az2)。命名空间类型需选择“同城多活”,这是后续配置多活实例的基础。选择创建完成后,系统会自动为命名空间配置网络,包括子网、安全组等,这些需要与后续的多活实例网络互通。
4.3 购买并配置MAS多活实例
完成命名空间创建后,就可以购买MAS多活管理中心实例了。进入MAS控制台,在多活管理页面单击右上角的购买多活管理中心,根据业务需求选择实例规格和计费模式。多活实例的类型需与命名空间类型匹配(同为同城多活类型),实例规格选择与业务规模匹配。创建实例后,实例状态会从创建中最终变为运行中。
需要注意的是,如果在创建实例时遇到状态显示为“创建异常”的提示,可能是资源可用配额不足。可以从以下几个方面排查:检查提示的错误信息,如CPU核心数资源耗尽、所选可用区没有可用规格、可用区虚拟机资源售罄等,通过删除无用实例空出配额或申请扩大实例配额来解决。
4.4 创建MAS应用
MAS通过应用来实现同一实例内不同用户间的资源隔离,所有在实例中创建的监控都需要归属到某个应用下。进入MAS控制台后,在多活管理页面单击已创建的实例,进入实例控制台。在页面顶端导航栏选择应用列表,单击左上角的新增应用按钮,在弹出的窗口中填写应用名称和描述信息,完成后确认即可创建完成。应用创建完成后会生成唯一的应用ID,该ID将在后续的SDK配置中用到。
4.5 配置数据监控——以MySQL为例
以上准备工作全部完成后,就可以开始配置核心的数据监控组件了。多活实例本身提供了统一的管控能力,而数据监控则具体负责对数据库的健康探测和自动切换决策。以MySQL监控为例,完整的配置流程如下。
登录MAS控制台,在多活管理页面单击实例进入实例控制台,在页面顶端导航栏选择监控列表,单击新增监控。在新增监控页面中,监控类型选择MySQL监控,应用名称选择前面创建的应用,监控器名称自定义填写。
在基础配置部分,异常通知设置可以根据实际需要开启或关闭,如果开启则需要配置华为云消息通知服务的密钥,这样当监控器或被监控的数据库出现异常时会及时发送通知。是否监控选择是,MAS会持续探测数据库的异常情况。是否自动切换选择是,这样在检测到主数据库异常时,MAS会自动将流量切换到备数据库。监控用户名和密码填写两个MySQL数据库中配置的相同用户名和密码。
MySQL特有的DRS联动配置,用于关联华为云数据复制服务实现数据同步。如果两个MySQL数据库之间需要通过DRS保持数据同步,此处配置为开并关联对应的DRS任务。
在数据中心配置阶段,分别配置数据中心1和数据中心2的信息,包括云选择、局点(Region)、数据库的IPv4地址和端口。如果配置了读写分离,还可以通过添加读库地址来添加多个只读库,并配置读库的负载均衡算法,支持RANDOM(随机)和ROUND_ROBIN(轮询)两种策略。
最后在数据库配置中填写监控数据库和连接数据库的名称。特别提醒一点:监控数据库建议使用独立的数据库,不与业务数据库共用,并且仅授权读取类权限以避免安全风险。连接数据库是应用实际连接的数据库,支持配置多个,每个数据库可以在连接池配置中选择使用不同的路由算法。完成所有配置后确认无误,点击立即创建即可创建MySQL监控。
对于Redis场景,配置流程与MySQL类似,但路由策略更丰富。Redis监控支持single-read-write(单读写)、local-read-single-write(本地读单写)和double-write(本地读双写)三种模式,其中double-write模式又分为内存双写和文件双写两种方式。
对于MongoDB场景,配置步骤类似,需要先在MAS控制台中新增MongoDB监控,配置监控基础信息、数据中心配置和数据库配置。MongoDB监控同样支持在数据库异常时自动或手动触发流量切换。连接池配置也可以在MAS控制台中进行,包括配置连接池大小、超时时间等参数。
五、应用侧SDK接入实战:Spring Boot项目对接MAS
MAS监控器配置完成后,应用侧需要集成MAS提供的SDK,才能真正实现数据库层面的读写分离和故障自动切换。下面以Spring Boot项目中接入MAS-DB-SDK(以MySQL场景为例)进行详细讲解。
5.1 引入MAS-DB-SDK依赖
在项目的pom.xml文件中添加MAS-DB-SDK的依赖坐标。需要根据实际使用的Spring Boot版本选择合适的MAS SDK版本,建议查阅华为云MAS开发指南中的版本对应关系。依赖格式如下:
<properties>
<!-- 以最新的版本号为准 -->
<mas.version>1.3.0-RELEASE</mas.version>
</properties>
<dependency>
<groupId>com.huaweicloud.devspore</groupId>
<artifactId>spring-cloud-starter-huawei-devspore-datasource</artifactId>
<version>${mas.version}</version>
</dependency>如果项目本身自带如HikariCP等数据库连接池驱动,MAS-SDK会自动接管并替换原有的DataSource,因此无需额外添加其他依赖。对于MongoDB场景,需要引入对应的MAS-Mongo-SDK依赖:
<dependency>
<groupId>com.huaweicloud.devspore</groupId>
<artifactId>spring-cloud-starter-huawei-devspore-dds</artifactId>
<version>${mas.version}</version>
</dependency>对于Redis场景,引入MAS-Redis-SDK依赖:
<dependency>
<groupId>com.huaweicloud.devspore</groupId>
<artifactId>spring-cloud-starter-huawei-devspore-redis</artifactId>
<version>${mas.version}</version>
</dependency>5.2 获取SDK接入配置
引入依赖之后,下一步是获取SDK接入配置。登录MAS控制台,在多活管理页面单击已创建的多活实例,进入实例详情页。在页面顶端导航栏选择监控列表,找到已创建的MySQL监控条目,单击右侧操作列中的“更多”按钮,然后选择“SDK接入配置”,系统会弹出一个包含核心配置信息的窗口。
需要注意的是,此处获取的YAML配置不会携带MySQL数据库的用户名和密码信息。在使用时需要补充完整,必须与创建MySQL监控时配置的数据中心1和数据中心2的数据库用户名和密码相对应。同时还需要确保etcd地址的可用性。
5.3 配置application.yaml文件
将上一步获取的配置信息补充完整后,添加到Spring Boot项目的application.yaml文件中。MAS-DB-SDK的YAML配置包含四个核心部分:props配置、etcd配置、sources数据源配置以及router路由配置。
devspore:
datasource:
# props配置 - 必选
props:
app-id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx # MAS应用ID,从控制台获取
monitor-id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx # MAS监控器ID
database-name: test_db # 监控数据库名称
version: v1
# etcd配置 - 接入MAS服务时必选
etcd:
address: 127.0.0.1:2379 # etcd地址,从控制台获取
api-version: v3
username: etcduser # etcd用户名
password: etcdpwd # etcd密码
https-enable: true
certificate-path: # 如果启用https且证书路径配置
# 数据源配置 - 必选
sources:
dc1:
username: db_user
password: db_password
url: jdbc:mysql://192.168.1.100:3306/test_db
azs: az1 # 所属可用区
dc2:
username: db_user
password: db_password
url: jdbc:mysql://192.168.1.101:3306/test_db
azs: az2 # 所属可用区
# 路由配置 - 必选
router:
active: dc1 # 当前活跃的数据中心
route-strategy: local-read-single-write # 路由策略配置项完整说明如下:props.app-id对应MAS服务应用列表中的应用ID,props.monitor-id对应MAS监控列表中的监控器ID,props.database-name对应MAS监控的数据库名称。etcd配置中的address、username、password需要与MAS服务实例页面查询到的信息保持一致。sources中的两个数据源dc1和dc2对应两个数据中心的数据库配置,azs字段标注了每个数据库所属的可用区,与命名空间中的可用区配置对应。router.active指定当前活跃的数据中心,router.route-strategy指定路由策略,支持single-read-write和local-read-single-write等模式。
如果项目中已经存在自有的spring-boot-starter-data-jdbc或MyBatis等数据库连接配置,需要将其注释或删除,确保MAS-SDK能够正常接管数据源管理。MAS-SDK通过starter机制自动注入配置好的DataSource,应用代码无需额外加载配置。
5.4 在代码中创建并使用DataSource
配置完成后,可以在业务代码中通过依赖注入的方式使用MAS提供的DataSource实例,无需像使用普通DataSource那样手动创建。原有的数据访问代码基本不需要修改,DAO层代码完全透明。下面是一个使用JdbcTemplate的示例:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import javax.sql.DataSource;
@Repository
public class UserDao {
private JdbcTemplate jdbcTemplate;
@Autowired
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public String getUserNameById(Long id) {
return jdbcTemplate.queryForObject(
"SELECT name FROM user WHERE id = ?",
new Object[]{id},
String.class
);
}
public int updateUser(Long id, String name) {
return jdbcTemplate.update(
"UPDATE user SET name = ? WHERE id = ?",
name,
id
);
}
}关键在于,setDataSource方法中注入的DataSource是MAS-SDK自动配置的增强版本。它内置了读写分离逻辑和故障切换能力。当执行查询操作时,MAS-SDK根据配置的route-strategy决定是路由到active节点还是近端节点;当执行写操作时,全部路由到active节点。如果active节点被监控器检测到异常,MAS会自动将流量切换到备用节点,整个过程对业务代码完全透明。
5.5 MAS-Mongo-SDK与MAS-Redis-SDK接入要点
MAS-Mongo-SDK和MAS-Redis-SDK的接入流程与MAS-DB-SDK类似。对于MongoDB,需要将原有的MongoClient替换为MAS提供的Cluster或MongoTemplate,两者都具备了多活容灾的能力。在代码中可以通过@Autowired注入Cluster,然后执行MongoDB操作:
@Autowired
private Cluster cluster;
// 使用cluster执行MongoDB数据库操作对于Redis场景,MAS-Redis-SDK提供了MultiZoneClient类来替代原生的Jedis或Lettuce客户端,支持在多活场景下的自动切换。配置方式与DB-SDK类似,同样包含props、etcd、sources、router四个配置部分,支持single-read-write、local-read-single-write和double-write三种路由策略。
六、混沌工程——让系统在演练中更坚韧
除了被动容灾能力之外,MAS还提供了混沌工程能力,让企业能够在非生产环境中主动验证高可用架构的有效性。MAS内置的CAST(Chaos Engineering)混沌实验平台具备以下核心功能:
故障模式库:内置了丰富的故障模式供选择,涵盖CPU满载、内存溢出、网络延迟、网络丢包、进程中断、文件系统异常等多种常见故障类型,覆盖了基础设施、网络、应用、数据库等多层级故障场景。故障编排支持创建复杂的混沌实验流程,将多个故障按照时间序列编排组合,模拟更真实的复合故障场景。实验执行过程中,可以指定攻击目标(如特定ECS实例或RDS实例)、攻击策略(如持续时间、影响范围、注入强度等)和攻击时机。同时支持在实验过程中添加背景流量和资源监控,实时观察系统在故障注入后的响应行为。
混沌工程的核心价值在于它帮助企业从被动响应故障转变为主动发现缺陷。通过定期进行混沌演练,可以在真实的容灾切换场景发生之前,提前发现系统的隐蔽缺陷、配置错误、监控盲区和恢复流程的不足之处,从而不断提升系统的韧性。
七、低成本构建多活架构的五条实践建议
第一,从最小可行高可用开始。不用一开始就追求跨地域多地多活,可以先在同城范围内部署主备架构,确认核心流程工作正常之后,再逐步向同城双活、异地多活演进。这种分阶段实施的方式可以有效控制初期投入成本和复杂度。第二,监控数据库独立部署。在配置数据监控时,专门创建一个独立的监控数据库并授予最小的必要权限,仅保留读取类的权限。监控数据库只用于MAS探测连接,验证数据库实例是否存活和响应,绝不在监控数据库中执行任何业务写操作。第三,充分利用华为云内网。MAS实例与数据库实例应尽量部署在同一个VPC内,利用内网地址进行连接,这样可以大幅降低网络延迟,提高探测准确性,同时也节省了公网流量费用。如果数据库实例部署在本地或其他云平台,可以考虑使用专线连接以确保时延满足MAS要求。第四,配置合理的探测策略。MAS切换策略并非单一的探活失败就触发切换,而是允许用户根据实际网络环境和业务要求进行灵活配置。网络不稳定时可以配置成间隔10秒且连续3次失败再触发切换。同时自动故障切换只会自动执行1次,回切操作需要在管理界面上手动完成,这种设计给了运维人员足够的控制权。第五,建立日常混沌演练机制。将混沌实验纳入日常的稳定性建设流程中,而不是只在系统上线时才进行一次演练。可以在每个迭代周期中安排定期的混沌实验,逐步扩大故障注入的范围和复杂度,持续验证容灾配置的有效性并发现新的薄弱点。同时每次演练后形成故障复盘报告,将发现的问题修复方案反馈到代码和配置中,形成改进闭环。
八、常见问答(FAQ)
问:MAS是一个产品还是一个方案?
答:MAS是一个完整的应用多活高可用解决方案,包含多活接入服务、应用层SDK、数据同步管道和统一管控中心。完整可落地的方案还涵盖咨询服务、生态伙伴和容灾规范,而不仅仅是单一产品。
问:MAS负责数据同步吗?
答:MAS主要负责管理面控制和故障切换决策。数据同步通道由端到端多云多活解决方案整体承载,整合华为云各产品的数据同步能力。对于部分不具备数据同步能力的服务,可以借助第三方开源工具进行数据同步。
问:如果网络不稳定,MAS会不会误切换?
答:MAS探测策略是高度灵活的,允许用户自行配置探测间隔和失败次数阈值。例如可以设置间隔10秒且连续3次探测失败才触发切换,避免网络瞬时波动导致的不必要切换。同时自动切换只执行一次,回切需要手动操作。
问:使用MAS对我的应用代码改动大吗?
答:改动很小。只需在项目中引入MAS-SDK依赖并修改YAML配置,原有的数据库访问代码基本无需修改。MAS-SDK通过自动注入增强的DataSource接管数据库连接,对业务代码完全透明。
问:创建MAS多活实例时显示创建异常怎么办?
答:通常是因为可用资源配额不足。可以检查报错信息:CPU核心数不足、所选可用区没有可用规格、可用区虚拟机资源售罄等都是常见原因。可以通过删除无用的实例释放配额,或者提交工单申请扩大实例配额。
问:MAS支持哪些数据源类型?
答:MAS目前全面支持MySQL、Oracle、PostgreSQL、Redis和MongoDB等主流数据源的监控和多活容灾配置。对于不同类型的数据源,MAS提供了对应的SDK和监控配置方式,接入流程基本一致。



