当前位置:首页 > 经验总结 > 正文内容

RDS for MySQL aurora 高可用架构

Aurora 是阿里云 RDS 的集中式高可用决策与切换平台,采用五层架构 + CDDT 闭环(Check → Diagnose → Decision → Treat),通过 Flow 引擎(XML 编排)驱动切换流程,支持 MySQL、PostgreSQL、MongoDB、Redis、SQLServer、PolarDB 等 11 种数据库引擎。对实例进行持续健康探测、故障诊断、自动切换、自愈修复

一、五层架构

┌──────────────────────────────────────────────────────────────┐
│ ⑤ 接入与运维层     杜康控制台 / REST API / aurora-tool       │
│                    HA 日志页、切换详情弹窗、运维建议           │
├──────────────────────────────────────────────────────────────┤
│ ④ 引擎适配层       aurora-mysql(最完整的引擎适配模块)       │
│   (Engine Adapter)  check/mysql/ · treat/mysql/ · ...        │
├──────────────────────────────────────────────────────────────┤
│ ③ 业务能力层       Check → Diagnose → Decision → Treat      │
│   (Capabilities)   Flow 引擎(XML 编排切换步骤序列)          │
│                    Notify · Integrate · Persistent            │
├──────────────────────────────────────────────────────────────┤
│ ② 平台框架层       aurora-framework(核心骨架)              │
│                    aurora-communicate(JGroups/Raft 选主)    │
│                    aurora-runtime / aurora-graphdb           │
├──────────────────────────────────────────────────────────────┤
│ ① 基础设施层       aurora-config / aurora-client /           │
│                    aurora-server / aurora-security            │
└──────────────────────────────────────────────────────────────┘

二、核心闭环:CDDT(Check-Diagnose-Decision-Treat)

阶段

类比

MySQL 场景下的具体行为

Check(探测)

心电监护仪

定时连接 MySQL 执行 SHOW SLAVE STATUS

SELECT 1

心跳检测,发现 MASTER_DOWN

MASTER_HANG

TCP_TIMEOUT

等异常

Diagnose(诊断)

CT/MRI

对异常做根因分析,通过 HaCauseReactor

推断原因码,如 SlaveTimestampLag

MasterHeartbeatNotFound

Decision(决策)

主治医师

判断是否触发切换,检查熔断器(30 分钟 3 次熔断)、频率限制(20 分钟 5 次)、HA 是否被禁用等前置条件

Treat(修复)

手术室

执行 MySQL 主备切换,包括 ChangeMaster

VipSwitch

MaintainMetadata

等步骤

   ┌─────────┐   MASTER_DOWN         ┌──────────┐   根因码           ┌─────────┐
   │  Check     │───────────────▶ │ Diagnose         │ ───────────▶ │ Decision       │
   │ 探测层     │    (异常事件)         │ 根因分析     │ (判定为可切换)            │   决策     │
   └─────────┘                 └──────────┘              └────┬────┘
        ▲                                                      │
        │                                                      │ 提交策略
        │                  ┌──────────┐                        ▼
        └──────────────────│  Treat        │◀──────────────  submit strategy
            切换完成              │ 切换执行         │      Flow 引擎驱动
                           └──────────┘
                                ▲
                                │ XML 编排的步骤序列
                                │ 支持事务回滚、重试

三、 MySQL 切换标准步骤序列

当 Decision 判定需要切换后,Flow 引擎驱动以下步骤(记录在 aurora_switch_detail 表中):

① diagnose              → 诊断确认主库故障
② FindTargetSlave       → 找到最优备库(延迟最小、数据最完整)
③ CheckSlaveReplication → 检查备库复制状态
④ CheckTimestampDelta   → 检查主备时间戳差异
⑤ SetMasterReadonly     → 将原主库设为只读(防止脑裂)
⑥ MasterPosWait         → 等待备库追平主库位点
⑦ ChangeMaster          → 执行 CHANGE MASTER TO,切换主备关系
⑧ MaintainMetadata      → 更新 MetaDB 元数据
⑨ LinkApiSwitch/VipSwitch → VIP 漂移 / API 层面切换
⑩ SaveSwitchProcedure   → 持久化切换记录到 MetaDB

每个步骤的耗时(毫秒级) 都会记录在 aurora_switch_detail.switch_step_during 中,可在杜康控制台切换详情弹窗查看。

四、集群部署拓扑

