【GaussDB】GaussDB 组件、节点和AZ故障仲裁与切换流程

一、故障恢复依赖关系

GaussDB集群的故障恢复遵循严格的依赖路径:

复制代码
ETCD → CMS → GTM/DN → CN

集群启动/故障恢复依赖路径:

  1. crontab 拉起 om_monitor

  2. om_monitor 拉起 CMAgent 和 ETCD

  3. CMAgent 拉起 CN、DN、GTM、CMServer

  4. ETCD 通过 Raft 协议为 CMServer 提供仲裁基础

  5. CMServer 仲裁 GTM、DN

  6. CMServer 对 CN 进行剔除/加回


二、CN 实例故障仲裁与切换

CN 故障,RTO ≤ 30 秒

步骤 描述 耗时
A 分布式数据库正常运行 ---
B Agent 探测到 CN 故障 1 秒
C Agent 尝试拉起 CN,如果拉起则恢复正常;如果拉不起则转下一步 25 秒
D CM 仲裁触发自动 CN 剔除,将该 CN 信息从所有其他 CN 节点中删除 3 秒
E 数据库恢复正常状态,DDL 可以执行成功 约 1 秒

CN 剔除步骤:

  1. CM 检测到 CN 连续故障时长超过 25 秒,CMS 发起 CN 剔除操作,CN 处于 Deleting 过程中

  2. CM 更新其他 CN 节点的 pgxc_node 系统表

  3. 将 CN 隔离状态保存到分布式存储组件(ETCD)

  4. 数据库状态恢复,CN 可以执行 DDL 成功

业务影响: 正在通过故障 CN 执行的业务失败;在检测 CN 的隔离期,通过 JDBC 发往该 CN 的新连接会失败。JDBC 定期(默认 10 秒,可配置)查询可用 CN 并分配连接。


三、DN 实例故障仲裁与切换

3.1 DN 主故障

DN 主故障,RTO ≤ 约 10 秒

步骤 描述 耗时
A 分布式数据库正常运行 ---
B Agent 探测到某分片的 DN 主故障 1 秒
C Agent 尝试拉起 DN 主,如果拉起则继续为主,如果拉不起则进入选新主流程 6 秒
D CM 仲裁 DN 新主,并触发备升主 2 秒
E 备机连接主机,应用恢复连接 2 秒

DN 仲裁选主过程:

  1. DN 主实例故障

  2. CMS 等待 6 秒,若原主能恢复则不需要选新主

  3. 超过 6 秒原主状态没有恢复,CMS 发起选择新 DN 主,并行给备选副本发送 Lock1 命令

  4. 从锁住的多数派副本中,选择 term/Lsn 最大的副本,并通知升主

  5. CMS 发起 Lock2 命令给备机,告知新主

  6. CMS 发起 unlock 解锁

3.2 DN 角色仲裁规则

DN 实例仲裁保证集群中有 DN 主实例正常提供服务。CM Server 通常在实例故障一段时间后再下发仲裁结果(延迟仲裁机制),避免发生瞬时故障时立即仲裁主备倒换。

DN 实例角色状态:

字段 取值
角色 Primary(主)、Standby(备)、Pending(待仲裁)、Unknown(未知)
状态 Normal、Starting、Need repair、Waiting Promoting、Promoting、Demoting、Building、Build failed、Manually stopped、Disk damaged、Port used
Build reason Connecting、Disconnect、WalSegment removed

一次典型的仲裁流程:

  1. CM Agent 1 探测 DN 主实例并发现故障

  2. CM Agent 1 持续上报实例故障信息至 CM Server

  3. CM Server 执行仲裁流程,选择 DN 备机升主

  4. CM Server 下发升主命令至 CM Agent 2

  5. CM Agent 2 对实例执行升主操作

3.3 主-备-从备高可用

