南大通用GBase 8a运维案例:奇怪的event

GBase 8a当出现主副本不一致时,会记录event,信息里ObjectName包含了库和表的名字,比如db1.Table1这样。本文介绍一个建库故障,导致只有一个字符串的情况。

现场样例

如下的ddlevent, ObjectName是 strace, 并不是常见的格式。而这个strace又不是数据库自带的元数据表。

排查

根据eventId 45367 查看gcluster的express.log, 这个日志会记录45367这个event是什么原因产生的。

通过grep确实找到了故障发生的时间点,然后查看这个时间段发生了什么

可以看到,是一个create database的SQL, 而库名是strace. 报错的原因是 (errno: 17)

查看linux操作系统错误码,错误17是File exists 文件已经存在。

登录集群,确实能看到有这个库,但无法使用(use)

换其它节点连接,发现并没有这个库。初步判断是第一个节点有残留。

进入第一个节点的管理节点的userdata/gcluster目录下,确实发下了一个strace目录。而其它管理节点和数据节点全部没有。

手工删除这个目录,一切恢复。

总结

客户环境出现过故障,怀疑在执行DDL时,没有执行完毕,出现了死机或者断电类故障,导致目录残留。