KingbaseES V8R3集群运维案例---failover切换故障分析

发布时间 2023-09-18 16:19:06作者: KINGBASE研究院

案例说明:
KingbaseES V8R3集群主库数据库服务重启后,failover切换失败,分析failover失败的具体原因。
适用版本:
KingbaseES V8R3

一、集群架构

      node13----->主库(primary)
      node25----->管理备库(standby)
      node58----->备库(standby)

二、故障现象

1主2备集群, 172.31.*.13 172.31.*.25 172.31.*.58 。13是主;主机服务器内存不足报警,集成重启主服务器尝试解决,数据库未成功切换;
应用访问异常,报错无法访问数据库。

三、故障分析
搜集集群节点故障发生时间点前后的系统、集群及数据库日志:

1、系统日志:message等
2、集群日志:cluster.log、failover.log、recovery.log等
3、数据库日志:sys_log等

结合故障时间点前后,分析对应日志,综合判断故障原因。

日志分析:
1、node25节点,cluster.log获取,在“2023-04-27 19:20:42watchdog node state changed from [INITIALIZING] to [MASTER]“,kingbasecluster重启后,成为master节点,并且存在多次kingbasecluster服务重启。

2、node13节点,cluster.log获取,在”2023-04-27 19:21:07:successfully joined the watchdog cluster as standby node“,kingbasecluster重启后,成为standby节点,在后面的时间点,又多次重启kingbasecluster服务。

3、从node13的系统日志message获取,在“Apr 27 19:21:49 localhost [/bin/bash]: [sys_ctl -D data stop]”,执行数据库关库的命令,从对应的cluster.log及sys_log看,此时间点都无法连接数据库服务。
4、从cluster.log获取,在”2023-04-27 19:25:25: pid 16083: LOG: health checking retry count 10”,node25节点检测到连接主库数据库服务失败超过阈值(10)后,应该触发failover切换。
5、但是在“2023-04-27 19:25:25: pid 16083: LOG: failed to connect to watchdog command server socket”,连接kingbasecluster失败,导致无法触发failover切换。
6、在备库cluster.log的日志中相同时间点,出现同样的日志信息。

从以上日志分析,在“2023-04-27 19:21:49”,node13(数据库primary)执行关库服务后,在“2023-04-27 19:25:25”时间点,kingbasecluster检测数据库服务连接失败超过阈值后 ,触发failover切换,但是连接kingbascluster服务失败,导致切换未正常执行。从node13、node25节点cluster.log获悉,kingbasecluster服务多次重启导致主库数据库服务down后,未产生failover切换。

以下为主库重启后,数据库sys_log日志:

故障分析:
系统参数:RemoveIPC=yes|no

一些操作系统中RemoveIPC的默认值是yes。操作系统配置中RemoveIPC参数设置为yes,数据库运行过程中出现宕机,并显示如下日志消息。
FATAL: semctl(1463124609, 3, SETVAL, 0) failed: Invalid argument

原因分析
当RemoveIPC参数设置为yes时,操作系统会在对应用户退出时删除IPC资源(共享内存和信号量),从而使得KingbaseES服务器使用的IPC资源被清理,引发数据库宕机。
处理分析
设置配置文件/etc/systemd/logind.conf中的参数RemoveIPC参数为no。

四、问题总结
此次故障,是由于主机系统环境RemoveIPC=yes导致集群宕机(数据库服务及kingbasecluster服务),kingbasecluster在fatal状态就会导致退出进程,退出后就会重启。周而复始。

[kingbase@node102 bin]$ cat /etc/systemd/logind.conf|grep -i remove
RemoveIPC=no

对于生产环境下数据库在部署前,需要检查此系统参数的配置,避免触发数据库宕机的故障。