因报告超时导致节点被踢出的问题

一、问题现象

在openGauss资源池化集群使用过程中,集群内的某个节点的CM Agent会因网卡故障无法向CM Server主节点上报状态,发生report timeout超时错误,进而被踢出,导致集群状态异常。

二、定位方法

该问题定位流程如所示:

  1. 使用cm_ctl query -Cvipdw,可观测某节点发生故障。这里以第二个节点为例,可查询二节点状态为Down Unknown状态,说明该节点故障下线。
  2. 登录该节点机器,到$GAUSSLOG/pg_log目录下,寻找最后一次运行日志文件,可以找到如下记录:
    2024-09-26 20:11:48.859 66f54e2d.5266 postgres 140030261589760 cm_agent 0 dn_6001_6002_6003 57P01  0 [BACKEND] FATAL:  terminating connection due to administrator command
    
    说明数据库收到了来自于CM Agent的关闭操作,因此需要查看CM Agent日志确定为何种要向数据库发送shutdown命令。
  3. 进入$GAUSSHOME/cm/cm_agent目录中,寻找该时间点附近的日志,可以得到以下日志信息:
    2024-09-26 20:11:48.734 tid=9986  LOG: nic not running, immediate shutdown nodes.
    2024-09-26 20:11:48.734 tid=9986  LOG: immediate_shutdown_nodes, 2 resource will be stopped.
    2024-09-26 20:11:48.846 tid=9987  LOG: 394 cm_agent connect to cm_server start.
    
    报错详细为nic error,可确定为CM组件检测到网卡故障。
  4. 同样的,可以进入CM server主节点的$GAUSSHOME/cm/cm_server目录下,可以在key_event日志文件中,找到如下记录:
    2024-09-26 20:11:49.676 tid=5045 MaxClusterAb: [KeyEvent: KEY_EVENT_RES_ARBITRATE] [Instance: 0] [Details: node(2) kick out.]
    
    可以看到故障节点被踢出。相应的,查看该节点的cm_server日志,可以看到踢出原因:
    2024-09-26 20:11:49.676 tid=5045 MaxClusterAb LOG: Network timeout:6
    2024-09-26 20:11:49.676 tid=5045 MaxClusterAb LOG: Network base_time:2024-09-26 20:11:49
    2024-09-26 20:11:49.676 tid=5045 MaxClusterAb LOG: [RHB] hb infos: |1970-01-01 08:00:00|2024-09-26 20:11:44|2024-09-26 20:11:48|
    2024-09-26 20:11:49.676 tid=5045 MaxClusterAb LOG: [RHB] hb infos: |2024-09-26 20:11:43|1970-01-01 08:00:00|2024-09-26 20:11:42|
    2024-09-26 20:11:49.676 tid=5045 MaxClusterAb LOG: [RHB] hb infos: |2024-09-26 20:11:48|2024-09-26 20:11:44|1970-01-01 08:00:00|
    2024-09-26 20:11:49.676 tid=5045 MaxClusterAb LOG: last(39) is different from current(40), result is 0.
    2024-09-26 20:11:49.677 tid=5045 MaxClusterAb LOG: [KeyEvent: KEY_EVENT_RES_ARBITRATE] [Instance: 0] [Details: node(2) kick out.]
    2024-09-26 20:11:49.677 tid=5045 MaxClusterAb LOG: recv node(2) agent report res status msg timeout.
    
    通过该日志进一步确定踢出故障节点的原因为report timeout,本质为故障节点网络故障导致的意外重启。

三、问题根因

在正常流程中,CM Agent会固定向CM Server上报消息,如果两方检测不到消息上报状态成功,CM Server会主动踢出该节点,CM Agent会主动关闭数据库。

四、解决方案

对于该问题,为双向网络故障,可直接检查网卡状态,后续恢复网络状态即可。

意见反馈
编组 3备份
    openGauss 2024-12-23 00:51:56
    取消