GaussDB for DWS生产应急指导
1.1 应用侧作业大量报错
前提
在业务作业自动重提三次后仍报错。
应急步骤
步骤1、健康检查
使用gs_check工具进行健康检查,以omm用户登录MPPDB集群CN实例所在服务器。
C80及以上版本执行:
source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile gs_check -e health |
C70版本执行:
source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile gs_check |
根据检查结果判断是否有异常。
步骤2、故障排查
查看集群状态确认是否有CN实例故障
登录集群内服务器,执行:
source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile cm_ctl query -Cv |
确认有无异常实例,若有,按照实例故障处理。
1.2 应用侧作业运行缓慢
前提
单位小时完成的批量作业数减少。
应急步骤
步骤1、健康检查
使用gs_check工具进行健康检查,以omm用户登录MPPDB集群CN实例所在服务器。
C80及以上版本执行:
source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile gs_check -e health |
C70版本执行:
source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile gs_check |
根据检查结果判断是否有异常。
步骤2、当前活跃语句查询
以omm用户登录CN实例所在服务器,执行如下命令登录postgres数据库:
source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile gsql -d postgres -p 25308 -r |
执行如下查询SQL语句,查看当前语句并发:
select usename, count(*) from pgxc_stat_activity where state='active' and application_name not in ('WorkloadMonitor', 'workload', 'JobScheduler') group by usename; |
确认各用户占用的并发数是否在正常范围内。
执行如下查询SQL语句,查找当前正在运行的语句:
select usename,application_name, now() -query_start as time, left(query,20) from pgxc_stat_activity where state='active' and application_name not in ('WorkloadMonitor', 'workload', 'JobScheduler')order by query_start; |
将当前正在运行的sql语句按照执行启动时间升序排列。查看是否有执行时间较长的语句。
步骤3、表清理作业确认
确认步骤2查询的结果中是否有vacuum full语句:
根据步骤2查询结果的query列的值,判断是否正在并发执行物理表的vacuum full。
若确认有并发vacuum full且影响批量正常执行,执行步骤4;
若确认没有并发vacuum full,获取query_start最早的几个作业的query_id列的值,执行步骤5。
步骤4、表清理作业停止
应用侧确认是否启动table_clean作业。若已启动table_clean作业,并且对当前批量影响较大,需要应用停下table_clean作业。
步骤5、作业等待分析
以omm用户登录CN实例所在的服务器,连接postgres数据库,执行如下查询SQL语句,查看作业的等待情况:
select * from pgxc_thread_wait_status where query_id='${query_id}' order by tlevel; |
注:其中${query_id}为步骤3查出的query_id列值。
根据pgxc_thread_wait_status视图的wait_status列,确认等待的DN是否一致,并记录DN编号,执行步骤6;
步骤6、单节点资源使用查看
以omm用户登录CN实例所在的服务器,根据步骤5分析的DN编号,确认服务器,执行:
source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile cm_ctl query -Cvd|grep ${dnnum} |
注:其中${dnnum}为DN的编号。
示例:假设DN_6001_6002为步骤5分析的DN编号,在主备平衡时,DN编号为6001。
根据查询结果,记录服务器的hostname,以omm用户登录集群内的该服务器,依次查看:
1、使用TOP命令查看CPU使用情况,判断节点是否有CPU使用异常高;
2、使用TOP命令查看内存使用情况,判断节点是否有内存使用异常;
3、使用iostat命令查看IO使用情况,判断节点是否有IO使用异常,io util接近100%, IO wait持续超过100ms即为IO利用率高,需要降低并发。
4、使用sar命令查看网络使用情况,判断节点是否网络使用达到瓶颈;
5、使用ifconfig命令查看业务网络丢包情况,判断节点是否网络丢包严重;
在确认本机资源相对其他服务器资源使用异常情况下,按照步骤7进行隔离;
步骤7、单节点隔离
确认服务器的hostname,以omm用户登录CN实例所在的服务器,
C80SPC800以下版本执行:
source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile cm_ctl view|grep ${hostname} -B1|grep "node :" |
注:${hostname}为待隔离机器的主机名。
示例:获取的结果样例为"node : 1",取"node :"后的数值为该机器的node_id。
以omm用户登录CN实例所在的服务器,执行:
cm_ctl stop -n ${node_id} -m i |
注:${node_id}为待隔离的服务器的node_id。
执行完成后确认被隔离的服务器的所有实例均停止且对应的备实例状态切换为"Primary Normal"后,执行:
cm_ctl start -n ${node_id} |
注:${node_id}为被隔离的服务器的node_id。
完成后通知应用支持部重提失败作业。
C80SPC800以上版本执行:
gs_om -t isolate_tostandby -h HOSTNAME |
完成后确认集群状态为Normal后,通知应用支持部重提失败作业。
1.3 CN实例异常
前提
执行DDL语句报错。
应急步骤
步骤1、服务器状态检查
确认服务器是否有异常,若服务器异常,安排设备部排查,并更换硬件,完成后设备自动加入集群。若无硬件故障,执行步骤2;
步骤2 、CN实例状态检查
重要:请在研发支持部和华为现场工程师确认后实施。
确认其他CN实例是否异常,使用omm用户登录集群内服务器,执行:
source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile cm_ctl query -Cv |
确认仅一个CN实例故障,执行CN剔除,参考LibrA产品手册的《管理员指南》章节的《LibrA管理》段落的《删除Coordinator实例》描述。
1.4 DN实例异常
前提
主备balance不平衡。
应急步骤
步骤1、健康检查
使用gs_check工具进行健康检查,以omm用户登录MPPDB集群CN实例所在服务器。
C80及以上版本执行:
source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile gs_check -e health |
C70版本执行:
source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile gs_check |
根据检查结果判断是否有异常。
步骤2、主备倒换
确认故障实例已恢复后,可以进行主备倒换。以下主备倒换为整个集群所有不平衡的主备节点全部进行倒换(cm_ctl switchover -a),如需单实例倒换请参见2.2节。
为防止主备切换耗时过长,需要先停止应用,要求先做下面步骤:
针对C80SPC800以下版本,登陆MPPDB集群的CN节点,执行下面命令
source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile gsql -d postgres -p 25308 -ar -c "select * from pgxc_stat_activity where usename!='omm' ">1.log |
查看1.log 内容:
ü 如无返回记录,说明没有应用的SQL在跑;
ü 如1.log有返回记录,则需要通知应用停止应用,如在应用停止的前提下1.log仍然要应用SQL在运行(提交到集群上的尚未执行完的SQL),需要登录到对应的CN,执行下面SQL 杀掉尚在运行的SQL。
select pg_terminate_backend(${PID}); |
注:PID 为 1.log中的pid字段值。
完成后,执行以下语句进行checkpoint及主备倒换:
gsql -dpostgres -p25308 -c "checkpoint" cm_ctl switchover -a |
针对C80SPC800以上版本
在应用侧停批、且无运行SQL的情况下,执行如下主备倒换命令,恢复集群:
source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile gs_om -t killsession(用于替代上面的杀SQL命令) gsql -dpostgres -p25308 -c "checkpoint" cm_ctl switchover -a -q |
1.5 CN、DN所在机器宕机
前提
服务器节点无响应,CN实例所在服务器宕机会导致DDL作业报错。
应急步骤
步骤1、业务重提
单节点故障不影响批量运行,可以重调因机器故障导致的中断批量业务。
步骤2、故障服务器修理
修复并重启故障服务器,自动添加到集群中。
注:CN故障时间长,请按照“CN实例异常”应急方案处理。
步骤3、健康检查
使用gs_check工具进行健康检查,以omm用户登录MPPDB集群CN实例所在服务器。
C80及以上版本执行:
source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile gs_check -e health |
C70版本执行:
source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile gs_check |
根据检查结果判断是否有异常。
1.6 OMS、GTM、CMS所在机器宕机
前提
GTM、CMS所在服务器DN切换为备实例
应急步骤
步骤1、业务重提
单节点故障不影响批量运行,可以重调因机器故障导致的中断批量业务。
步骤2、故障服务器修理
修复并重启故障服务器,自动添加到集群中。
步骤3、健康检查
使用gs_check工具进行健康检查,以omm用户登录MPPDB集群CN实例所在服务器。
C80及以上版本执行:
source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile gs_check -e health |
C70版本执行:
source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile gs_check |
根据检查结果判断是否有异常。
1.7 集群进入只读模式
前提
1、应用业务作业报错包含关键词“read-only transaction”
2、查看集群存储利用率:
以omm用户登陆集群CN实例所在的服务器,执行下面步骤:
source /opt/huawei/Bigdata/mppdb/.mppdbgs_profile cm_ctl query -Civ | grep Primary | awk '{print $3}' | sort -u > /tmp/hosts for i in `cat /tmp/hosts`; do ssh -n -q $i "hostname;df -m" ;done > df_m_201902.out 2>&1 & |
查看 df_m_201902.out 文件,有个别文件系统的存储利用率达到90%
应急步骤 参考附件《磁盘使用超90%集群只读处理方案》
1.8磁盘损坏(包含有坏道、xfs文件系统损坏)
前提
需包含坏道、xfs文件系统损坏判断依据,MPPDB集群读写XFS文件系统异常。
应急步骤
步骤1、影响确认
确认磁盘坏道、XFS文件损坏对集群的影响,
若故障导致了数据读取失败报错,或者数据库实例发生core dump,执行步骤2。
若故障未影响数据读取,执行步骤3
步骤2、实例隔离
1)若服务器所有磁盘都出现故障:
C80SPC800以下版本执行:
source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile cm_ctl view|grep ${hostname} -B1|grep "node :" |
注:${hostname}为待隔离机器的主机名。
示例:获取的结果样例为"node : 1",取"node :"后的数值为该机器的node_id。
以omm用户登录CN实例所在的服务器,执行:
cm_ctl stop -n ${node_id} -m i |
注:${node_id}为待隔离的服务器的node_id。
执行完成后确认被隔离的服务器的所有实例均停止且对应的备实例状态切换为"Primary Normal"后,执行:
cm_ctl start -n ${node_id} |
注:${node_id}为被隔离的服务器的node_id。
完成后通知应用支持部重提失败作业。
C80SPC800以上版本执行:
gs_om -t isolate_tostandby -h HOSTNAME |
完成后检查集群状态为Normal后,通知应用支持部重提失败作业。
2)若服务器部分磁盘出现故障:
确认服务器的hostname,以omm用户登录CN实例所在的服务器,执行:
source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile cm_ctl view|grep ${hostname} -B1|grep "node :" |
注:${hostname}为待隔离机器的主机名。
示例:获取的结果样例为"node : 1",取"node :"后的数值为该机器的node_id。
确认故障服务器磁盘挂载目录的主实例路径,执行:
source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile cm_ctl query -Cvd|grep ${hostname}|grep "/srv/BigData/mppdb/${dataN}" |
注:${hostname}为待隔离机器的主机名,${dataN}为故障磁盘挂载点。根据获取的结果确认,实例路径。一般存在一个主实例一个备实例。
执行:
cm_ctl stop -n ${node_id} -D ${DN_dir} -m i |
执行完成后确认被隔离的服务器的所有实例均停止且对应的备实例状态切换为"Primary Normal"后,执行:
cm_ctl start -n ${node_id} -D ${DN_dir} |
注:${node_id}为被隔离的服务器的node_id。
完成后通知应用支持部重提失败作业。
步骤3、节点修复
联系系统部修复故障磁盘或者XFS修复。
更多精彩内容,请关注华为云开发者社区论坛:https://bbs.huaweicloud.com/forum/forum-598-1.html 及微信公众号“华为云AI”
- 点赞
- 收藏
- 关注作者
评论(0)