案例说明:

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

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

KingbaseES V8R3集群运维案例---failover切换故障分析的更多相关文章

  1. KingbaseES V8R3集群运维案例之---主库系统down failover切换过程分析

    ​ 案例说明: KingbaseES V8R3集群failover时两个cluster都会触发,但只有一个cluster会调用脚本去执行真正的切换流程,另一个有对应的打印,但不会调用脚本,只是走相关的 ...

  2. KingbaseES V8R3集群运维案例之---kingbase_monitor.sh启动”two master“案例

    案例说明: KingbaseES V8R3集群,执行kingbase_monitor.sh启动集群,出现"two master"节点的故障,启动集群失败:通过手工sys_ctl启动 ...

  3. KingbaseES V8R3集群运维案例之---cluster.log ERROR: md5 authentication failed

    案例说明: 在KingbaseES V8R3集群的cluster.log日志中,经常会出现"ERROR: md5 authentication failed:DETAIL: password ...

  4. KingbaseES V8R3集群运维案例之---用户自定义表空间管理

    ​案例说明: KingbaseES 数据库支持用户自定义表空间的创建,并建议表空间的文件存储路径配置到数据库的data目录之外.本案例复现了,当用户自定义表空间存储路径配置到data下时,出现的故障问 ...

  5. KingbaseES V8R6集群运维案例之---repmgr standby promote应用案例

    案例说明: 在容灾环境中,跨区域部署的异地备节点不会自主提升为主节点,在主节点发生故障或者人为需要切换时需要手动执行切换操作.若主节点已经失效,希望将异地备机提升为主节点. $bin/repmgr s ...

  6. KingbaseES V8R3集群管理维护案例之---集群迁移单实例架构

    案例说明: 在生产中,需要将KingbaseES V8R3集群转换为单实例架构,可以采用以下方式快速完成集群架构的迁移. 适用版本: KingbaseES V8R3 当前数据库版本: TEST=# s ...

  7. KingbaseES V8R3集群管理和维护案例之---failover切换wal日志变化分析

    ​ 案例说明: 本案例通过对KingbaseES V8R3集群failover切换过程进行观察,分析了主备库切换后wal日志的变化,对应用者了解KingbaseES V8R3(R6) failover ...

  8. KingbaseES V8R3集群维护案例之---pcp_node_refresh应用

    案例说明: 在一次KingbaseES V8R3集群切换分析中,运维人员执行了pcp_node_refresh,导致集群发生了failover的切换.此文档对pcp_node_refresh工具做了应 ...

  9. KingbaseES V8R3集群维护案例之---在线添加备库管理节点

    案例说明: 在KingbaseES V8R3主备流复制的集群中 ,一般有两个节点是集群的管理节点,分为master和standby:如对于一主二备的架构,其中有两个节点是管理节点,三个数据节点:管理节 ...

  10. PB 级大规模 Elasticsearch 集群运维与调优实践

    PB 级大规模 Elasticsearch 集群运维与调优实践 https://mp.weixin.qq.com/s/PDyHT9IuRij20JBgbPTjFA | 导语 腾讯云 Elasticse ...

随机推荐

  1. HTMLElement对象

    HTMLElement对象 任何HTML元素都继承于HTMLElement对象,一些元素直接实现这个接口,而另一些元素通过多层继承来实现它. 属性 从其父元素Element继承属性,并从Documen ...

  2. Swoole从入门到入土(20)——WebSocket服务器[协程版本]

    本篇让我们先用一段示例代码开路: <?php Co\run(function () { $server = new Co\Http\Server('0.0.0.0', 9501, false); ...

  3. Swoole从入门到入土(13)——HTTP服务器[配置]

    开篇之前,先复习一下如何为一个server进行配置的设置: $server->set(array( 'key' => 'value' )); 配置说明: upload_tmp_dir:设置 ...

  4. Innodb 存储引擎表

    目录 索引组织表 Innodb逻辑存储结构 表空间 段 区 页 行 Innodb 行记录格式 Compact Redundant 行溢出数据 Compressed 和 Dynamic 行记录格式 ch ...

  5. win32 - 使用Safer API创建受限的令牌

    #include <Windows.h> #include <WinSafer.h> #include <stdio.h> #include <sddl.h& ...

  6. [Android 逆向]frida 破解 切水果大战原版.apk

    1. 手机安装该apk,运行,点击右上角礼物 提示 支付失败,请稍后重试 2. apk拖入到jadx中,待加载完毕后,搜素失败,找到疑似目标类MymmPay的关键方法payResultFalse 4. ...

  7. 在Vue中使用Canvas绘制背景

    好家伙, 在vue中使用canvas绘制与在html中使用canvas绘制大致相同, 但又有所区别  法一(无图片资源): vue中canvas的使用 - 掘金 (juejin.cn) 找到canca ...

  8. git开发规范

  9. 【Azure 应用服务】在App Service for Windows中实现反向代理

    问题描述 如何在App Service for Windows(.NET Stack)中,如何实现反向代理呢? 正向代理:客户端想要访问一个服务器,但是它可能无法直接访问这台服务器,这时候这可找一台可 ...

  10. python中json.dumps() 与json.dump(),json.load()与json.loads()区别?

    json.dumps() 将 Python 对象转换为 JSON 字符串,并返回该字符串.而 json.dump() 将 Python 对象转换为 JSON 字符串,并将该字符串写入文件. json. ...