Aurora 本身以多节点集群方式部署,通过 JGroups/Raft 实现选主和集群通信:

        ┌──────────────────────────────────────────────┐
       │              MetaDB(共享元信息库)            │
       │  aurora_switch_log / aurora_list / bakowner   │
       │  cust_instance / aurora_request / ...         │
       └──────────────────────────────────────────────┘
            ▲                ▲                ▲
            │                │                │ 心跳每 1s 写一次
       ┌────┴────┐      ┌────┴────┐      ┌────┴────┐
       │Aurora-1 │◀────▶│Aurora-2 │◀────▶│Aurora-N │
       │(主)   │ JG/  │(备)   │ Raft │(备)   │
       └─────────┘      └─────────┘      └─────────┘
            │                │                │
            ▼                ▼                ▼
       ┌──────────────────────────────────────────────┐
       │     MySQL 实例(主 + 备 + 只读)              │
       │     Proxy 层(MaxScale / LVS)               │
       └──────────────────────────────────────────────┘

关键集群参数:

  • heartbeat_check_interval=1 — 心跳写入 MetaDB 间隔(1 秒)

  • ha_check_interval=60 — Aurora 节点间健康检查间隔

  • ha_autobalance_interval=600 — 节点间负载均衡间隔

五、MySQL 引擎适配模块结构

aurora-mysql 是 Aurora 所有引擎适配中最完整的模块,遵循统一目录范式:

aurora-mysql/src/main/java/com/aliyun/rds/ha/cluster/
├── check/mysql/        → MySQL 专属探测器(执行 SHOW SLAVE STATUS 等)
├── common/mysql/       → MySQL 公共逻辑
├── cons/mysql/         → MySQL 常量(错误码、SQL 模板)
├── decision/mysql/     → MySQL 专属决策(主从延迟阈值判断)
├── diagnose/mysql/     → MySQL 专属诊断
├── link/mysql/         → MySQL 连接驱动封装
├── model/mysql/        → MySQL 专属数据模型
└── treat/mysql/        → MySQL 专属修复(切换、重搭、ResetSlave)

设计哲学:Framework 提供"如何切换"的抽象骨架,aurora-mysql 提供"对 MySQL 而言切换是什么"的具体实现,通过 SPI/Spring Bean 注册到 Framework。

六、核心元数据表(MetaDB)

Aurora 的切换记录和状态都持久化在 MetaDB 中,MySQL 场景下最常用的表:

表名

作用

aurora_switch_log

切换主记录(状态、来源、原因、时间)

aurora_switch_log_info

切换详细信息(cause_code、cause_root、request_param)

aurora_switch_detail

切换步骤明细(步骤名、耗时、结果、备注)

aurora_list

实例 HA 状态(是否启用、被哪个 Aurora 节点接管)

aurora_request

切换请求记录(来源、是否完成)

bakowner

节点心跳与实例归属关系

cust_instance

实例基本信息(名称、VIP、集群)


七、部署目录(生产环境)

/usr/local/rds/aurora/package/
├── config/
│   ├── conf.properties          # 当前生效配置
│   ├── druid.properties         # MetaDB 连接池
│   └── log4j.log                # 日志配置
├── jars/                        # 所有 jar 包
├── log/
│   ├── ha.log                   # ★ 系统主日志(切换决策、策略提交)
│   ├── check.log                # ★ 探测日志(MASTER_DOWN 等事件)
│   ├── error.log                # ★ 错误日志(异常堆栈)
│   ├── framework.log            # ★ 框架日志(选主、心跳、清理)
│   ├── election.log             # 选主日志(become leader / step down)
│   └── introspect.log           # 自检日志
└── service.sh                   # 启停管控

总结

RDS for MySQL 的 Aurora 高可用实现可以概括为:

  1. 探测层定时检查 MySQL 主库心跳,发现故障后上报异常事件

  2. 诊断层分析根因(主库宕机、挂起、网络超时等)

  3. 决策层检查熔断、频率限制等前置条件,决定是否切换

  4. 修复层通过 Flow 引擎驱动 10 步标准切换流程(FindTargetSlave → ChangeMaster → VipSwitch 等)

  5. 整个过程通过 JGroups/Raft 在 Aurora 集群节点间协调,切换记录持久化到 MetaDB


扫描二维码推送至手机访问。

版权声明:本文由撒谎信发布,如需转载请注明出处。

本文链接:https://www.yangwuyu.com/?id=11

分享给朋友:
返回列表

上一篇:MySQL系列-join的用法

没有最新的文章了...

“RDS for MySQL aurora 高可用架构” 的相关文章

MySQL系列-join的用法

MySQL系列-join的用法

导言        在数据库操作中,JOIN是实现多表关联查询的核心机制。相较于嵌套子查询和IN操作符,合理使用JOIN能显著提升查询性能,优化执行计划,并增强SQL代码的可读性与可维护性。本文将系统解析MySQL中的J...