GaussDB(DWS) 采用主-备-从备三副本高可用技术:

  • 正常状态

    :主机和备机通过日志流复制和数据页流复制进行强同步;主机与从备仅保持连接,不发送日志和数据

  • 备机故障

    :主机自动感知,将未完成同步的日志和数据发送给从备,保持主从强同步。切换在底层 HA 实现,事务层不感知

  • 主机故障

    :CM 感知并仲裁备机升主,升主后的备机连接从备进行主从强同步


四、GTM 实例故障仲裁与切换

4.1 GTM 主故障

GTM 主故障,RTO ≤ 10 秒

步骤 描述 耗时
A 分布式数据库正常运行 ---
B Agent 探测到 GTM 主故障 1 秒
C Agent 尝试拉起 GTM 主,如果拉起则继续为主,如果拉不起则进入选主流程 3 秒
D CM 仲裁 GTM 备升主 2 秒
E 恢复 CN 的连接请求 约 2-3 秒

GTM 仲裁选主过程:

  1. GTM 主故障

  2. 判断 GTM 备与主的连接状态

  3. 若 GTM 备与主连接断开,直接判定上报节点升主

  4. 若 GTM 备与主保持连接,达到超时时间前,触发主备切换,并杀掉原主

4.2 GTM 主备架构

正常主备倒换(手动):

  1. 备 GTM 收到升主命令,连接主 GTM,让主 GTM 停止执行新业务

  2. 备 GTM 向主 GTM 查询 xid 和 sequence,并覆盖进程内的值

  3. 备 GTM 让主 GTM 降备,备 GTM 备份内存中 xid 和 sequence

  4. GTM 升主,开始执行业务

自动故障切换(failover):

  1. 主 GTM 故障或损坏,无法被 CMAgent 拉起

  2. CMAgent 检测到主 GTM 无法连接,上报至 CMServer

  3. 如果此时备 GTM 状态正常,CMServer 执行 failover 流程,仲裁备 GTM 升主

  4. CMAgent 给备 GTM 发送升主信号,备 GTM 升主后开始执行业务

GTM 同步状态:

同步状态 说明
SYNC_GTM_ON(强同步) 集群启动或 GTM 异常恢复后,CM 检测到 GTM 主备正常时设置。主 GTM 同步备 GTM 成功则返回,否则继续尝试直到同步成功
SYNC_GTM_AUTO(异步) 集群启动后所有 GTM 的初始状态。当主/备 GTM 无法正常工作时,另一个存活的 GTM 会切换到该状态。主 GTM 执行完业务后直接发送指令给备 GTM,无论同步成功或失败

重要说明: 主 GTM 不与备 GTM 进行数据同步,备 GTM 仅尝试与主 GTM 进行连接状态校验。GTM 主备中需要同步的数据(如 host、port、xid、timeline、sequence)都备份在 ETCD 上。


五、CM(CMServer)实例故障仲裁与切换

CM 主故障,RTO ≤ 10 秒

步骤 描述(ETCD 模式) 耗时
A 分布式集群管理状态正常 ---
B CMS 备检测 CMS 主与 ETCD 心跳超时 3 秒
C CMS 备进入仲裁新主流程,判断主 KEY 是否已被写入 ETCD 中 2 秒
D 往 ETCD 的 KEY 写入本节点 ID,并由备机升主 5 秒
E 候选 CMS 备升主完成切换,提供集群查询服务 ---

CMS 仲裁选主过程:

  1. CMS 主节点异常

  2. 尝试拉起 CMS 进程,并触发选主过程

  3. CMS 依赖的组件选主成功:

    • etcd 模式

      :etcd 先选主,CMS 执行选主流程

    • dcc 模式

      :dcc 先选主,CMS 跟随选主

  4. CMS 选主成功


六、节点故障仲裁与切换

节点故障,RTO ≤ 30 秒

步骤 描述(ETCD 模式) 耗时
A 分布式数据库正常运行 ---
B 节点被停止、掉电、网络断开等(假设各个节点的主实例都在故障节点上) 3-6 秒
C ETCD 重新选主 5 秒
D CMS 选新主并仲裁新的 GTM、DN 节点 6 秒
E CN 恢复,应用侧连接恢复 10 秒

