在分布式数据库的运维中,保障集群高可用和数据一致性是核心挑战。南大通用GBase 8a MPP 集群(gbase database)设计的 feventlog(故障事件日志)机制,正是其实现自动故障恢复、保障数据最终一致性的关键组件。本文将从基础概念到实践操作,对其进行全面梳理。

一、 feventlog 是什么?
feventlog 是 GBase 8a MPP 集群的故障事件日志,是集群自动恢复机制的核心载体。其主要职责是:当集群节点或分片因异常(如宕机、网络中断、存储损坏等)而无法正常执行操作时,将本应下发的 DDL 或 DML 操作暂时记录为特定类型的日志,待故障节点恢复后,自动重做这些操作,从而确保集群所有节点的数据与逻辑状态最终保持一致。它是判断和维持集群节点状态一致性的核心依据。
feventlog 主要包含以下三类事件日志:
(1)ddlevent:记录数据结构定义语句(如 CREATE、ALTER、DROP TABLE 等)。
(2)dmlevent:记录数据操作语句(如 INSERT、UPDATE、DELETE)。
(3)dmlstorageevent:当检测到物理存储损坏(如数据文件丢失、元数据不可读)时,记录升级版的 DML 事件日志。
二、 记录原理:何时、如何产生?
当集群中的节点被标记为故障(Failure)状态时,Coordinator 节点(调度节点)将不再把 SQL 操作直接下发到该节点,而是将这些操作的相关信息记录到 feventlog 中。
1、触发场景:
(1)节点发生硬件故障、网络隔离或进程僵死等。
(2)在 rebalance(重分布)过程中,参与节点发生故障。
(3)在高并发 DDL/DML/查询操作期间,节点进程被异常终止。
2、记录升级:
(1)普通 DML 操作异常会记录为 dmlevent。
(2)若操作遇到存储层面的物理损坏,则会自动升级记录为 dmlstorageevent。
3、日志内容:
每条 feventlog 都会记录事件 ID、对象名(如表名)、分片名、故障节点 IP、SCN(系统变更号)、具体操作内容等关键信息。管理员可以通过 gcadmin 系列命令进行查看(例如:gcadmin showddlevent,gcadmin showdmlevent)。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69979120/viewspace-3174644/ ,如需转载,请注明出处,否则将追究法律责任。