Skip to content

阿里云RDS高可用RDS主备切换 #163

@igweek

Description

@igweek

前言:数据库宕机不可怕,高可用才是业务生命线

对于电商、支付、后台管理等在线业务来说,数据库长时间不可用意味着直接的经济损失和用户流失。自建MySQL主从架构,不仅要手动搭建主从复制、监控主库状态,出现故障时还得手动切换、修复数据,耗时又容易出错。

阿里云RDS高可用版,采用一主一备跨可用区部署的原生架构,内置健康检测、故障自动切换、连接无感漂移能力,无需人工干预就能保障数据库持续在线。本篇实验承接前两篇实操,基于已创建的RDS MySQL高可用实例,模拟主库故障场景,完成手动主备切换、业务连通性验证,彻底理解RDS高可用的底层逻辑和企业价值。

实验前置条件:已完成实验1的RDS MySQL 8.0高可用实例创建(必须为高可用版,基础版无备库),实例处于运行中状态,且已配置白名单、可正常连接读写数据;建议保留实验2的user_center业务库,方便切换后验证业务可用性。


实验场景:企业核心业务容灾演练

业务背景:某电商平台的用户中心数据库采用阿里云RDS高可用架构,为模拟机房断电、服务器硬件故障、网络中断等极端场景,运维团队需要定期做主备切换容灾演练,验证故障发生时业务是否无感、数据库是否能快速恢复服务,确保核心业务7×24小时在线。

实验目标:1. 理解RDS高可用版一主一备、跨可用区部署的架构设计;2. 掌握主备切换的手动触发流程;3. 验证切换过程中业务连接稳定性;4. 区分自动切换与手动切换的适用场景,理解VIP/连接地址漂移原理。

核心知识点铺垫:RDS高可用架构原理

  • 高可用架构组成:主实例(承担读写流量)+ 备实例(实时同步数据,静默备用),双节点部署在不同可用区,避免单可用区故障导致整体宕机

  • 数据同步机制:主备库通过binlog实时异步/半同步复制,保证备库数据与主库几乎一致

  • 健康检测:RDS控制面持续监测主库状态,检测到主库异常(CPU卡死、磁盘损坏、网络中断)立即触发切换

  • 连接地址漂移:切换过程中数据库连接地址(内网域名)不变,业务无需修改配置,实现无感切换

  • 切换类型:自动切换(故障触发)、手动切换(演练/运维升级触发)


实验实操:RDS主备切换全流程

步骤1:查看RDS高可用架构与主备状态

首先确认实例为高可用架构,查看主备节点位置和运行状态,夯实实验基础:

  1. 登录阿里云控制台,进入云数据库RDS实例列表,找到目标高可用实例,进入实例详情页

  2. 基本信息板块,查看实例系列,确认显示为高可用版;查看可用区部署,确认为主备跨可用区(如主:华东2(上海)可用区F,备:华东2(上海)可用区G)

  3. 左侧菜单栏点击服务可用性,进入高可用管理页面,查看主备实例状态,确认主、备库均为运行中,复制状态为正常

  4. 记录当前主库所在可用区、备库所在可用区,方便切换后对比节点变化

注意事项:基础版RDS仅单节点部署,无备库无法做主备切换,实验前务必核对实例系列;若主备复制状态异常,需先排查同步延迟、网络问题,再开展切换实验。

步骤2:提前做业务连通性测试(基准验证)

切换前先验证数据库正常读写,作为后续对比基准,排除网络、权限等干扰因素:

  1. 通过Navicat/DBeaver/MySQL命令行连接RDS实例,进入user_center数据库

  2. 执行读写SQL,验证业务正常:
    -- 查询现有数据 SELECT * FROM user_info; -- 插入新测试数据,验证写入正常 INSERT INTO user_info (username, phone) VALUES ('lisi', '13900139000'); -- 再次查询,确认数据写入成功 SELECT * FROM user_info;

  3. 保持连接窗口打开,后续切换后直接复用该连接,验证是否断开

注意事项:建议使用内网地址连接,避免外网网络波动影响切换验证;不要关闭连接窗口,否则无法判断切换是否为无感漂移。

