南大通用GBase 8a MPP 集群(gbase database)设计了一套称为 feventlog(故障事件日志) 的自愈机制,通过“记录-恢复”的闭环流程,自动化处理节点故障,确保分布式系统的数据完整性与服务连续性。以下对其恢复流程进行深入解析。
1、ddleventlog 严格一致性校验
ddleventlog 的重做不是简单重跑 SQL,而是通过以下严格流程保障分布式一致性:
· 元数据快照比对:重做前,从 gcware 拉取当前集群的全量元数据快照,与日志中记录的版本比对,确保无其他并发 DDL 修改同一对象。
· SCN 强校验:重做 SQL 前强制检查目标对象的当前 SCN(系统变更号) 与日志中记录的预期 SCN 是否一致。若不一致,说明该对象已被其他操作修改,系统会放弃重做,避免元数据混乱。
· 跨节点原子广播:重做成功后,新的元数据版本会广播给所有 Coordinator 节点更新本地缓存,最后再从 gcware 中删除该 ddleventlog 记录,确保全局视图一致。
2、dmleventlog 数据复制恢复
核心是调用gc_sync工具,从同一个分片下的正常备份节点拷贝数据到故障节点。基于 gc_sync 的数据复制,dmlevent 恢复调用 syncclient + syncserver 组件,实现点对点高速数据同步。
01流程
· 调用触发:gcrecover 连接到故障节点拉起 syncclient 进程,指定源分片、目标分片、同步模式。
· 端口连接:syncclient 通过 5288 端口连接源节点的 syncserver 服务。
· 元数据校验:syncserver 返回目标分片的元数据,syncclient 通过比对两端分片的 DC(数据块)列表,筛选差异块。
· 增量同步:syncserver 仅返回差异 DC 数据,避免全量拷贝。
· 日志落盘:同步完成后,执行日志写入 /gnode/log/gbase/syncclient_XXXX.log,经 gcrecover 校验数据一致后清除对应的dmleventlog。
02SCN 决策逻辑
(1)如果同一分片的主副副本上都存在dmlevent,系统会对比两者的SCN号,并以SCN更大的副本(代表数据更新)为准,向SCN较小的副本同步数据。
(2)当两个副本的SCN记录均为0时,则跳过revert操作,直接执行从正常节点到故障节点的数据拷贝。
3、dmlstorageeventlog 存储修复
针对物理文件损坏,恢复策略更为复杂:
· 表结构损坏:删除损坏表 → 从正常副本获取建表语句重建 → 触发 sync 全同步模式恢复数据。
· 数据文件损坏:删除损坏文件 → 调用 sync 的一般模式从正常副本同步数据。