GBase 8a MPP 集群 feventlog 日志查询机制介绍

发布时间:2026-07-03

在分布式数据库(MPP)的生产运维中,保障集群的高可用性与数据的最终一致性是核心挑战。GBase 8a MPP 集群设计了一套称为 feventlog(故障事件日志) 的自愈机制,通过“记录-恢复”的闭环流程,自动化处理节点故障,确保分布式系统的数据完整性与服务连续性。以下将对其核心原理、工作机制、恢复流程进行深入解析。

什么是feventlog?

feventlog是GBase 8a MPP集群的故障事件日志,是自动恢复机制的核心载体。 其主要功能是当集群中的节点或分片因异常(如硬件故障、网络故障、服务进程异常等)无法正常执行SQL操作时,记录该节点分片为特定类型的feventlog日志,将本应下发的SQL语句,包括DDL、DML、DQL,不做该节点下发,转而下发到健康的副本节点。待故障节点恢复后,系统自动恢复DDL、DML操作的对象、数据,从而确保整个集群所有节点的数据和逻辑状态最终一致。

feventlog 主要分为以下三类事件:

  • ddlevent(数据结构定义事件)

记录 DDL 操作,例如建表(CREATE TABLE)、改表(ALTER TABLE)、删表(DROP TABLE)等元数据变更。

  • dmlevent(数据操作事件)

记录 DML 操作,例如数据插入(INSERT)、更新(UPDATE)、删除(DELETE)等实际数据变动。

  • dmlstorageevent(数据存储故障事件)

当存储层面检测到物理损坏(如数据文件丢失或无法读取),会自动升级形成的记录,是一种增强版的 DML 事件日志。
管理员可通过 gcadmin 系列命令查看各类事件日志,如:
$ gcadmin showddlevent
$ gcadmin showdmlevent
$ gcadmin showdmlstorageevent

feventlog的产生场景与原理

  • 触发场景

当一个或多个数据节点被标记为故障状态(节点硬件宕机、节点之间网络不通、核心进程卡住不响应、表分片状态异常等)时,Coordinator(调度节点)会暂停直接下发 SQL 到故障节点,转而对操作过程进行日志记录,记录内容包括事件 ID、操作类型、表名、分片 ID、故障节点 IP、SCN(系统变更号)以及具体的 SQL 语句等关键信息,供后续系统自动恢复使用。

  • 记录升级逻辑

DDL只要有一个节点执行成功,其他失败节点就会记录ddlfeventlog。ddlfeventlog一般指元数据或者表结构不一致。

DML执行过程中,部分节点未执行成功导致某些分片主备出现数据不一致,但是执行成功的有一组可用的完整数据分片,执行失败节点分片记录dmlfeventlog。dmlfeventlog一般指表的数据内容不一致。

Dmlstoragefeventlog,指表数据存储发生了异常,一般是磁盘物理损坏或者表的数据文件损坏,可由DML或者DQL触发记录。普通的DML操作失败,只会记录成普通的dmleventlog事件,不会触发高等级告警;但如果操作的时候碰到因磁盘损坏、数据文件损坏这类物理存储层面的问题,系统会自动把这条记录升级成dmlstorageeventlog,直接触发存储故障告警,提醒运维优先处理。

gcrecover 进程机制

GBase 8a集群一旦发生了主副本数据文件不一致,自动恢复由部署在所有 Coordinator(调度)节点上的 gcrecover 服务负责,其运行受 gcmonit 服务监控。gcrecover 的底层运行机制包括:

主节点选举:集群中仅选举一个 Coordinator 的 gcrecover 为主恢复节点,防止多节点同时调度引发冲突。

事件轮询机制:主节点按固定间隔轮询集群所有 VC 的 feventlog 表,按 ddlevent → dmlevent → dmlstorageevent 的优先级顺序处理事件,优先保障元数据一致。

不同类型 feventlog 的恢复流程

ddleventlog 严格一致性校验

ddleventlog 的重做不是简单重跑 SQL,而是通过以下严格流程保障分布式一致性:

· 元数据快照比对:重做前,从 gcware 拉取当前集群的全量元数据快照,与日志中记录的版本比对,确保无其他并发 DDL 修改同一对象。

· SCN 强校验:重做 SQL 前强制检查目标对象的当前 SCN(系统变更号) 与日志中记录的预期 SCN 是否一致。若不一致,说明该对象已被其他操作修改,系统会放弃重做,避免元数据混乱。

· 跨节点原子广播:重做成功后,新的元数据版本会广播给所有 Coordinator 节点更新本地缓存,最后再从 gcware 中删除该 ddleventlog 记录,确保全局视图一致。

dmleventlog 数据复制恢复

核心是调用gc_sync工具,从同一个分片下的正常备份节点拷贝数据到故障节点。基于 gc_sync 的数据复制,dmlevent 恢复调用 syncclient + syncserver 组件,实现点对点高速数据同步。

流程

· 调用触发:gcrecover 连接到故障节点拉起 syncclient 进程,指定源分片、目标分片、同步模式。
· 端口连接:syncclient 通过 5288 端口连接源节点的 syncserver 服务。
· 元数据校验:syncserver 返回目标分片的元数据,syncclient 通过比对两端分片的 DC(数据块)列表,筛选差异块。
· 增量同步:syncserver 仅返回差异 DC 数据,避免全量拷贝。
· 日志落盘:同步完成后,执行日志写入 /gnode/log/gbase/syncclient_XXXX.log,经 gcrecover 校验数据一致后清除对应的dmleventlog。

SCN 决策逻辑

(1)如果同一分片的主副副本上都存在dmlevent,系统会对比两者的SCN号,并以SCN更大的副本(代表数据更新)为准,向SCN较小的副本同步数据。
(2)当两个副本的SCN记录均为0时,则跳过revert操作,直接执行从正常节点到故障节点的数据拷贝。

dmlstorageeventlog 存储修复

针对物理文件损坏,恢复策略更为复杂:
· 表结构损坏:删除损坏表 → 从正常副本获取建表语句重建 → 触发 sync 全同步模式恢复数据。
· 数据文件损坏:删除损坏文件 → 调用 sync 的一般模式从正常副本同步数据。

总结与运维建议

feventlog 机制是 GBase 8a MPP 集群高可用的关键基石,其在故障发生时自动记录未完成操作,待节点恢复后自动修复,极大降低了异常对业务的影响。

运维建议:

1、定期通过 gcadmin showd*event 系列命令检查是否存在未处理事件,及时掌握集群一致性风险。

2、在进行rebalance、节点替换等操作前,确保历史事件已处理完毕,避免恢复与重分布争抢资源。

3、关注同步日志(如
 /gnode/log/gbase/syncclient_*.log)与 gcrecover 运行状态,以快速定位恢复过程中的异常。

通过深刻理解 feventlog 的触发、记录与恢复全流程,能够显著提升分布式数据库的稳定运维水平,确保数据库服务在高可用架构下持续、可靠运行。