步骤3:手动触发主备切换(演练核心环节)

手动切换适合容灾演练、主机运维、版本升级等场景,操作全程可控,具体步骤如下:

  1. 在RDS实例服务可用性页面,找到主备切换板块,点击主备切换按钮

  2. 弹出提示框,仔细阅读切换说明:切换过程中实例会有秒级闪断,业务需做好重连机制;切换后主备角色互换,数据同步不受影响

  3. 勾选我已了解上述影响,点击确定触发切换

  4. 查看控制台切换进度,等待实例状态从主备切换中变为运行中(耗时约10-30秒,小规格实例更快)

注意事项:业务高峰期禁止触发主备切换,避免闪断影响用户体验;切换过程中请勿刷新页面、重启实例或修改配置,防止切换失败。

步骤4:切换后验证(核心验收环节)

切换完成后,从节点状态、业务连通性、数据一致性三个维度验证高可用有效性:

验证1:主备角色互换核查

  1. 回到服务可用性页面,查看主备实例可用区,确认原备库升级为主库,原主库降级为备库

  2. 查看实例基本信息,连接地址、端口无任何变化,验证域名漂移机制

验证2:业务读写连续性验证

  1. 回到之前打开的数据库连接窗口,直接执行查询、写入SQL:
    -- 验证查询正常 SELECT * FROM user_info; -- 新增数据,验证写入无异常 INSERT INTO user_info (username, phone) VALUES ('wangwu', '13700137000');

  2. 观察连接是否断开:正常情况下仅秒级闪断,无需重新输入账号密码,业务代码配置重连机制即可完全无感

验证3:数据一致性验证

查询切换前后插入的数据,确认主备切换无数据丢失、无数据错乱,保障数据一致性。

注意事项:若切换后连接断开,重新连接即可恢复,属于正常现象;生产环境建议在业务代码中加入数据库重连机制,彻底规避闪断影响;若出现数据不一致,需立即查看binlog同步状态,排查复制延迟问题。

步骤5:模拟故障自动切换(拓展实操)

除手动演练外,RDS可自动检测主库故障并切换,帮助理解被动容灾能力:

  1. 在实例详情页,通过重启实例模拟主库短暂故障(或通过限流、阻塞会话模拟主库异常)

  2. 观察控制台状态,RDS检测到主库不可用后,自动发起主备切换,无需人工操作

  3. 切换完成后,重复步骤4的验证流程,确认自动切换同样能恢复业务

注意事项:模拟故障仅适用于测试实例,严禁在生产实例随意重启、阻塞业务;自动切换阈值由阿里云控制面管控,无需人工配置,保障故障响应及时性。


实验验收标准与深度思考题

实验验收标准

  1. 正确识别RDS高可用版主备架构、跨可用区部署模式

  2. 成功手动触发主备切换,实例快速恢复运行中状态

  3. 切换后连接地址不变,业务读写正常、数据无丢失

  4. 能清晰区分主备节点角色,理解切换前后节点变化逻辑

深度思考题(贴合企业实战)

  1. RDS高可用采用跨可用区部署,相比同可用区主备,容灾能力强在哪里?

  2. 为什么主备切换后,业务连接地址不需要修改?底层原理是什么?

  3. 自建MySQL主从切换和RDS高可用切换,运维工作量有哪些差异?

  4. 生产环境中,主备切换出现长时间卡住,应该从哪些维度排查问题?


实验收尾与规范建议

  1. 实验完成后,可根据需求再次触发手动切换,将主备角色还原为初始状态

  2. 无需释放实例,保留高可用实例用于后续读写分离、性能优化实验

  3. 清理实验新增的测试数据,保持实例环境整洁,方便后续实验复用

企业规范建议:生产环境每季度至少做一次主备切换演练;开启RDS监控告警,实时接收主备切换、故障异常通知;核心业务搭配只读实例、跨地域灾备实例,进一步提升容灾等级。


总结

RDS高可用与主备切换,是云数据库区别于自建数据库的核心能力之一,它把复杂的容灾架构封装成托管服务,让企业不用关注底层主从搭建、故障检测、切换脚本,只需聚焦业务开发。

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions