GaussDB(DWS)高可用之CM告警与问题定位

举报
寒衣 发表于 2023/08/15 16:32:57 2023/08/15
【摘要】 主备切换,集群故障

 前言

本文主要内容分三块内容,1. CM的主要运行流程 2. CM告警机制 3. 故障排查与解决

GaussDB for DWS 的内核侧组件为DN, CN, GTM,内核侧组件是通过集群管理组件CM server、CM agent 来进行管理的。内核组件和集群管理组件共同组成了GaussDB for DWS 集群。


一、CM的主要运行流程

参考链接:
GaussDB (DWS) 集群管理系列:CM组件介绍(架构和部署形态)
GaussDB (DWS) 集群管理系列:CM组件介绍(核心功能)

1.1 cm_server功能

cm_server是集群 管理的大 脑,整个管理系统的仲裁者,系统中只有一个,主备架构,系统中常驻的服务进程,多线程架构。主要收集cm_agent返回的各个实例(GTM主备、CN、DN主备从)状态信息,从而通过分析给出谁是主谁是备,什么时候需要failover切换,什么时候需要重建DN。cm_server的另一个作用就是接收客户端cm_ctl发送的命令,使得cm_ctl可以管理整个集群。

1.2 cm_agent功能

cm_agent负责收集本地物理机中内核端各个组件的状态信息,并上报给CMserver,由于CMagent只管理本地物理机,如果单节点故障(如断电,机器故障)后,该物理机上实例均故障,无法管理,因此也不需要备机。且CMagent本地并不存储任何信息,是一个无状态的组件,进程故障后,可以立刻拉起。

1.3 om_monitor功能

om_monitor进程负责拉起cm_agent 以及杀掉非自己启动的cm_agent。om_monitor为了保活,每分钟都会被系统定时任务crontab拉起,后拉起的进程在发现已经有om_monitor进程时,会自己退出。

下图为CM模块的主要运行流程:

9c515cd0983548a78036c098e7c4c52e.20230712074149.06794066379946750234965305846692.png

二、CM告警机制

cm_agent会实时检测cn、dn、gtm、cm_server状态,固定间隔1秒上报实例状态给cm_server。

心跳是在cm_server上累计的。没有上报消息,心跳就会+1,超时就会仲裁。只有cm_agent成功连接并上报节点信息,才会刷新心跳状态。

当启动集群、节点、实例时,会删除启停文件,当停止集群、节点、实例时,会生成启停文件。

  • 集群启停文件 cluster_manual_start

  • 实例启停文件 instance_manual_start_X(X是实例编号,例如instance_manual_start_6001)

启停文件存在与否标志着实例或集群的启停状态。

2.1 根据启停文件判断

正常情况下,根据启停标志文件是否存在做进一步判断,

如果启停文件不存在且磁盘、网卡正常 ->cm_agent检查实例进程是否存在 如果存在则正常,如果不存在则拉起实例

如果启停文件存在且磁盘、网卡正常 ->cm_agent检查实例进程是否存在 如果存在则杀死所有实例,如果不存在则则正常

2.2 根据心跳判断

当cm_agent检测到dn\gtm实例状态异常并上报给cm_server之后,会做一些检查以及启动实例,会根据实例心跳超时时间(instance_heartbeat_timeout)进行判定,当超过实例心跳时间之后实例无法恢复,cm_server会给cm_agent下发仲裁命令,将相应实例的状态置为 Unknown。

当cm_agent检测到cn实例状态异常之后,会做一些检查以及启动实例,会根据cm_server在CN故障后仲裁自动剔除的触发时间(coordinator_heartbeat_timeout),当超过该时间实例无法恢复,自动剔除cn。

当cm_server未收到cm_agent的上报,会根据实例心跳超时时间(instance_heartbeat_timeout)进行判定,当超过实例心跳时间之后依旧无法恢复cm_server与cm_agent的连接,cm_server会给当前安全环其他cm_agent下发主备切换,将相应实例的状态置为 Unknown。

单节点故障RTO机制分析:https://bbs.huaweicloud.com/blogs/248077

2.3 cm_server进程故障

cm_agent会检测cm_server进程是否正常(进程存在或者正常停止),如果不正常则会停止或者拉起

cm_server只有检测到启停文件存在时才会杀死cm_server进程,而磁盘、网卡有故障时并不会杀死cm_server进程

如果cm_server因故障无法被拉起cm_agent会一直执行拉起cm_server的命令并输出日志

cm_server主备是自仲裁。cm_server主备会相互连接进行通讯,当对端连接异常且超过超时时间后会触发自仲裁选主

三、故障判断及解决方案

3.1 故障类型

cke_11613.png

3.2 实例重启

315BE6A0-B9E0-4C2F-A4C9-D9ECC661DCCD.png

[1]故障类型:长连接断开无法接入导致的超时查杀

关键日志: ${GAUSSLOG}/cm/cm_server/cm_server_创建时间.log

关键词:heartbeat timeout

3-2-1.jpg

这种情况属于长连接断开直到超出心跳时间,cms将发送failover命令到备节点,导致主备切换。

[2]故障类型:cmacms断连导致的超时查杀

