版本:latest

Cluster Diagnosis

概述

在现网业务中需要对发生的故障原因进行快速定位定界,本功能可以通过收集数据库实例中各个组件(如CMS、DN)等的信息和即时状态(如网络连通性),来判断实例环境是否存在故障,以及故障根因。可用于实现实例级别的故障根因诊断。

DBMind对cmd-exporter进行加强,本版本支持DN、CMS、CMA、ffic、OM_Monitor等日志采集,同时也支持基于节点间网络连通(如ping)状态采集。同时DBMind对现网故障场景进行了梳理,并对数据集进行枚举扩充,最终实现DN故障快速定位。

说明

由于该功能是根据日志来进行诊断的,所以诊断结果中的时间可能因为日志的延迟或者日志的延迟处理,导致诊断结果中的时间晚于故障发生的时间。

表 1 现支持诊断的DN故障根因列表

DN故障根因

未知原因/Unknown。

实例被停止/DN manual stop。

磁盘故障/DN disk damage。

网卡故障/DN NIC down。

端口冲突/DN port conflict。

CM Server仲裁重启DN/DN restarted by cms。

进程僵死重启/DN phony dead。

CORE/Core。

只读/DN read only。

主机断网或宕机/DN down/disconnection。

主备DN间网络异常/DN Primary disconnected with Standby。

DN IP丢失/DN ip lost。

说明

当cm_ctl query的集群状态输出结果异常时,一般是发生了调用栈输出,这种情况下难以获取集群状态,无法获取集群的诊断结果,相关状态标记为"abnormal_output_from_cm_ctl_query", 诊断结果为Unknown。 当DN节点处于Offline状态时,不对其进行数据库实例故障诊断,返回状态为Normal,状态码-1。

使用指导

在DN实例产生异常告警时,一个完整的用于启动实例故障分析功能的命令是:

gs_dbmind component cluster_diagnosis --conf {confpath} --host {ip_address} --role dn --time "2023-04-20 16:00:00" --method tree

输入此命令后,系统读取所设定时间前3分钟的日志记录,并对选定的DN实例使用选定方法进行分析,分析的结果示例如图1所示。

图 1 DN实例使用选定方法分析

返回结果前半部分的字典给出对日志的解析结果,其中Good表示该项正常,Bad表示该项有异常;最后的Output表示输出结果。

说明

  • 单次诊断读取的是诊断时间点之前三分钟的日志和节点状态,由于网络延迟,模型计算用时等因素,实际时间会略短于三分钟,综合各种因素,以150秒内的诊断结果作为参考更为准确。
  • 集群故障诊断功能的网络连通性诊断是通过各个数据库节点之间的连通性来判断的,对于单节点集群,不存在数据库节点之间的连通性,所以集群诊断不支持单节点集群的故障诊断。
  • 数据库实例诊断功能中,判断网络连通性的超时时长是1秒,当网络延迟达到1秒及以上时,节点会被判断为断开连接。
  • 尝试对于新近纳管的集群进行集群诊断时,由于采集数据存在延迟,可能会出现短暂的网络异常。

获取帮助

模块命令行说明:

gs_dbmind component cluster_diagnosis --help

显示如下帮助信息:

usage: [-h] --conf CONF --host HOST --role {cn,dn} [--time TIME] [--method {logical,tree}]
Cluster diagnosis.
optional arguments:
  -h, --help            show this help message and exit
  --conf CONF           set the directory of configuration files
  --host HOST           set the host of the cluster node, ip only.
  --role {cn,dn}        set the role of instance for diagnosis. roles: [cn]
                        are not supported for centralized DB.
  --time TIME           set time for diagnosis in timestamp(ms) or datetime format
  --method {logical,tree}
                        set method for the model: logical: if-else, tree: xgboost.

命令参考

表 1 命令行参数说明

参数

参数说明

取值范围

-h, --help

帮助命令。

-

--conf

连接时序数据库需要的配置文件地址。

-

--host

分析的目标节点的IP地址。

-

--role

分析的目标节点的角色(仅支持DN,使用CN会触发异常提示)。

目前仅支持{dn}。(输入cn会提示异常:cn不在实例状态中)。

--time

分析的异常发生的时间点,默认值是当前时间,日期时间格式为 %Y-%m-%d %H:%M:%S。

日期时间格式或者以毫秒为单位的时间戳。

--method

分析的方法,目前提供故障定位逻辑模型以及决策树模型两种方法。

{logical, tree}。

常见问题处理

如果尝试启动实例诊断时发现系统不能返回预期的诊断结果,需按照以下顺序逐项排查:

  • 检查连接时序数据库需要的配置文件地址是否输入正确,是否包含实例诊断需要读取的日志文件,所用账户是否有权限读写日志,以及日志文件是否损坏,能否正常读写。
  • 检查目标节点的IP地址是否有误。
  • 检查是否支持对所选定的实例进行诊断,实例诊断目前仅支持对DN的诊断,并检查参数是否输入正确。
  • 检查所键入的异常发生时间点是否符合日期时间格式,此外,实例诊断仅支持对当前及过去时刻的诊断,即只能针对过去或与当前时间点相关的事件。
  • 检查所选择的诊断方法是否有输入正确,并且是否超出支持范围。
  • 对于网卡故障的监测,建议在时序数据库采集数据时将cmd-exporter同时连接在多个网卡上,以便在其中某一网卡故障时,其他网卡仍然能正常将消息发送。