组合故障场景下的恢复路径:

复制代码
1. etcd 恢复并选主
2. cms 恢复并选主
3. gtm/dn 恢复并选主
4. cn 恢复并选主

七、AZ 故障仲裁与切换

生产机房故障,RTO ≤ 约 1 分钟

步骤 描述 耗时
A 分布式数据库正常运行 ---
B 网络故障检测 约 30-40 秒
C ETCD 备升主 10 秒
D CMS 备升主 10 秒
E CMS 主获知 GTM 和 DN 主故障,并行仲裁 GTM 备升主、各分片的 DN 备升主 10 秒
F CN 恢复,应用侧的连接 约 2-5 秒
G 应用侧连接恢复并恢复业务执行 ---

AZ 网络故障仲裁与切换步骤:

复制代码
1. 网络故障检测
2. 仲裁本 AZ 启停
3. 触发新的选主流程
4. etcd 恢复并选主
5. cms 恢复并选主
6. gtm/dn 恢复并选主
7. cn 恢复并选主

AZ 网络故障类型:

  • 双边网络隔离

    :两个 AZ 之间网络完全断开

  • 单边网络隔离

    :一个 AZ 无法访问其他 AZ,但其他 AZ 之间可通信

3AZ 强启动与加回:

当 AZ1、AZ2 任意一个 AZ + 仲裁 AZ 故障(少数派出现时),支持人工强启:

  • 约束:强启动的 AZ 在故障前是集群中正常的 AZ,否则数据不是最新的,会引起数据丢失

  • 离线完成强启动过程,防止强启期间故障恢复引起多主可写的问题

  • 多数派恢复后,会自动以备机形式加入集群,保持数据同步,之后需要执行加回操作使数据库恢复到完全正常状态


八、总结:各组件故障 RTO 对比

故障类型 RTO 目标 核心恢复机制
CN 故障 ≤ 30 秒 Agent 尝试拉起 → 25 秒未恢复则 CM 自动剔除
DN 主故障 ≤ 10 秒 Agent 尝试拉起 6 秒 → CM 仲裁备升主(选 term/Lsn 最大副本)
GTM 主故障 ≤ 10 秒 Agent 尝试拉起 3 秒 → CM 仲裁备升主
CM 主故障 ≤ 10 秒 CM 备检测心跳超时 → ETCD 写入 KEY → 备升主
节点故障 ≤ 30 秒 ETCD 选主 → CMS 选主 → GTM/DN 选主 → CN 恢复
AZ 故障 ≤ 1 分钟 网络检测 → ETCD → CMS → GTM/DN → CN 逐层恢复

转载:星辰明的絮语

相关推荐
库玛西2 小时前
深入浅出Linux select网络模型:从底层位图原理到C++面向对象高级封装
linux·服务器·网络·c++·ubuntu
Tingjct2 小时前
线程详细讲解---聚焦linux
linux·服务器·jvm
myy-learn2 小时前
32 SQLITE数据库
jvm·数据库·sqlite
JavaPub-rodert2 小时前
Redis 和 MySQL 如何保证数据一致性?从业务方案到底层原理完整讲解
数据库·redis·mysql
大牧师2 小时前
TypeORM 学习教程
数据库·sql·学习·node.js·orm·nest.js·typeorm
数字孪生视频孪生2 小时前
空间智能技术|跨镜轨迹全域可溯,无感定位无扰赋能落地
大数据·运维·人工智能·重构·架构
ComputerInBook2 小时前
linux包管理工具——yum(YellowdogUpdaterModified)
linux·运维·服务器·yum·dnf
IvorySQL2 小时前
PostgreSQL 日报| PGQ 功能发现严重缺陷(9 月 4 日)
数据库·postgresql
霸道流氓气质2 小时前
通义千问 Chat 模型高级用法:Function Calling / Structured Output / 多轮对话
linux·运维·windows