华为云MAS多活高可用服务完整对接指南(含SDK代码示例)
华为云MAS多活高可用服务完整对接指南(含SDK代码示例)
在数字化业务持续演进的今天,系统高可用已成为企业核心诉求。传统单数据中心架构面临单点故障风险,同城灾备资源利用率低、切换耗时久,异地多活又存在技术门槛高、成本高昂等问题。华为云多活高可用服务(Multi‑Site High Availability Service,简称MAS)源自华为消费者业务多年高可用实践,提供从流量入口、应用层到数据层的端到端多活容灾能力,覆盖同城双活、两地三中心、异地多活(单元化)等主流场景,帮助企业实现秒级故障切换(RTO)与数据恢复(RPO),保障业务连续稳定运行。
本文将从MAS核心概念与架构入手,系统讲解控制台配置、SDK集成、数据源路由、容灾验证及最佳实践,全程配套完整代码示例,帮助技术人员快速完成MAS对接与落地。
一、MAS核心概念与架构原理
1.1 核心定义与价值
MAS是华为云推出的一体化多活高可用服务,核心定位是端到端业务容灾与流量治理平台,核心价值在于:
- 业务级高可用:实现流量、应用、数据三层联动,故障时自动切换,业务无感知;
- 秒级RTO/RPO:相比传统灾备小时级切换,MAS可实现秒级恢复,极大降低业务损失;
- 资源高效利用:多数据中心同时承接流量,避免传统灾备中心资源闲置,利用率提升3倍以上;
- 全链路可视化:从控制台统一管理多活实例、监控、数据同步链路,支持容灾演练与故障复盘。
1.2 核心架构组成
MAS整体架构可概括为“一平台三核心”,各组件协同实现多活能力:
- 多活管理中心(MAS‑Console):控制台核心,负责命名空间管理、多活实例创建、应用注册、监控配置、数据同步链路管理及容灾切换触发,是整个MAS的控制中枢;
- 流量接入层(MAS‑API):高性能流量网关,支持跨数据中心流量调度、负载均衡与故障熔断,适配HTTP/HTTPS协议,可对接华为云APIG、SLB等流量入口;
- 应用改造层(MAS‑SDK):提供Java(SpringBoot/Spring)、Python等多语言SDK,核心能力是动态数据源路由、故障感知、强制路由,帮助传统应用无侵入改造为多活应用;
- 数据同步层(MAS‑DCG):数据复制核心,支持MySQL、Redis、MongoDB等主流数据库的跨数据中心同步,提供异步双写、半同步同步等模式,保障多数据中心数据一致性。
1.3 典型适用场景
MAS适配企业不同阶段的容灾需求,主流场景包括:
- 同城双活:同一城市两个可用区(AZ)部署对等业务,实时同步数据,故障时秒级切换,适合金融、电商等核心业务;
- 两地三中心:同城双活+异地灾备,日常同城双活承载流量,异地中心异步同步数据,极端故障时异地接管,兼顾性能与数据安全;
- 异地多活(单元化):跨地域部署多个独立业务单元,按用户维度分片路由,单元故障不影响全局,适合大型互联网、物流等全球化业务;
- 数据库容灾:仅聚焦数据库层多活,通过MAS‑SDK实现读写分离、故障切换,适配中小应用快速容灾落地。
二、MAS对接前置条件
在正式对接MAS前,需完成以下准备工作,确保流程顺畅:
- 华为云账号与权限:注册华为云账号并完成实名认证,为操作账号授予MAS管理员权限(含创建实例、配置监控、管理数据同步等);
- 网络规划:多数据中心间网络互通(推荐华为云VPC对等连接或专线),开放MAS‑SDK与etcd通信端口(2379)、数据库端口(如MySQL 3306);
- 数据库准备:多数据中心部署同类型数据库(版本一致),初始化相同库表结构,创建监控专用只读账号(避免影响业务库);
- 应用环境:SpringBoot(2.0+)或Spring(4.0+)项目,Maven/Gradle构建,JDK 8+。
需要先登录华为云控制台,点击:华为云控制台,还没有账号,点击:注册并关联,已有账号点击:登录后关联
三、MAS控制台核心配置流程
控制台配置是MAS对接的基础,核心流程为:开通服务→创建命名空间→购买多活管理中心→创建应用→配置监控→添加数据源→创建同步链路。以下分步详细说明:
3.1 开通MAS服务
- 登录华为云控制台,在“产品”→“中间件”→“多活高可用服务 MAS”进入服务页面;
- 点击“开通服务”,选择多活版本(同城多活/异地多活)与数据源功能点(MySQL/Redis/MongoDB等),确认开通(新用户可免费体验7天);
- 开通成功后,进入MAS总览页面,查看服务状态与资源配额。
3.2 创建命名空间
命名空间用于逻辑隔离多活资源(实例、应用、监控),支持按环境(开发/测试/生产)或业务线划分。
- 在MAS控制台左侧导航栏选择“命名空间”→“创建命名空间”;
- 配置核心参数:
• 命名空间名称:自定义(如prod‑mas‑ns);
• 命名空间类型:选择“同城多活”(本文示例)或“异地多活”;
• 描述:备注用途(如生产环境同城双活命名空间); - 点击“确定”,完成命名空间创建。
3.3 购买多活管理中心(创建多活实例)
多活管理中心是MAS的核心实例,负责管理对应命名空间下的所有多活资源,需按业务规模选择版本。
- 在MAS控制台左侧导航栏选择“多活实例”→“购买多活管理中心”;
- 配置核心参数:
• 命名空间:选择3.2创建的命名空间;
• 实例名称:自定义(如prod‑mas‑instance);
• 版本规格:铂金版(华为云内业务)/企业版(混合云);
• 可用区:选择主可用区(如az0);
• 资源规格:按业务并发选择(如2核4G); - 点击“立即购买”,等待实例创建完成(约5‑10分钟);
- 实例创建成功后,进入实例详情页,记录etcd地址、用户名、密码(后续SDK集成必需)。
3.4 创建MAS应用
应用是MAS管理业务的最小单元,一个多活实例可创建多个应用,所有监控、数据源需归属到应用下。
- 进入多活实例详情页,选择“应用管理”→“创建应用”;
- 配置核心参数:
• 应用名称:自定义(如order‑service);
• 应用描述:备注业务用途(如订单服务多活应用);
• 监控类型:选择“数据库监控”(MySQL); - 点击“确定”,完成应用创建,记录应用ID(appId)(SDK集成必需)。
3.5 配置数据库监控(MySQL示例)
监控用于实时探测数据库健康状态,故障时自动触发流量切换,支持MySQL、Redis、MongoDB等。以MySQL为例:
- 进入多活实例详情页,选择“监控管理”→“创建监控”;
- 选择监控类型:“MySQL监控”,点击“下一步”;
- 配置基础信息:
• 监控名称:自定义(如order‑mysql‑monitor);
• 应用:选择3.4创建的应用;
• 异常通知:可选(对接SMN服务,故障时短信/邮件告警);
• 自动切换:开启(故障时自动切换流量);
• 路由算法:选择“单读写、本地读、异步双写”(同城双活推荐); - 配置数据中心(主备两个):
• 数据中心名称:dc1(主)、dc2(备);
• 连接地址:主库IP:3306、备库IP:3306;
• 数据库名:业务库名(如order_db);
• 用户名/密码:监控专用只读账号;
• 点击“测试连通性”,确保连接正常; - 点击“下一步”→“确定”,完成监控创建,记录监控ID(monitorId)(SDK集成必需)。
3.6 添加数据源与创建同步链路
数据源用于注册多数据中心数据库信息,同步链路用于实现跨数据中心数据复制,保障数据一致性。
- 添加数据源:
进入MAS控制台“数据管理”→“数据源”→“添加数据源”,选择MySQL类型,填写dc1与dc2数据库连接信息,归属到对应命名空间与应用,保存即可; - 创建同步链路:
进入“数据管理”→“数据同步”→“创建同步链路”,选择源数据源(dc1)、目标数据源(dc2),同步模式选择“异步双写”,启动链路,等待同步状态变为“正常”。
四、应用集成Mas‑DB‑SDK(核心对接)
控制台配置完成后,需通过Mas‑DB‑SDK改造应用,实现动态数据源路由、故障感知与流量切换,支持SpringBoot与Spring项目。以下分两种场景详细说明,全程附完整代码示例。
4.1 SpringBoot项目集成(主流场景)
4.1.1 引入Maven依赖
在pom.xml中引入Mas‑DB‑SDK核心依赖与数据库连接池依赖(HikariCP推荐):
<!-- MAS‑DB‑SDK核心依赖 -->
<dependency>
<groupId>com.huaweicloud.devspore</groupId>
<artifactId>spring-cloud-starter-huawei-devspore-datasource</artifactId>
<version>1.2.1-RELEASE</version>
</dependency>
<!-- HikariCP连接池(必选) -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>4.0.3</version>
</dependency>
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
4.1.2 配置application.yaml
在src/main/resources下创建application.yaml,配置分为props(基础信息)、etcd(连接信息)、sources(数据源)、router(路由规则)四部分,需与控制台配置对应:
spring:
application:
name: order-service
# MAS‑DB‑SDK配置
devspore:
datasource:
# 基础配置(控制台获取)
props:
version: v1
appId: 你的应用ID(3.4获取)
monitorId: 你的监控ID(3.5获取)
databaseName: order_db
region: az0
# etcd配置(多活实例详情页获取)
etcd:
address: 127.0.0.2:2379,127.0.0.2:2379
apiVersion: v3
username: etcduser
password: etcdpwd
httpsEnable: false
# 数据源配置(dc1主库、dc2备库)
sources:
# dc1主数据源
ds1:
driverClassName: com.mysql.cj.jdbc.Driver
jdbcUrl: jdbc:mysql://dc1‑mysql‑ip:3306/order_db?useSSL=false&serverTimezone=UTC
username: 数据库用户名
password: 数据库密码
type: com.zaxxer.hikari.HikariDataSource
props:
connectionTimeout: 30000
maximumPoolSize: 200
# dc2备数据源
ds2:
driverClassName: com.mysql.cj.jdbc.Driver
jdbcUrl: jdbc:mysql://dc2‑mysql‑ip:3306/order_db?useSSL=false&serverTimezone=UTC
username: 数据库用户名
password: 数据库密码
type: com.zaxxer.hikari.HikariDataSource
props:
connectionTimeout: 30000
maximumPoolSize: 200
# 路由规则配置
router:
active: dc1 # 默认主数据中心
routeAlgorithm: single-read-write # 单读写模式
nodes:
dc1:
master: ds1
loadBalance: ROUND_ROBIN
dc2:
master: ds2
loadBalance: ROUND_ROBIN
4.1.3 启动类配置
在SpringBoot启动类上添加@EnableDevSporeDataSource注解,启用MAS数据源自动配置:
import com.huaweicloud.devspore.datasource.spring.boot.autoconfigure.EnableDevSporeDataSource;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableDevSporeDataSource # 启用MAS‑DB‑SDK数据源
public class OrderServiceApplication {
public static void main(String[] args) {
SpringApplication.run(OrderServiceApplication.class, args);
}
}
4.1.4 强制路由注解使用(可选)
支持在类级别或方法级别通过@DevSporeDataSource注解强制指定数据源,适用于特殊业务场景(如查询强制走备库):
import com.huaweicloud.devspore.datasource.annotation.DevSporeDataSource;
import org.springframework.stereotype.Service;
// 类级别:强制使用dc2数据源
@Service
@DevSporeDataSource("dc2")
public class OrderQueryService {
// 方法级别:强制使用dc1数据源(优先级高于类级别)
@DevSporeDataSource("dc1")
public Order getOrderById(Long id) {
// 业务查询逻辑
return new Order();
}
}
4.2 Spring项目集成(非SpringBoot场景)
4.2.1 引入Maven依赖
pom.xml引入Spring版Mas‑DB‑SDK依赖:
<!-- MAS‑DB‑SDK Spring依赖 -->
<dependency>
<groupId>com.huaweicloud.devspore</groupId>
<artifactId>devspore-datasource</artifactId>
<version>1.2.1-RELEASE</version>
</dependency>
<!-- 其他依赖同SpringBoot -->
4.2.2 创建MAS配置文件
在src/main/resources下创建devspore-datasource.yml,配置内容同SpringBoot的application.yaml(去除spring配置)。
4.2.3 手动创建数据源Bean
在Spring配置类中通过YamlClusterDataSourceFactory创建MAS数据源Bean:
import com.huaweicloud.devspore.datasource.factory.YamlClusterDataSourceFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
import java.io.IOException;
@Configuration
public class MasDataSourceConfig {
@Bean
public DataSource dataSource() throws IOException {
// 加载MAS配置文件
return YamlClusterDataSourceFactory.createDataSource("devspore-datasource.yml");
}
}
五、容灾切换验证与测试
集成完成后,需验证正常流量路由、故障自动切换、恢复自动切回三大核心能力,确保MAS多活生效。
5.1 正常流量验证
- 启动应用,调用业务接口(如创建订单);
- 查看数据库日志,确认写请求路由到dc1主库,读请求按路由规则分发;
- 查看MAS控制台监控页面,确认dc1数据库状态正常,流量接入正常。
5.2 故障自动切换验证
- 手动停止dc1主库数据库服务(模拟故障);
- 观察MAS控制台:监控状态变为“异常”,自动触发流量切换到dc2备库(约1‑3秒);
- 调用业务接口,确认业务正常响应,数据写入dc2备库;
- 查看应用日志,确认数据源自动切换为ds2。
5.3 恢复自动切回验证
- 重启dc1主库数据库服务,等待数据同步完成;
- MAS控制台自动探测到dc1恢复正常,流量自动切回dc1主库;
- 确认业务无中断,数据一致性正常。
六、常见问题排查与最佳实践
6.1 常见问题排查
- SDK连接etcd失败:检查etcd地址、端口、用户名密码是否正确,网络是否互通,防火墙是否开放2379端口;
- 数据源切换不生效:确认@EnableDevSporeDataSource注解存在,配置文件appId、monitorId与控制台一致,路由算法配置正确;
- 数据同步延迟大:检查同步链路状态,调整同步模式(同城推荐半同步),优化网络带宽;
- 监控告警频繁:检查监控账号权限(只读),调整监控探测间隔,排除网络抖动问题。
6.2 最佳实践
- 监控账号最小权限:仅授予监控账号SELECT权限,避免误操作业务数据;
- 同步链路定期校验:每周手动触发数据一致性校验,确保主备数据一致;
- 容灾演练常态化:每月进行1‑2次故障切换演练,验证容灾能力,优化切换流程;
- 资源规格合理规划:多活实例与数据库规格按业务峰值配置,避免性能瓶颈;
- 日志监控一体化:对接华为云AOM/APM,集中监控应用、数据库、MAS日志,快速定位问题。
七、总结
华为云MAS多活高可用服务通过“控制台管控+SDK改造+数据同步”的一体化方案,帮助企业快速构建端到端多活容灾能力,解决传统灾备资源利用率低、切换慢、成本高的痛点。本文从核心概念、控制台配置、SDK集成、容灾验证到最佳实践,系统讲解了MAS对接全流程,配套完整代码示例,技术人员可直接参考落地。
随着企业业务对高可用要求不断提升,MAS将持续迭代,支持更多数据库类型与多活场景,助力企业实现业务连续稳定运行,从容应对各类故障风险。
常见问答
Q1:MAS支持哪些数据库类型?
A1:MAS主流支持MySQL、Redis、MongoDB、PostgreSQL、Elasticsearch等,覆盖关系型、非关系型数据库及搜索引擎。
Q2:SpringBoot集成MAS必须使用HikariCP连接池吗?
A2:不是必需,支持HikariCP、Druid、commons‑dbcp2等主流连接池,HikariCP性能最优,推荐使用。
Q3:MAS故障切换需要人工干预吗?
A3:默认开启自动切换,故障时MAS自动探测并切换流量,无需人工干预;也可关闭自动切换,手动触发切换。
Q4:同城多活和异地多活的核心区别是什么?
A4:同城多活:同一城市两个可用区,延迟低(毫秒级),适合核心业务;异地多活:跨地域部署,延迟较高(百毫秒级),适合全球化、单元化业务。
Q5:MAS对接是否需要修改大量业务代码?
A5:不需要,通过Mas‑DB‑SDK注解方式实现数据源路由,无需修改核心业务逻辑,改造量小,风险低。
Q6:MAS如何保障多数据中心数据一致性?
A6:通过MAS‑DCG数据同步链路,支持异步双写、半同步同步等模式,实时复制数据,定期校验一致性,保障多数据中心数据一致。




