华为云 RDS for MySQL 高可用方案:主备、只读、Proxy 与跨 region

举报
yd_296221794 发表于 2026/11/09 11:05:24 2026/11/09
【摘要】 > RDS 控制台点一下"高可用"不等于业务真的高可用——读写分离、连接池、跨 region 容灾都得自己接。## 背景华为云 RDS for MySQL 提供开箱即用的高可用选项,但"开箱即用"指的是**实例层面的主备自动切换**,不包含业务侧的读写分离、连接重试、跨 region 容灾。本文把笔者一个日均 200 万 QPS 电商库的高可用方案拆成四层讲清。## 第一层:主备切换(RDS...

> RDS 控制台点一下"高可用"不等于业务真的高可用——读写分离、连接池、跨 region 容灾都得自己接。


## 背景


华为云 RDS for MySQL 提供开箱即用的高可用选项,但"开箱即用"指的是**实例层面的主备自动切换**,不包含业务侧的读写分离、连接重试、跨 region 容灾。本文把笔者一个日均 200 万 QPS 电商库的高可用方案拆成四层讲清。


## 第一层:主备切换(RDS 内置)


创建 RDS 时选"主备实例",华为云会在两个 AZ 部署主库和备库,通过 binlog 同步。主库故障时 RDS 自动切换到备库,典型切换时间 30 秒以内。


关键参数:

- **同步模式**:`async`(异步)性能最好但可能丢已提交事务;`semisync`(半同步)保证至少一个备库收到才返回,推荐生产用。

- **切换策略**:默认自动切换,可配置切换通知到 SMN。

- **数据复制方式**:异步复制延迟通常 < 1 秒,半同步 < 100ms。


**这一层只解决"主库宕机不丢实例",不解决"业务连接如何切到新主库"**——那是下一层的事。


## 第二层:连接重试与 DDC(业务侧)


主备切换的 30 秒内,业务侧的连接会报 `Connection refused`。三种应对:


1. **应用层重试**:连接池配置 `connectTimeout=5s` + 失败重试 3 次,能覆盖大部分切换窗口。

2. **DDC(数据库代理)**:华为云 RDS 提供数据库代理(DDC),业务连 DDC 地址而非主库直连,切换时 DDC 自动重连新主库,业务无感。

3. **DNS 缓存陷阱**:如果业务用域名连库,注意 JVM 默认缓存 DNS 30 秒,切换后 30 秒内仍连旧 IP。需在 `java.security` 或连接串里设 `networkaddress.cache.ttl=5`。


**推荐组合:DDC + 应用层短重试**,DDC 挡住大部分切换,重试挡住 DDC 自身重连的毫秒级抖动。


## 第三层:读写分离(只读实例 + DDC)


读 QPS 远高于写 QPS 时,加只读实例分担读流量。RDS 最多支持 15 个只读实例,主库 binlog 异步同步过去。


配置读写分离有两种方式:


- **DDC 自动读写分离**:业务连 DDC,DDC 根据 SQL 语句类型(SELECT vs INSERT/UPDATE)自动路由到只读或主库。零代码改动。

- **应用层手动分流**:Spring 用 `@Transactional(readOnly=true)` 注解,框架路由到只读数据源。可控性更强。


只读实例的延迟通常 < 1 秒,但**强一致读(如订单创建后立即查询)必须走主库**,不能走只读,否则可能查不到刚写入的数据。DDC 的路由策略里要把"事务内"的读强制走主库。


## 第四层:跨 region 容灾(DRS)


主备只在单 region 内的两个 AZ,整个 region 故障时仍会丢。对核心库需要跨 region 容灾:


- **DRS(数据复制服务)**:在备 region 部署一个独立 RDS,用 DRS 从主 region 实时同步过去。故障时手动或脚本切换业务到备 region。

- **成本权衡**:跨 region DRS 需要额外一份 RDS 实例费用 + DRS 任务费用,只对真正核心的库做。非核心库靠单 region 主备 + 备份恢复即可。


## 备份与恢复:最后一道保险


RDS 自动备份保留 7 天(可配 730 天),加上 binlog 可恢复到任意时间点。但**备份恢复不是高可用手段,是数据兜底**——恢复时间按库大小从分钟到小时不等,不能当容灾用。


实践配置:

- 自动备份:每天凌晨 2 点,保留 30 天。

- 增量备份:每 5 分钟一次 binlog。

- 跨 region 备份复制:核心库开启,备 region 同样保留 30 天。


## 小结


RDS 高可用是四层叠加:**主备切换挡实例故障、DDC 挡切换抖动、只读挡读流量、DRS 挡 region 故障**。每一层都解决一个不同范围的问题,缺任何一层都有对应的故障窗口。控制台点一下"高可用"只是第一层,剩下三层要业务侧自己接——但接上之后,数据库的可用性才能真正对齐业务的 SLA。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。