关键日志: ${GAUSSLOG}/cm/cm_agent/cm_agent_创建时间.log

关键词:agent disconnect cm_server xx sec timeout

3-2-2.jpg

cms和cma之间的连接断开超时,导致cms无法接收到cma上报的消息,因此下发kill。

解决方案:需要排查网络以及负载情况,可能为网络连接超时或者业务量过大导致的负载过大,系统函数运行缓慢。

[3]故障类型:Hang检测查杀

关键日志:${GAUSSLOG}/cm/cm_agent/cm_agent_创建时间.log

关键词:phony dead

3-2-3.jpg

关键日志: ${GAUSSLOG}/cm/cm_server/cm_server_创建时间.log

关键词:phony dead

3-2-3-2.jpg

长连接依旧存在,但是短链接无法连接,被判定为操作系统hang死,将通过长连接对故障节点下发重启节点命令。

解决方案:联系华为工程师,给当前节点部署hang检测堆栈脚本,需要抓取hang时堆栈进行分析。

[4]故障类型:内存超过70%阈值导致重启

关键日志: ${GAUSSLOG}/cm/cm_server/cm_server_创建时间.log

关键词:bigger than 70%

3-2-4.jpg

内存使用率超过70%导致cms查杀,此阈值可以通过usage_threshold参数调整

解决方案:可依照以下链接的方式初步排查,联系华为工程师

内存定位三板斧:

https://bbs.huaweicloud.com/forum/thread-110215-1-1.html

[5]故障类型:内存不足导致系统的oom查杀

关键日志: /var/log/message

关键词:oom-killer

3-2-5.jpg

oom_killer(out of memory killer)是Linux内核的一种内存管理机制,在系统可用内存较少的情况下,内核为保证系统还能够继续运行下去,会选择杀掉一些进程释放掉一些内存。通常oom_killer的触发流程是:进程A想要分配物理内存(通常是当进程真正去读写一块内核已经“分配”给它的内存)→触发缺页异常→内核去分配物理内存→物理内存不够了,触发OOM。

解决方案:可依照以下链接的方式初步排查后,联系华为工程师

内存定位三板斧:

https://bbs.huaweicloud.com/forum/thread-110215-1-1.html

[6]故障类型:主线程postmaster收到fast shutdown

关键日志:

DN:${GAUSSLOG}/pg_log/dn_xxxx /postgresql-创建时间.log

CN:${GAUSSLOG}/pg_log/cn_xxxx /postgresql-创建时间.log

关键词:fast shutdown

3-2-6-1.jpg

主进程下发cancel信号导致实例退出。

解决方案:

检查${GAUSSLOG}/bin/gs_ctl/gs_ctl-创建时间.log

3-2-6-2.jpg

若存在stop操作,说明存在手动关闭实例的情况。

若不存在stop操作,请联系华为工程师。

[7]故障类型:core

首先需要确认是否配置core:

3-2-7-1.jpg

没有配置的话需要先行配置。OS core配置教程如下:

DWS-纯软core配置方案:

https://bbs.huaweicloud.com/forum/thread-182036-1-1.html

DWS-HC/HCS/HCSO配core方案:

https://bbs.huaweicloud.com/forum/thread-181948-1-1.html

请注意:core配置完成需要重启集群生效,请预留时间窗口,防止影响业务。

如果配置完成,但是异常的实例目录下不存在core文件检查bbox_core的开启情况以及生成目录:

show enable_bbox_dump;

show bbox_dump_path;

3-2-7-2.jpg

如果bbox_core开启且目录与实例目录不一致,到此目录下查看core文件是否存在。确认core文件存在后联系华为工程师。

3.3集群状态异常

[1]主备不均衡

DWS-纯软主备均衡:

https://bbs.huaweicloud.com/forum/thread-145786-1-1.html

DWS-HC/HCS/HCSO主备均衡:

https://bbs.huaweicloud.com/forum/thread-150166-1-1.html

集群均衡失败:

https://bbs.huaweicloud.com/blogs/203410

若执行以上步骤未成功,请联系华为工程师

[2]集群降级

DWS-纯软gs_replace修复实例:

https://bbs.huaweicloud.com/forum/thread-145788-1-1.html

DWS- HC/HCS/HCSO gs_replace修复实例:

https://bbs.huaweicloud.com/forum/thread-150101-1-1.html

若执行以上步骤未成功,请联系华为工程师

[3]集群不可用

互信丢失导致集群不可用:

https://bbs.huaweicloud.com/forum/thread-122604-1-1.html

磁盘使用率达100%导致集群不可用:

https://bbs.huaweicloud.com/forum/thread-89229-1-1.html

集群不可用,实例状态处于Promoting状态:

https://bbs.huaweicloud.com/forum/thread-116077-1-1.html

不符合以上场景,请联系华为工程师。

可选应急操作:

DWS-纯软重启集群:

https://bbs.huaweicloud.com/forum/thread-147701-1-1.html

DWS- HC/HCS/HCSO重启集群:

https://bbs.huaweicloud.com/forum/thread-150174-1-1.html

[4]集群只读

磁盘使用率相关问题定位:

https://bbs.huaweicloud.com/forum/thread-59485-1-1.html

不符合以上场景,请联系华为工程师。



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。