gs_check
背景信息
gs_check改进增强,统一化当前系统中存在的各种检查工具,例如gs_check,gs_checkos等,帮助用户在集群运行过程中,全量的检查集群运行环境,操作系统环境,网络环境及数据库执行环境,也有助于在集群重大操作之前对各类环境进行全面检查,有效保证操作执行成功。
注意事项
- 扩容新节点检查只能在root用户下执行,其他场景都必须在omm用户下执行。
- 必须指定-i或-e参数,-i会检查指定的单项,-e会检查对应场景配置中的多项。
- root用户在非本地模式下只能进行扩容新节点检查。
- 如果-i参数中不包含root类检查项或-e场景配置列表中没有root类检查项,则不需要交互输入root权限的用户及其密码。
- 可使用--skip-root-items跳过检查项中包含的root类检查,以免需要输入root权限用户及密码。
- 黑名单检查项仅适用于R5升级到R6。
- 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] [--hosts] [--skip-root-items] [--time-out=SECS][--set][--routing][--skip-items]
- 显示帮助信息
gs_check -? | --help
- 显示版本号信息
gs_check -V | --version
参数说明
- -U
运行集群的用户名称。
取值范围:运行集群的用户名称。
- -L
本地执行
- -i
指定检查项。格式-i CheckXX详细的检查项请参见表1。
- -e
场景检查项。默认的场景有inspect(例行巡检)、upgrade(升级前巡检)、expand(扩容前巡检)、binary_upgrade(就地升级前巡检)、health(健康检查巡检)、install(安装),replace(节点替换),expand_new_node(扩容)等,用户可以根据需求自己编写场景。
- -l
指定日志文件路径。
- -o
指定检查结果输出文件夹路径。
- --hosts
用于保存执行检查的节点地址的文件,expand_new_node场景必加,其余场景可加可不加,但必须保证要写对。
- --skip-root-items
跳过需要root权限执行的检查项。
- --skip-items
跳过指定的检查项。
- --format
设置结果报告的格式。
- --set
修复支持设置的Abnormal项。
- --time-out
设置超时时间。单位为秒,默认为1500s,若用户自定义超时时间不得少于1500s。
- --routing
指定业务IP的网段,格式为IP地址:子网掩码。
- --disk-threshold="PERCENT"
检查磁盘占用时可选指定告警阈值,可指定1-99之间的整数,不输入则默认为90。检查其他项时不需要该参数。
- --nodegroup-name
指定缩容磁盘空间检查时执行缩容的逻辑集群名称,仅在-i CheckSpaceForShrink时有效。
- --ShrinkNodes
指定缩容磁盘空间检查时缩容节点名称,仅在-i CheckSpaceForShrink时有效。
- -?, --help
显示帮助信息。
- -V, --version
显示版本号信息。
表1 集群状态检查表 状态
巡检项
检查内容
是否支持--set
os
CheckCPU(检查CPU使用率)
检查主机CPU占用率,如果idle大于30%并且iowait小于30%。则检查项通过,否则检查项不通过。
否
CheckFirewall(检查防火墙状态)
检查主机防火墙状态,如果防火墙关闭则检查项通过,否则检查项不通过。
是
CheckTimeZone(检查时区一致性)
检查集群内各节点时区,如果时区一致则检查通过,否则检查项不通过。
否
CheckSysParams(检查系统参数)
检查各节点操作系统参数,判断是否等于预期值。检查项不满足warning域则报warning,不满足NG域则检查项不通过,并打印不满足项。
详见操作系统参数。
是
CheckOSVer(检查操作系统版本)
检查集群内各个节点的操作系统版本信息,如果满足版本兼容列表且全集群在同一混搭列表中则检查通过,否则检查不通过。
否
CheckNTPD(检查NTPD服务)
检查系统NTPD服务,如果服务开启且各节点时间误差在1分钟以内则检查项通过,否则检查项不通过。
否
CheckTHP(检查THP服务)
检查系统THP服务,如果服务开启则检查项通过,否则检查项不通过。
是
CheckSshdService(检查sshd服务是否已启动)
检查系统是否存在sshd服务,若存在则检查项通过,否则检查项不通过。
否
CheckCrondService(检查crontab服务是否已启动)
检查系统是否存在crontab服务,若存在则检查项通过,否则检查项不通过。
是
CheckCrontabLeft(检查crontab是否有残留Gauss相关信息)
检查crontab是否残留Gauss相关信息,若无该信息则检查项通过,否则检查项不通过。
是
CheckDirLeft(检查文件目录是否有残留)
检查扩容新节点文件目录(/opt/huawei/Bigdata/ ,/var/log/Bigdata/, /home/omm)是否存在,(若mount目录包含此目录则忽略)若不存在则查项通过,否则检查项不通过。
是
CheckProcessLeft(检查进程是否有残留)
检查扩容新节点上是否残留gaussdb和omm进程,若未残留则检查项通过,否则检查项不通过。
是
CheckStack(栈深度检查)
检查栈深度,若各个节点不一致则报warning ,若大于等于3072则检查项通过,否则不通过。
是
CheckNoCheckSum(检查nochecksum值是否为预期值且一致)
检查nochecksum值,
- Redhat 6.4/6.5且使用bond网卡时,各个节点都为Y则检查项通过,否则检查项不通过。
- 其他系统:若各个节点都为N则检查项通过,否则检查项不通过。
否
CheckOmmUserExist(检查omm用户是否存在)
检查扩容新节点上是否存在omm用户,若不存在omm用户则检查项通过,否则检查项不通过。
是
CheckPortConflict(检查DN,CN端口是否占用)
检查CN端口,DN端口是否已被占用,若未占用则检查项通过,否则检查项不通过。
是
CheckSysPortRange(检查ip_local_port_range设置范围)
检查ip_local_port_range系统参数范围,若范围在26000~65535则检查项通过,否则检查项不通过。
是
CheckEtcHosts(检查/etc/hosts中是否有重复地址以及localhost配置)
检查/etc/hosts没有配置localhost检查项不通过,存在带有#GaussDB Kernel注释的映射则检查项不通过,相同IP不同hostname则检查项不通过,否则通过,若hostname相同,但ip不同检查项不通过。
否
CheckCpuCount(检查CPU核数)
检查CPU核心与可用CPU不符检查项不通过,相符但存在不可用信息Warning。 所有节点CPU信息不相同检查项不通过。
否
CheckSctpService(检查sctp服务)
检查sctp服务开启且写在开机自启动文件中则检查项通过,否则检查项不通过。
是
CheckHyperThread(检查超线程是否打开)
检查超线程,若打开则检查项通过,否则检查项不通过。
否
CheckMemInfo(检查内存总大小)
检查各节点总内存大小是否一致,若检查结果一致,则检查项通过,否则报warning。
否
CheckBalanceState(检查负载均衡状态)
查询Balance状态,如果查询结果为YES则检查项通过,如果不是Yes则报Warning,如果查询失败则检查项不通过。
否
CheckCmserverStandby(检查cm_server备机状态)
如果查询结果为Standby则检查项通过,否则报出Warning。
否
CheckSshdConfig(检查sshd服务配置是否正确)
检查/etc/ssh/sshd_config文件,
(a)PasswordAuthentication=yes;
(b)MaxStartups=1000;
(c)UseDNS=no;
(d)ClientAliveInterval大于10800或者等于0
配置如上所示则检查项通过,若a、c配置不正确则报warning,b、d配置不正确则检查项不通过。
是
CheckMaxHandle(检查句柄最大设置)
检查操作系统最大句柄值,如果该值大于等于1000000则检查项通过,否则检查项不通过。
是
CheckKernelVer(检查内核版本)
检查各节点系统内核版本信息,如果版本信息一致则检查项通过,否则报Warning。
否
CheckEncoding(检查编码格式)
检查集群内各个节点的系统编码,如果编码一致则检查项通过,否则检查项不通过。
否
CheckBootItems(检查启动项)
检查是否有手动添加的启动项,如果没有则检查通过,否则检查不通过。
否
CheckDropCache(检查DropCache进程)
检查各节点是否有dropcache进程在运行,若有则检查通过,否则检查不通过。
否
CheckFilehandle(检查文件句柄)
此检查项检查以下两项,两项都通过为通过,否则为不通过:
- 检查每个gaussdb进程打开的进程数是否超过80万,不超过则检查通过,否则检查不通过。
- 检查是否有slave进程使用的句柄数超过master进程,如果没有则检查通过,否则检查不通过。
否
CheckKeyProAdj(检查关键进程omm_adj的值)
检查所有关键进程,如果所有关键进程的omm_adj值为0,则通过,否则不通过。
否
CheckMaxProcMemory(检查max_process_memory参数设置是否合理)
检查CN和主备DN的max_process_memory值,判断该参数的值是否大于1G,若不大于则检查项通过,否则检查项不通过。
是
device
CheckSwapMemory(检查交换内存)
检查交换内存和总内存大小,若检查结果为0则检查项通过,否则检查项报Warning大于总内存时检查项不通过。
是
CheckLogicalBlock(检查磁盘逻辑块)
检查磁盘逻辑块大小,若为512则检查项通过,否则检查项不通过。
是
CheckIOrequestqueue(检查IO请求)
检查IO值,如果该值为32768则检查项通过,否则检查项不通过。
是
CheckMaxAsyIOrequests(检查最大异步请求)
获取当前异步请求值当前异步IO值大于(dn+cn)*1048576和104857600则检查项通过,否则检查项不通过。
是
CheckIOConfigure(检查IO配置)
检查IO配置,如果是deadline则检查项通过,否则检查项不通过。
是
CheckBlockdev(检查磁盘预读块)
检查磁盘预读块大小,如果预读块大小为16384则检查项通过,否则检查项不通过。
是
CheckDiskFormat(检查磁盘格式参数)
检查磁盘XFS格式信息,如果配置为'rw,noatime,inode64,allocsize=16m'则检查项通过,否则报warning。
否
CheckInodeUsage(检查磁盘inodes使用率)
新节点:所有磁盘
老节点:集群路径(GAUSSHOME/PGHOST/GAUSSHOME/GAUSSLOG/tmp及实例目录)
检查以上指定目录使用率,如果使用率超过warning阈值(默认为60%) 报warning超过NG阈值(默认为80%)则检查项不通过,否则通过。
否
CheckSpaceUsage(检查磁盘使用率)
新节点:所有磁盘
老节点:集群路径(GAUSSHOME/PGHOST/GAUSSHOME/GAUSSLOG/tmp及实例目录)
检查磁盘以上指定目录(目录列表)使用率,如果使用率超过warning阈值(默认为70%) 报warning超过NG阈值(默认为90%)则检查项不通过。集群路径下检查GAUSSHOME/PGHOST/GPHOME/GAUSSLOG/tmp/data路径的剩余空间,不满足阈值则检查项不通过,否则通过。
否
CheckSpaceForShrink(缩容磁盘空间检查)
检查逻辑集群将指定主机缩容掉后,剩余主机完成重分布后磁盘空间使用率,如果使用率超过阈值(默认70%)则检查项不通过,不能进行缩容。
说明:- gs_shrink内部调用,不建议人工调用。
- 该检查需添加参数:[--nodegroup-name=LCGROUPNAME] [--ShrinkNodes= HOSTNAME],host之间以逗号隔开。
否
CheckDiskConfig(检查磁盘空间大小一致性)
检查磁盘名大小挂载点是否一致,若一致则检查项通过,否则报warning。
否
CheckXid(检查CheckXid数值)
查询xid的数值,如果大于10亿报Warning,大于18亿则检查项不通过。
否
CheckSysTabSize(检查每个实例的系统表容量)
如果每一块磁盘的剩余容量大于该磁盘上所有实例的系统表容量总和则检查项通过,否则检查项不通过。
否
cluster
CheckClusterState(检查集群状态)
检查fencedUDF状态,如果fencedUDF状态为down则报warning;检查集群状态,如果集群状态为Normal则检查项通过,否则检查项不通过。
否
CheckConfigFileDiff(检查XML差异)
检查静态配置文件与安装xml文件是否满足扩容条件,若满足,则检查项通过,否则检查项不通过。
否
CheckDBParams(检查数据库集群参数)
检查CN检查共享缓冲区大小和Sem参数。
主DN实例检查共享缓冲区大小和最大连接数。
共享缓冲区需要大于128KB且大于shmmax且大于shmall*PAGESIZE
若存在CN,则Sem值需大于(DN最大连接数+150)/16向上取整。
以上项完全满足则检查项通过,否则检查项不通过。
是
CheckDebugSwitch(检查日志级别)
在各节点检查各实例的配置文件中log_min_messages参数的值,为空则认为是Warning,判断日志级别非waring,则报warning。
是
CheckUpVer(检查升级版本是否一致)
检查集群各个节点上升级包的版本,如果一致则检查项通过,否则检查项不通过。
否
CheckDirPermissions(检查目录权限)
检查节点目录(实例Xlog路径、GAUSSHOME、GPHOME、PGHOST、GAUSSLOG)权限,如果目录有写入权限且不大于750则检查项通过,否则检查项不通过。
是
CheckEnvProfile(检查环境变量)
检查节点环境变量($GAUSSHOME、$LD_LIBRARY_PATH、$PATH),检查CMS/CMA/GTM/CN/DN进程的环境变量。如果环境变量存在并配置正确,进程的环境变量存在则检查项通过,否则检查项不通过。
否
CheckGaussVer(检查gaussdb版本)
检查各个节点gaussdb版本是否一致,如果版本一致则检查项通过,否则检查项不通过。
否
CheckPortRange(检查端口范围)
若ip_local_port_range的范围在阈值范围内(默认是26000 65535),并且实例端口不在ip_local_port_range范围内则检查项通过,否则检查项不通过。
否
CheckReadonlyMode(检查只读模式)
检查集群中所有含CN上default_transaction_read_only值若为off则检查通过,否则不通过。
否
CheckCatchup(检查Catchup)
检查gaussdb进程堆栈是否能搜索到CatchupMain函数,若搜索不到则检查项通过,否则检查项不通过。
否
CheckProcessStatus(检查集群进程属主)
检查'om_monitor', 'cm_agent', 'cm_server', 'gs_gtm', 'gaussdb'进程属主,若不存在omm以外的属主则检查项通过,否则检查项不通过。
否
CheckSpecialFile(特殊文件检查)
检查tmp目录(PGHOST)、OM目录(GPHOME)、日志目录(GAUSSLOG)、data目录、程序目录(GAUSSHOME)下文件是否存在特殊字符以及非omm用户的文件,若不存在则检查项通过,否则检查项不通过。
否
CheckCollector(检查集群的信息收集)
在output目录下查看信息收集是否成功,若收集成功则检查项通过,否则检查项不通过。
否
CheckCgroup(检查gs_cgroup数据一致性)
检查各个节点Cgroups数据,若各节点数据一致则检查项通过,否则检查项不通过。
是
CheckOMMonitor(检查om_moitor进程)
检查各个节点om_monitor进程是否存在,若各节点都存在则检查项通过,否则检查项不通过。
是
CheckLargeFile(检查数据目录大文件)
检查各个DN目录是否存在超过4G的文件。任一DN目录及其子目录有超过4G的单个文件,则检查不通过,否则检查通过。
否
CheckProStartTime(关键进程启动时间检测)
检查关键进程启动时间是否间隔超过5分钟,超过则检查不通过,否则检查通过。
否
CheckDilateSysTab(检查系统表膨胀)
检查系统表是否膨胀,若膨胀则不通过,否则检查通过。
是
CheckMpprcFile(检测环境变量分离文件改动)
检查是否存在对环境变量分离文件的改动,若存在则检查不通过,否则检查通过。
否
database
CheckLockNum(检查锁数量)
检查数据库锁数量,查询成功检查项通过。
否
CheckActQryCount(检查CN活跃连接数量)
查询活跃连接数目及max_active_statements,若活跃连接数目超过max_active_statements则报warning。
否
CheckArchiveParameter(检查归档参数)
检查数据库归档参数,如果未打开或打开且在CN下则检查项通过, 打开且不在CN目录下则检查项不通过。
是
CheckBlackList(检查黑名单语法)
检查数据库黑名单语法,如果黑名单不存在则检查项通过,否则检查项不通过。
否
CheckCNNum(检查CN个数)
检查集群CN实例个数,如果CN个数不大于10则检查项通过,否则检查项不通过。
否
CheckCurConnCount(检查当前连接数)
检查数据库连接数,如果连接数小于最大连接数的90%则检查项通过,否则检查项不通过。
否
CheckCursorNum(检查当前游标数)
检查数据库的游标数,检查成功则检查项通过,否则检查项不通过。
否
CheckMaxDatanode(检查comm_max_datanode参数值范围小于DN个数)
检查最大DN数,若最大DN数小于xml配置的节点数*DN数(默认值为90*5)报warning,否则检查项通过。
是
CheckPgPreparedXacts(检查残留两阶段事务)
检查pgxc_prepared_xacts参数,如果不存在二阶段事务则检查项通过,否则检查项不通过。
是
CheckPgxcgroup(检查pgxc_group表中需要重分布的个数)
检查pgxc_group表中需要重分布的个数,检查结果为0则通过, 否则不通过。
否
CheckLockState(集群是否被锁)
检查集群是否被锁,若集群被锁则不通过,否则检查项通过。
否
CheckIdleSession(检查业务停止)
检查非空闲会话数,如果数量为0则检查项通过,否则检查项不通过。
否
CheckDBConnection(检查数据库连接)
检查能否连接数据库,如果连接成功则检查项通过,否则检查项不通过。
否
CheckGUCConsistent(检查GUC参数一致性)
- 对于逻辑集群,下面两项都一致时,检查通过,否则检查不通过。
- 检查逻辑集群相同实例上不可修改的GUC参数的值是否一致;
- 检查逻辑集群相同实例上可修改的GUC参数的值在逻辑集群内部是否一致。
- 对于非逻辑集群,集群相同实例上的GUC参数的值一致则检查通过,否则检查不通过。
否
CheckGUCValue(GUC参数检查)
检查(max_connections + max_prepared_transactions) * max_locks_per_transaction的值,若该值大于等于1000000则检查项通过,否则检查项不通过。
是
CheckCgroupTable(检查gs_cgroup系统表)
检查Cgroups系统表,若不存在用户新建的Cgroups则检查项通过,否则报warning。
是
CheckPMKData(检查PMK异常数据)
检查数据库PMK schema是否包含有异常数据,如果不存在异常数据则检查项通过,否则检查项不通过。
是
CheckSysTable(检查系统表)
检查系统表,检查成功则检查项通过。
否
CheckSysTabSize(检查每个实例的系统表容量)
如果每一块磁盘的剩余容量大于该磁盘上所有实例的系统表容量总和则检查项通过,否则检查项不通过。
否
CheckTableSpace(检查表空间路径)
表空间路径和集群路径之间不能存在嵌套且表空间路径相互不能存在嵌套,则检查项通过,否则检查项不通过。
否
CheckTableSkew(检查表级别数据倾斜)
若存在表在集群各DN上的数据分布不均衡,且分布数据最多的DN比最低的DN所分布的数据多100000条以上,则检查不通过,否则检查通过。
否
CheckDNSkew(检查DN级别数据分布倾斜)
检查DN级别的表倾斜数据,若分布数据最高的DN节点比分布数据最低的DN节点数据量高于5%,则检查不通过,否则检查通过。
否
CheckUnAnalyzeTable(检查未做analyze的表)
若存在未做analyze的表,并且表中至少包含一条数据,则检查不通过,否则检查通过。
是
CheckCreateView(创建视图检查)
创建视图时,如果查询语句中含有子查询,并且子查询结果查询解析和重写之后存在别名重复,检查不通过,否则检查通过。
否
CheckHashIndex(hash index语法检查)
如果存在hash index则检查不通过,否则检查通过。
否
CheckHdfsForeignTabEncoding(检查HDFS外表编码)
检查如果数据库编码是SQL-ASCII和LATIN1以外的格式且存在HDFS外表,则检查项不通过,否则检查通过。
否
CheckNextvalInDefault(检查Default表达式中包含nextval(sequence))
检查Default表达式中是否包含nextval(sequence),若包含则不通过,否则通过。
否
CheckNodeGroupName(Node group编码格式检查)
存在非SQL_ASCII字符的Node Group名称则检查不通过,不存在则检查通过 。
是
CheckPgxcRedistb(检查重分布残留的临时表 )
检查数据库中是否存在重分布残留的临时表,若不存在则检查通过,否则检查不通过 。
否
CheckPoolerNum(检查Pooler使用量)
检查Pooler使用量,若超过33000则检查不通过,超过28000报Warning,否则检查通过。
否
CheckReturnType(用户自定义函数返回值类型检查)
检查用户自定义函数是否包含非法返回类型,若包含则检查不通过,否则检查通过。
否
CheckSysadminUser(检查sysadmin用户)
检查除集群属主外是否存在数据库管理员用户,若存在则不通过,否则检查通过。
否
CheckTDDate(TD数据库中orc表date类型列检查)
检查TD模式数据库下的orc表中是否包含date类型的列,若包含检查不通过,否则检查通过。
否
CheckDropColumn(drop column检查)
如果存在drop column的表,则检查不通过,否则检查通过。
否
CheckDiskFailure(检查磁盘故障)
对集群中的所有数据做全量查询,若存在查询错误则检查不通过,否则检查通过。
否
network
CheckPing(检查网络通畅)
检查集群内所有节点的互通性,如果各节点所有IP均可ping通则检查项通过,否则检查项不通过。
否
CheckRXTX(检查网卡RXTX值)
检查节点backIP的RX/TX值,如果该值为4096则检查项通过,否则检查项不通过。
是
CheckMTU(检查网卡MTU值)
检查节点backIP对应的网卡MTU值( bond后的物理网卡要确保一致),如果该值不是8192或1500报warning若集群MTU值一致则检查项通过,否则检查项不通过。
是
CheckNetWorkDrop(检查网络掉包率)
检查各IP1分钟内网络掉包率,如果不超过1%则检查项通过,否则检查项不通过。
否
CheckBond(检查网卡绑定模式)
检查是否有配置BONDING_OPTS或BONDING_MODULE_OPTS,若没有配置则报warning。检查各节点bond模式是否一致,如果同时满足则检查项通过,否则检查项不通过。
是
CheckMultiQueue(检查网卡多队列)
检查cat /proc/interrupts,判断是否开启网卡多队列且绑定不同CPU,如果满足则检查项通过,否则检查项不通过。
是
CheckUsedPort(检查随机端口使用数量)
检查net.ipv4.ip_local_port_range,范围大于等于OS默认值通过(32768-61000);
检查TCP协议随机端口数,小于总随机端口数的80%通过;
检查SCTP协议随机端口数,小于总随机端口数的80%通过。
否
CheckNICModel(网卡型号和驱动版本一致性检查)
检查各个节点的网卡型号以及驱动版本是否一致,一致则通过,否则报warning。
否
CheckRouting(本地路由表检查)
检查各节点在业务IP网段的IP个数,超过1个则报warning,否则检查通过。
否
CheckNetSpeed(检查网卡接收带宽,ping值,丢包率)
网络满载时,检查网卡平均接收带宽大于600MB通过;
网络满载时,检查网络ping值,小于1秒通过;
网络满载时,检查网卡丢包率,小于1%通过。
否
other
CheckDataDiskUsage(检查DN磁盘空间使用率)
检查磁盘DN目录使用率,如果使用率低于90%则检查项通过,否则检查项不通过。
否
说明:
CheckNetSpeed检查项:
- CheckNetSpeed不支持-L本地检查模式,-L模式无法构造网络压力,检查的结果不准确。
- 在节点数小于6时,speed_test构造的网络压力可能无法跑满带宽,可能会造成检查结果不准确。
用户自定义场景
- 以操作系统用户omm登录CN所在主机,执行source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile命令启动环境变量。
- 在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负载过高,请扩容节点,如果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: 巡检项描述名称 (支持多语言)。
<zh>:中文版检查内容。
<en>:英文版检查内容。
- standard:巡检项标准说明(支持多语言)。
- suggestion: 巡检项修复建议说明(支持多语言)。
- threshold:巡检项阈值定义,多值之间使用分号隔开,示例Key1=Value1;Key2=Value2。
- category: 巡检项分类,可选参数:os,device,network,cluster,database,other。
- permission: 巡检项需要的执行权限,可选参数:root,user默认为user(普通用户)。
- scope:巡检项执行的节点范围,可选参数:cn-仅在CN执行,local-仅在当前节点执行,all-在集群所有节点执行,默认为all。
- analysis:巡检项执行结果分析方式,default-检查每个节点的结果,所有节点检查项通过,则最终检查通过,consistent-集群内所有节点一致性检查,单节点仅返回结果,各个节点结果一致则判定检查通过,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 – 用于检查当前执行节点是否包含CN实例,localPreCheck – 用于检查当前执行节点是否指定节点。可通过巡检项配置文件中的scope参数进行配置。 可重载该方法实现自定义的前置检查
- postAnalysis:检查结果分析方法,内置两种实现:default,consistent。可通过巡检项配置文件中的analysis参数进行配置。可重载该方法实现自定义的结果分析。
注:用户自定义的检查项名称不得与已有检查项名称相同,同时用户需保证自定义检查项脚本的规范性。
- 将此脚本分发至所有的执行节点。
- 以root用户登录扩容后的新节点,或以omm用户登录扩容前的老节点,执行以下命令,查看结果。
本地执行:
gs_check -i CheckXXX -L
非本地执行:
gs_check -i CheckXXX
操作系统参数
表2 操作系统参数 参数名称
参数说明
推荐取值
net.ipv4.tcp_max_tw_buckets
表示同时保持TIME_WAIT状态的TCP/IP连接最大数量。如果超过所配置的取值,TIME_WAIT将立刻被释放并打印警告信息。
10000
net.ipv4.tcp_tw_reuse
允许将TIME-WAIT状态的sockets重新用于新的TCP连接。
- 0表示关闭。
- 1表示开启。
1
net.ipv4.tcp_tw_recycle
表示开启TCP连接中TIME-WAIT状态sockets的快速回收。
- 0表示关闭。
- 1表示开启。
1
net.ipv4.tcp_keepalive_time
表示当keepalive启用的时候,TCP发送keepalive消息的频度。
30
net.ipv4.tcp_keepalive_probes
在认定连接失效之前,发送TCP的keepalive探测包数量。这个值乘以tcp_keepalive_intvl之后决定了一个连接发送了keepalive之后可以有多少时间没有回应。
9
net.ipv4.tcp_keepalive_intvl
当探测没有确认时,重新发送探测的频度。
30
net.ipv4.tcp_retries1
在连接建立过程中TCP协议最大重试次数。
5
net.ipv4.tcp_syn_retries
TCP协议SYN报文最大重试次数。
5
net.ipv4.tcp_synack_retries
TCP协议SYN应答报文最大重试次数。
5
net.sctp.path_max_retrans
SCTP协议最大重试次数。
10
net.sctp.max_init_retransmits
SCTP协议INIT报文最大重试次数。
10
net.sctp.association_max_retrans
SCTP协议单个逻辑连接最大重试次数。
10
net.sctp.hb_interval
SCTP协议心跳检测包重传间隔。
30000
net.ipv4.tcp_retries2
控制内核向已经建立连接的远程主机重新发送数据的次数,低值可以更早的检测到与远程主机失效的连接,因此服务器可以更快的释放该连接。
发生“connection reset by peer”时可以尝试调大该值规避问题。
12
vm.overcommit_memory
控制在做内存分配的时候,内核的检查方式。
- 0:表示系统会尽量精确计算当前可用的内存。
- 1:表示不作检查直接返回成功。
- 2:内存总量×vm.overcommit_ratio/100+SWAP的总量,如果申请空间超过此数值则返回失败。
内核默认是2过于保守,推荐设置为0,如果系统压力大可以设置为1。
0
net.sctp.sndbuf_policy
SCTP发送缓冲区分配原则。
- 0为按连接。
- 1为按耦联。
0
net.sctp.rcvbuf_policy
SCTP接收缓冲区分配原则。
- 0为按连接。
- 1为按耦联。
0
net.sctp.sctp_mem
内核SCTP协议栈的最大可用内存,分无压力,有压力,和压力大三个区间,压力大时会丢包,单位为页面。
94500000 915000000 927000000
net.sctp.sctp_rmem
内核SCTP协议栈的接收总可用内存,分无压力,有压力和压力大三个区间,压力大时会丢包,单位为页面。
8192 250000 16777216
net.sctp.sctp_wmem
内核SCTP协议栈的发送总可用内存,分无压力,有压力和压力大三个区间,压力大时会丢包,单位为页面。
8192 250000 16777216
net.ipv4.tcp_rmem
TCP协议接收端缓冲区的可用内存大小。分无压力,有压力,和压力大三个区间,单位为页面。
8192 250000 16777216
net.ipv4.tcp_wmem
TCP协议发送端缓冲区的可用内存大小。分无压力,有压力,和压力大三个区间,单位为页面。
8192 250000 16777216
net.core.wmem_max
socket发送端缓冲区大小的最大值。
21299200
net.core.rmem_max
socket接收端缓冲区大小的最大值。
21299200
net.core.wmem_default
socket发送端缓冲区大小的默认值。
21299200
net.core.rmem_default
socket接收端缓冲区大小的默认值。
21299200
net.ipv4.ip_local_port_range
物理机可用临时端口范围。
26000-65535
kernel.sem
内核信号量参数设置大小。
250 6400000 1000 25600
vm.min_free_kbytes
保证物理内存有足够空闲空间,防止突发性换页。
系统总内存的5%
net.core.somaxconn
定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数。
65535
net.ipv4.tcp_syncookies
当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击。
- 0表示关闭SYN Cookies。
- 1表示开启SYN Cookies。
1
net.sctp.addip_enable
SCTP动态地址重置支持开关
- 0表示关闭。
- 1表示开启。
0
net.core.netdev_max_backlog
在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。
65535
net.ipv4.tcp_max_syn_backlog
记录的那些尚未收到客户端确认信息的连接请求的最大值。
65535
net.ipv4.tcp_fin_timeout
系统默认的超时时间。
60
kernel.shmall
内核可用的共享内存总量。
1152921504606846720
kernel.shmmax
内核参数定义单个共享内存段的最大值。
18446744073709551615
net.ipv4.tcp_sack
启用有选择的应答,通过有选择地应答乱序接受到的报文来提高性能,让发送者只发送丢失的报文段(对于广域网来说)这个选项应该启用,但是会增加对CPU的占用。
- 0表示关闭。
- 1表示开启
1
net.ipv4.tcp_timestamps
TCP时间戳(会在TCP包头增加12节),以一种比重发超时更精确的方式(参考RFC 1323)来启用对RTT的计算,启用可以实现更好的性能。
- 0表示关闭。
- 1表示开启
1
vm.extfrag_threshold
系统内存不够用时,linux会为当前系统内存碎片情况打分,如果超过vm.extfrag_threshold的值,kswapd就会触发memory compaction。所以这个值设置的接近1000,说明系统在内存碎片的处理倾向于把旧的页换出,以符合申请的需要,而设置接近0,表示系统在内存碎片的处理倾向做memory compaction。
500
vm.overcommit_ratio
系统使用绝不过量使用内存的算法时,系统整个内存地址空间不得超过swap+RAM值的此参数百分比,当vm.overcommit_memory=2时此参数生效。
90
/sys/module/sctp/parameters/no_checksums
SCTP协议是否关闭checksum。
0
MTU
节点网卡最大传输单元。OS默认值为1500,调整为8192可以提升SCTP协议数据收发的性能。
8192
文件系统参数
- 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 CheckNoCheckSum CheckSctpService 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:64 Nodes:3 Checking... [=========================] 64/64 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:64 Success:56 Warning:5 NG:3 Error:0 For more information please refer to /opt/huawei/wisequery/script/gspylib/inspection/output/CheckReport_inspect_201902207129254785.tar.gz
相关命令
gs_checkos,gs_checkperf
查看更多:华为GaussDB 200 服务端工具「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」关注作者【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。评论
- 在home/package/script/gspylib/inspection/config执行如下命令,将此文件分发至执行检查的各个节点
- 场景检查: