【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 逐层恢复

转载:星辰明的絮语

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gauss松鼠会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值