gs_check
背景信息
gs_check改进增强,统一化当前系统中存在的各种检查工具,例如gs_check、gs_checkos等,帮助用户在openGauss运行过程中,全量的检查openGauss运行环境、操作系统环境、网络环境及数据库执行环境,也有助于在openGauss重大操作之前对各类环境进行全面检查,有效保证操作执行成功。
注意事项
- 必须指定-i或-e参数,-i会检查指定的单项,-e会检查对应场景配置中的多项。
- 如果-i参数中不包含root类检查项或-e场景配置列表中没有root类检查项,则不需要交互输入root权限的用户及其密码。
- 可使用—skip-root-items跳过检查项中包含的root类检查,以免需要输入root权限用户及密码。
- MTU值不一致时可能导致检查缓慢或进程停止响应,当巡检工具出现提示时请修改各节点MTU值一致后再进行巡检。
- 交换机不支持当前设置的MTU值时,即使MTU值一致也会出现通信问题引起进程停止响应,需要根据交换机调整MTU大小。
语法
单项检查:
gs_check -i ITEM [...] [-U USER] [-L] [-l LOGFILE] [-o OUTPUTDIR] [--skip-root-items][--set][--routing]
场景检查:
gs_check -e SCENE_NAME [-U USER] [-L] [-l LOGFILE] [-o OUTPUTDIR] [--skip-root-items] [--time-out=SECS][--set][--routing][--skip-items]
显示帮助信息:
gs_check -? | --help
显示版本号信息:
gs_check -V | --version
参数说明
-U
运行openGauss的用户名称。
取值范围:运行openGauss的用户名称。
-L
本地执行。
-i
指定检查项。格式-i CheckXX详细的检查项请参见表1 openGauss状态检查表。
-e
场景检查项。默认的场景有inspect(例行巡检)、upgrade(升级前巡检)、binary_upgrade(就地升级前巡检)、health(健康检查巡检)、install(安装)等,用户可以根据需求自己编写场景。
-l
指定日志文件路径,指定路径时需添加.log后缀。
-o
指定检查结果输出文件夹路径。
—skip-root-items
跳过需要root权限执行的检查项。
—skip-items
跳过指定的检查项。
—format
设置结果报告的格式。
—set
修复支持设置的Abnormal项。
—cid
检查ID,仅被内部check进程使用。
—time-out
设置超时时间。单位为秒,默认为1500s,若用户自定义超时时间不得少于1500s。
—routing
指定业务IP的网段,格式为IP地址:子网掩码。
—disk-threshold=”PERCENT”
检查磁盘占用时可选指定告警阈值,可指定1-99之间的整数,不输入则默认为90。检查其他项时不需要该参数。
-?, —help
显示帮助信息。
-V, —version
显示版本号信息。
表 1 openGauss状态检查表
检查各节点操作系统参数,判断是否等于预期值。检查项不满足warning域则报warning,不满足NG域则检查项不通过,并打印不满足项。 详见操作系统参数。 |
|||
检查openGauss内各个节点的操作系统版本信息,如果满足版本兼容列表且openGauss在同一混搭列表中则检查通过,否则检查不通过。 |
|||
检查文件目录(/opt/huawei/Bigdata/ ,/var/log/Bigdata/, /home/omm)是否存在,(若mount目录包含此目录则忽略)若不存在则查项通过,否则检查项不通过。 |
|||
检查/etc/hosts没有配置localhost检查项不通过,存在带有#openGauss注释的映射则检查项不通过,相同IP不同hostname则检查项不通过,否则通过,若hostname相同,但ip不同检查项不通过。 |
|||
检查CPU核心与可用CPU不符检查项不通过,相符但存在不可用信息Warning。 所有节点CPU信息不相同检查项不通过。 |
|||
(a)PasswordAuthentication=yes; |
|||
|
|||
检查数据库节点的max_process_memory值,判断该参数的值是否大于1G,若不大于则检查项通过,否则检查项不通过。 |
|||
获取当前异步请求值当前异步IO值大于当前节点数据库实例数1048576和104857600则检查项通过,否则检查项不通过。 |
|||
检查磁盘XFS格式信息,如果配置为’rw,noatime,inode64,allocsize=16m’则检查项通过,否则报warning。 |
|||
openGauss路径(GAUSSHOME/PGHOST/GPHOME/GAUSSLOG/tmp及实例目录) 检查以上指定目录使用率,如果使用率超过warning阈值(默认为60%) 报warning超过NG阈值(默认为80%)则检查项不通过,否则通过。 |
|||
openGauss路径(GAUSSHOME/PGHOST/GPHOME/GAUSSLOG/tmp及实例目录) 检查磁盘以上指定目录(目录列表)使用率,如果使用率超过warning阈值(默认为70%) 报warning超过NG阈值(默认为90%)则检查项不通过。openGauss路径下检查GAUSSHOME/PGHOST/GPHOME/GAUSSLOG/tmp/data路径的剩余空间,不满足阈值则检查项不通过,否则通过。 |
|||
检查fencedUDF状态,如果fencedUDF状态为down则报warning;检查openGauss状态,如果openGauss状态为Normal则检查项通过,否则检查项不通过。 |
|||
共享缓冲区需要大于128KB且大于shmmax且大于shmallPAGESIZE |
|||
在各节点检查各实例的配置文件中log_min_messages参数的值,为空则认为是Warning,判断日志级别非waring,则报warning。 |
|||
检查节点目录(实例Xlog路径、GAUSSHOME、GPHOME、PGHOST、GAUSSLOG)权限,如果目录有写入权限且不大于750则检查项通过,否则检查项不通过。 |
|||
检查节点环境变量($GAUSSHOME、$LD_LIBRARY_PATH、$PATH),检查CMS/CMA/数据库节点进程的环境变量。如果环境变量存在并配置正确,进程的环境变量存在则检查项通过,否则检查项不通过。 |
|||
若ip_local_port_range的范围在阈值范围内(默认是26000 65535),并且实例端口不在ip_local_port_range范围内则检查项通过,否则检查项不通过。 |
|||
检查openGauss数据库主节点default_transaction_read_only值若为off则检查通过,否则不通过。 |
|||
检查tmp目录(PGHOST)、OM目录(GPHOME)、日志目录(GAUSSLOG)、data目录、程序目录(GAUSSHOME)下文件是否存在特殊字符以及非omm用户的文件,若不存在则检查项通过,否则检查项不通过。 |
|||
检查各个数据库节点目录是否存在超过4G的文件。任一数据库节点目录及其子目录有超过4G的单个文件,则检查不通过,否则检查通过。 |
|||
检查最大数据库节点数,若最大数据库节点数小于xml配置的节点数数据库节点数(默认值为905)报warning,否则检查项通过。 |
|||
检查(max_connections + max_prepared_transactions) * max_locks_per_transaction的值,若该值大于等于1000000则检查项通过,否则检查项不通过。 |
|||
若存在表在openGauss各数据库节点上的数据分布不均衡,且分布数据最多的数据库节点比最低的数据库节点所分布的数据多100000条以上,则检查不通过,否则检查通过。 |
|||
检查数据库节点级别的表倾斜数据,若分布数据最高的数据库节点比分布数据最低的数据库节点数据量高于5%,则检查不通过,否则检查通过。 |
|||
检查节点backIP对应的网卡MTU值( bond后的物理网卡要确保一致),如果该值不是8192或1500报warning若openGaussMTU值一致则检查项通过,否则检查项不通过。 |
|||
检查是否有配置BONDING_OPTS或BONDING_MODULE_OPTS,若没有配置则报warning。检查各节点bond模式是否一致,如果同时满足则检查项通过,否则检查项不通过。 |
|||
检查cat /proc/interrupts,判断是否开启网卡多队列且绑定不同CPU,如果满足则检查项通过,否则检查项不通过。 |
|||
说明: CheckNetSpeed检查项:
- CheckNetSpeed不支持-L本地检查模式,-L模式无法构造网络压力,检查的结果不准确。
- 在节点数小于6时,speed_test构造的网络压力可能无法跑满带宽,可能会造成检查结果不准确。
用户自定义场景
- 以操作系统用户omm登录数据库主节点。
- 在script/gspylib/inspection/config路径下新建场景配置文件scene_XXX.xml。
将检查项写进场景配置文件中,书写格式为:
<?xml version="1.0" encoding="utf-8" ?>
<scene name="XXX" desc="check cluster parameters before XXX.">
<configuration/>
<allowitems>
<item name="CheckXXX"/>
<item name="CheckXXX"/>
</allowitems>
</scene>
item name为检查项名称
注:用户需自行保证自定义xml的正确性
在home/package/script/gspylib/inspection/config执行如下命令,将此文件分发至执行检查的各个节点
scp scene_upgrade.xml SIA1000068994:home/package/script/gspylib/inspection/config/
说明: home/package/script/gspylib/inspection/config就是新建的场景配置文件的绝对路径。
换至omm用户,执行以下命令查看检查结果。
gs_check -e XXX
用户自定义检查项
新增巡检项配置,修改script/gspylib/inspection/config/items.xml文件,格式如下:
<checkitem id="10010" name="CheckCPU">
<title>
<zh>检查CPU占用率</zh>
<en>Check CPU Idle and I/O wait</en>
</title>
<threshold>
StandardCPUIdle=30;
StandardWIO=30
</threshold>
<suggestion>
<zh>如果idle不足 CPU负载过高,请扩容CPU节点,如果iowait过高,则磁盘为瓶颈,更换高性能磁盘</zh>
</suggestion>
<standard>
<zh>检查主机CPU占用率,如果idle大于30%并且iowait小于30%,则检查项通过,否则检查项不通过</zh>
</standard>
<category>os</category>
<permission>user</permission>
<scope>all</scope>
<analysis>default</analysis>
</checkitems>
- id:巡检项id。
- name:巡检项脚本名, 和巡检项脚本文件名相同。
title: 巡检项描述名称 (支持多语言)。
:中文版检查内容。 :英文版检查内容。 standard:巡检项标准说明(支持多语言)。
- suggestion: 巡检项修复建议说明(支持多语言)。
- threshold:巡检项阈值定义,多值之间使用分号隔开,示例Key1=Value1;Key2=Value2。
- category: 巡检项分类,可选参数:os,device,network,cluster,database,other。
- permission: 巡检项需要的执行权限,可选参数:root,user默认为user(普通用户)。
- scope:巡检项执行的节点范围,可选参数:cn-仅在数据库主节点执行,local-仅在当前节点执行,all-在openGauss所有节点执行,默认为all。
- analysis:巡检项执行结果分析方式,default-检查每个节点的结果,所有节点检查项通过,则最终检查通过,consistent-openGauss内所有节点一致性检查,单节点仅返回结果,各个节点结果一致则判定检查通过,custom-自定义结果分析方式,默认为default。
注:用户需保证自定义xml的正确性
新建检查脚本,脚本名称格式遵循CheckXXXX.py,必须以Check开头,脚本放置在script/gspylib/inspection/items目录下,该目录下脚本安装巡检项分类组织,每个分类一个单独的文件夹,巡检项脚本放置在对应的分类文件夹中。格式如下:
class CheckCPU(BaseItem):
def __init__(self):
super(CheckCPU, self).__init__(self.__class__.__name__)
self.idle = None
self.wio = None
self.standard = None
def preCheck(self):
# check the threshold was set correctly
if (not self.threshold.has_key('StandardCPUIdle')
or not self.threshold.has_key('StandardWIO')):
raise Exception("threshold can not be empty")
self.idle = self.threshold['StandardCPUIdle']
self.wio = self.threshold['StandardWIO']
# format the standard by threshold
self.standard = self.standard.format(idle=self.idle, iowait=self.wio)
def doCheck(self):
cmd = "sar 1 5 2>&1"
output = SharedFuncs.runShellCmd(cmd)
self.result.raw = output
# check the result with threshold
d = next(n.split() for n in output.splitlines() if "Average" in n)
iowait = d[-3]
idle = d[-1]
rst = ResultStatus.OK
vals = []
if (iowait > self.wio):
rst = ResultStatus.NG
vals.append("The %s actual value %s is greater than expected value %s" % ("IOWait", iowait, self.wio))
if (idle < self.idle):
rst = ResultStatus.NG
vals.append("The %s actual value %s is less than expected value %s" % ("Idle", idle, self.idle))
self.result.rst = rst
if (vals):
self.result.val = "\n".join(vals)
所有脚本基于BaseItem基类开发,基类定义的通用的检查流程,通用的检查结果分析方法,默认的结果输出格式。可扩展方法:
doCheck: 该方法包含该检查项具体的检查方法,检查结果格式如下:
result.rst —- 检查结果状态,可选参数:
- OK – 检查项完成,结果通过。
- NA – 当前节点不涉及该检查项。
- NG – 检查项完成,结果不通过。
- WARNING – 检查项完成,结果警告。
- ERROR – 检查项发生内部错误,未完成检查。
preCheck: 检查前条件判定,内置两种实现:cnPreCheck – 用于检查当前执行节点是否包含数据库主节点实例,localPreCheck – 用于检查当前执行节点是否指定节点。可通过巡检项配置文件中的scope参数进行配置。 可重载该方法实现自定义的前置检查
- postAnalysis:检查结果分析方法,内置两种实现:default,consistent。可通过巡检项配置文件中的analysis参数进行配置。可重载该方法实现自定义的结果分析。
注:用户自定义的检查项名称不得与已有检查项名称相同,同时用户需保证自定义检查项脚本的规范性。
将此脚本分发至所有的执行节点。
以omm用户登录,执行以下命令,查看结果。
本地执行:
gs_check -i CheckXXX -L
非本地执行:
gs_check -i CheckXXX
操作系统参数
表 2 操作系统参数
文件系统参数
soft nofile
说明:soft nofile表示软限制,用户使用的文件句柄数量可以超过该限制,但是如果超过会有告警信息。
推荐取值:1000000
hard nofile
说明:hard nofile表示硬限制,是一个严格的限制,用户使用的文件句柄数量一定不能超过该设置。
推荐取值:1000000
stack size
说明:线程堆栈大小。
推荐值:3072
示例
执行单项检查结果:
perfadm@lfgp000700749:/opt/huawei/perfadm/tool/script> gs_check -i CheckCPU
Parsing the check items config file successfully
Distribute the context file to remote hosts successfully
Start to health check for the cluster. Total Items:1 Nodes:3
Checking... [=========================] 1/1
Start to analysis the check result
CheckCPU....................................OK
The item run on 3 nodes. success: 3
Success. All check items run completed. Total:1 Success:1 Failed:0
For more information please refer to /opt/huawei/wisequery/script/gspylib/inspection/output/CheckReport_201902193704661604.tar.gz
本地执行结果:
perfadm@lfgp000700749:/opt/huawei/perfadm/tool/script> gs_check -i CheckCPU -L
2017-12-29 17:09:29 [NAM] CheckCPU
2017-12-29 17:09:29 [STD] 检查主机CPU占用率,如果idle 大于30%并且iowait 小于 30%.则检查项通过,否则检查项不通过
2017-12-29 17:09:29 [RST] OK
2017-12-29 17:09:29 [RAW]
Linux 4.4.21-69-default (lfgp000700749) 12/29/17 _x86_64_
17:09:24 CPU %user %nice %system %iowait %steal %idle
17:09:25 all 0.25 0.00 0.25 0.00 0.00 99.50
17:09:26 all 0.25 0.00 0.13 0.00 0.00 99.62
17:09:27 all 0.25 0.00 0.25 0.13 0.00 99.37
17:09:28 all 0.38 0.00 0.25 0.00 0.13 99.25
17:09:29 all 1.00 0.00 0.88 0.00 0.00 98.12
Average: all 0.43 0.00 0.35 0.03 0.03 99.17
执行场景检查结果:
[perfadm@SIA1000131072 Check]$ gs_check -e inspect
Skip CheckHdfsForeignTabEncoding because it only applies to V1R5 upgrade V1R6 with cluster.
Parsing the check items config file successfully
The below items require root privileges to execute:[CheckBlockdev CheckIOConfigure CheckMTU CheckRXTX CheckMultiQueue CheckFirewall CheckSshdService CheckSshdConfig CheckCrondService CheckMaxProcMemory CheckBootItems CheckFilehandle CheckNICModel CheckDropCache]
Please enter root privileges user[root]:
Please enter password for user[root]:
Check root password connection successfully
Distribute the context file to remote hosts successfully
Start to health check for the cluster. Total Items:57 Nodes:3
Checking... [=========================] 57/57
Start to analysis the check result
CheckClusterState...........................OK
The item run on 3 nodes. success: 3
CheckDBParams...............................OK
.........................................................................
CheckMpprcFile..............................OK
The item run on 3 nodes. success: 3
Analysis the check result successfully
Failed. All check items run completed. Total:57 Success:49 Warning:5 NG:3 Error:0
For more information please refer to /opt/huawei/wisequery/script/gspylib/inspection/output/CheckReport_inspect_201902207129254785.tar.gz