GaussDB(DWS)集群启停问题定位指南
集群启停问题定位指南
1 集群启停基本原理
1.1 启停依赖关系描述及图示
FIM:集群管理界面,用户可以从FIM界面上下发启动和停止集群操作;
cron:系统服务,每一分钟定时查看om_monitor服务是否拉起,如果没有拉起,则拉起;
om_monitor:常驻系统,用于拉起cm_agent;
cm_agent:启停 cn、dn、gtm、cm_server,以及在停止时,当cn、dn、gtm、cm_server停止后,cm_agent自退出。
1.2 日志路径
组件名 |
日志路径 |
FIM |
/var/log/Bigdata/mpp/scriptlog/prestart.log /var/log/Bigdata/mpp/scriptlog/start.log 以上日志每个数据节点上均存在 |
gs_om |
/var/log/Bigdata/mpp/omm/om/gs_om- YYYY-MM-DD_hhmmss.log 以上日志每个数据节点上均存在 |
om_monitor |
/var/log/Bigdata/mpp/omm/cm/om_monitor/om_monitor-YYYY-MM-DD_hhmmss.log 以上日志每个数据节点上均存在 |
cm_agent |
/var/log/Bigdata/mpp/omm/cm/cm_agent/cm_agent-YYYY-MM-DD_hhmmss.log /var/log/Bigdata/mpp/omm/cm/cm_agent/system_call-YYYY-MM-DD_hhmmss.log 以上日志每个数据节点上均存在 |
cm_server |
/var/log/Bigdata/mpp/omm/cm/cm_server/cm_server-YYYY-MM-DD_hhmmss.log 以上日志仅在主备cm_server节点上均存在 |
1.3 集群实例角色状态信息表
集群状态示例:
实例 |
角色 |
状态 |
DN build 状态和GTM 同步状态 |
CMS |
Primary(主) Standby(备) Pending(待仲裁状态,等待仲裁为主或者备) Down |
||
CN |
Normal(正常) Deleteing(正在删除) Deleted(已经删除) Down |
||
DN |
Primary(主) Standby(备) Dummy_standby(从备) Pending(待仲裁状态,等待仲裁为主或者备) Down |
Normal(正常) Starting(正在启动) Need repair(待处理状态) Waiting Promoting(等待升主) Promoting(备机升主中) Demoting(主机降备中) Building(备机正在build) Build failed(备机build失败) Manual stop(手动停止) Disk damaged(磁盘故障) Port used(端口占用) Unknown(状态未知) |
Connecting(DN主备连接) Disconnect(DN主备未连接) Walsegmen removed(DN日志分叉)
|
GTM |
Primary(主) Standby(备) Pending(待仲裁状态,等待仲裁为主或者备) Down |
Connection OK(主备连接OK) Connection bad(主备连接有问题) Starting(正在启动) Manual stop(手动停止) Disk damaged(磁盘故障) Port used(端口占用) Unknown(状态未知) |
Sync(同步模式) Async(非同步模式) Most available(最大可用模式) |
2 启动集群常见问题分类
3 集群启停问题定位方法及解决措施
使用命令cm_ctl query -Cv查看集群状态,根据状态进入不同分支场景进行排查处理。
3.1 整节点未启动
Step1. 使用命令cm_ctl query -Cv查看集群状态信息确认整节点未启动的主机名;
Step2. omm用户登录对应节点,查看om_monitor进程是否存在,如果om_monitor进程不存在,则可能原因是omm用户定时任务异常、omm用户密码超期、cgroup挂载异常,可通过分析om_monitor日志、omm用户定时任务、omm用户密码超期时间等方式进行进一步分析;
Step3. 如果节点上om_monitor进程存在,cm_agent进程不存在,则可能原因是FIM界面启动命令未成功下发到后台、python版本过高或其它原因导致om_monitor未能启动cm_agent,可通过检查启停标志文件、节点上python版本、om_monitor日志等方式进一步分析。
3.2 节点内部分实例未启动
Step1. 使用命令cm_ctl query -Cv查看集群状态信息确认未启动的实例及所在节点主机名;
Step2. omm用户登录对应节点,查看cn/dn/gtm/cm_server实例进程是否存在,如果进程不存在,则可能原因是端口被占、lvs虚拟ip丢失、cn/dn的postgresql.conf配置文件的listen_address参数存在无效ip、进程监听端口号对应锁文件残留、cn/dn配置文件中存在无效GUC参数、系统信号量参数配置过小、存在多个cm_agent进程、路径无权限、磁盘满、数据目录权限异常等,需要结合日志具体分析;
Step3.如果cn/dn/gtm/cm_server进程存在,但状态为down或者unknown,则可能原因是当前节点与主cm_server节点网络不通、cm_server无主、节点上存在子网卡等;
Step4.如果cn/dn/gtm/cm_server进程存在,但状态为pending,则说明可能是在做redo,可通过查看堆栈来确认。
3.3 节点实例未停止
Step1. 首先使用如下命令找到未正常停止的实例:
gs_ssh -c 'ps -ef|grep /opt/huawei/Bigdata/mppdb/core/bin/ | grep -v grep'
Step2.1 实例未被停止分为两种情况,一种是实例收到停止信号,但是无法停止,这种现象主要体现在CN、DN正在执行业务,无法停止。当CN、DN无法停止的时候,需要搜集CN、DN堆栈,用于定位问题;
Step2.2 第二种是执行停止的命令异常,此时请查看cma日志,手动拆解停止的shell命令,查看那些命令异常,一般为pstree命令异常。当pstree命令等shell命令异常时,分为两种情况:1)系统不存在该命令,请安装该命令,或者查看环境变量是否正确;2)系统pstree结果不符合预期,请更新该命令版本。
4 集群启停问题常见案例
4.1 整节点未启动,om_monitor进程不存在
问题现象:启动集群时整节点未启动,对应节点上om_monitor进程不存在
定位过程:
omm用户登录到到未启动的节点,使用以下命令确认om_monitor进程不存在:
ps –eaf | grep om_monitor
4.1.1 Om_monitor定时任务未挂载
场景描述:使用如下命令查看启动om_monitor的定时任务是否挂载到cron服务上,如果未挂载上,则是安装失败或定时任务被删除。通过 crontab服务可以看到如下命令,代表om_monitor服务挂载成功。
crontal -l
解决方法:参照正常节点将om_monitor定时任务服务添加到omm用户的定时任务中。
4.1.2 Omm用户密码超期
场景描述:使用如下命令检查是否设置了omm用户密码超期时间且密码已过期,如果密码超期会导致omm用户定时任务无权限查看,进而导致无法拉起om_monitor进程。
chage -l omm
解决方法:使用如下命令将omm用户密码超期时间设置为永不过期
chage -M 99999 omm
4.2 整节点未启动,cm_agent进程不存在
问题现象:整节点未启动,om_monitor进程存在,但cm_agent进程不存在
定位过程:
omm用户登录到未启动的节点,使用以下命令确认cm_agent进程不存在:
ps –eaf | grep cm_agent
4.2.1 启停标志文件存在
场景描述:检查om_monitor日志中是否有如下格式的日志打印,如果有说明cgroup未挂载成功,导致CMA拉起异常
can't get the *cgroup*
解决方法:重新挂载cgroup。
4.2.2 启停标志文件存在
场景描述:检查bin目录下启停标志文件是否存在,如果存在说明FIM界面启动命令未下发到后端
ll /opt/huawei/Bigdata/mppdb/core/bin/cluster_manual_start
解决方法:
1、 删除此文件即可从后台自动拉起该节点实例;
2、 FIM界面启动命令未下发到内核原因可排查分析该节点上如下两个日志文件中的报错信息来确认
/var/log/Bigdata/mpp/scriptlog/prestart.log
/var/log/Bigdata/mpp/scriptlog/start.log
4.2.3 Python版本过高
场景描述:检查节点上python版本为3.x,与数据库默认的2.7不符,FIM界面启动时start.log日志中有如下报错,则说明是python版本过高导致启动异常
解决方法:
与现场人员确认是否手动升级过python版本或安装了多个版本的python,并让现场人员将节点上默认python版本恢复为2.7版本。
4.2.4 环境变量文件为空
场景描述:检查/opt/huawei/Bigdata/mppdb/.mppdbgs_profile环境变量文件为空,则说明环境变量文件为空导致FIM界面启动命令未下发到内核
解决方法:从正常节点拷贝一份过来即可。
4.2.5 启停标志文件不存在
场景描述:检查bin目录下启停标志文件不存在,说明是其它原因导致om_monitor未能启动cm_agent
解决方法:收集节点上om_monitor和cm_agent日志进一步分析。
4.3 节点内部分实例未启动,cn/dn/gtm/cm_server进程不存在
问题现象:节点内部分实例未启动,未启动的cn/dn/gtm/cm_server实例进程不存在
定位过程:
omm用户登录到实例未启动的节点,使用以下命令确认相应实例进程不存在:
ps –eaf | grep gaussdb
ps –eaf | grep gs_gtm
ps –eaf | grep cm_server
4.3.1 信号量不足导致cn/dn启动异常
场景描述: 检查对应cn/dn实例的pg_log日志,如果有如下报错,则说明是信号量不足导致cn/dn启动异常
解决方法:
1、 使用root用户执行如下命令可以将节点上os参数配置为预期值;
/opt/huawei/Bigdata/mppdb/wisequery/script/gs_checkos -i B1 --detail
2、建议使用巡检工具对集群进行全面巡检和整改。
4.3.2 postgresql.conf配置文件存在无效GUC参数
场景描述:检查对应节点上cm_agent和systemcall日志中如果有如下报错,则说明cn/dn的postgresql.conf配置文件中存在无效参数配置
/var/log/Bigdata/mpp/omm/cm/cm_agent/cm_agent-YYYY-MM-DD_hhmmss-current.log
/var/log/Bigdata/mpp/omm/cm/cm_agent/system_call-YYYY-MM-DD_hhmmss-current.log
解决方法:
删除postgresql.conf配置文件中无效参数即可。
4.3.3 端口号被占
场景描述:检查对应节点上cm_agent和systemcall日志中如果有如下报错,则说明cn/dn/cm_server/gtm的端口号被占
/var/log/Bigdata/mpp/omm/cm/cm_agent/cm_agent-YYYY-MM-DD_hhmmss-current.log
/var/log/Bigdata/mpp/omm/cm/cm_agent/system_call-YYYY-MM-DD_hhmmss-current.log
Port 25308 is used, run 'netstat -anop|grep 25308' or 'lsof -i:25308'(need root) to see who is using this port.
解决方法:
1、 使用如下命令找到占用端口的进程
netstat -anop|grep port
lsof -i:port (root执行)
2、 kill -9清理掉占用端口的进程,然后重新启动。
4.3.4 Lvs虚拟ip未挂载
场景描述:cn的listen_addresses参数中配置了lvs虚拟ip,但cn节点上lvs虚拟ip未正常挂载,则也会导致cn启动不了
检查cn实例listen_addresses配置命令:
cat /srv/BigData/mppdb/data1/coordinator/postgresql.conf|grep listen_addresses
查看节点上ip信息命令:/sbin/ifconfig
解决方法:使用如下命令重新挂载lvs虚拟ip
sh /etc/init.d/gs_vip start
4.3.5 进程监听端口号锁文件残留
场景描述:机器异常掉电重启等情况下可能会导致进程监听端口号锁文件残留,这样当重新启动时会因锁文件已存在而无法启动。
检查锁文件命令:
ls -la /opt/huawei/Bigdata/mppdb/mppdb_tmp
检查查出来的锁文件产生时间是否是在启动时间之前,如果是则说明是之前残留的。
解决方法:将残留的锁文件删除。
4.3.6 Cn/dn的listen_addresses中存在无效ip
场景描述:cn/dn的postgresql.conf配置文件的listen_addresses参数存在无效ip时会导致cn/dn无法正常启动,system_call日志中会有如下报错:FATAL: could not create listen socket for "100.185.180.62"
/var/log/Bigdata/mpp/omm/cm/cm_agent/system_call-YYYY-MM-DD_hhmmss-current.log
检查cn实例listen_addresses配置命令:
cat /srv/BigData/mppdb/data1/coordinator/postgresql.conf|grep listen_addresses
解决方法:将listen_addresses参数中的无效ip删除。
4.3.7 数据目录无权限
场景描述:cn/dn/gtm/cm_server的数据目录权限预期是700,当权限不足时cm_agent日志中会有如下报错:
data path disc writable test failed, /srv/BigData/mppdb/data3/slave1
解决方法:根据报错提示修复cn/dn/gtm/cm_server数据目录的权限。
4.3.8 磁盘满
场景描述:节点上数据盘、日志盘等满均会导致cn/dn/gtm/cm_server进程启动异常。
磁盘使用率检查命令:df -lh
解决方法:清理释放磁盘空间,消除磁盘满。
4.4 节点内部分实例未启动,查看状态CN、DN、GTM实例状态为down或者unknown
启动集群失败,后台查看集群状态,发现CN、DN、GTM实例显示down或者unknown。
4.4.1 当前节点与主cm_server节点网络不通
场景描述:当节点与主cm_server节点网络不通时,当前节点cm_agent无法将实例状态上报给cm_server,导致实例状态显示为down或unknown。
检查当前节点与主cm_server节点网络命令:在当前节点上ping 主cm_server节点ip,如果不能ping通则说明网络异常。
解决方法:联系网络侧人员解决网络问题。
4.4.2 Cm_server无主
场景描述:当集群中两个cm_server实例均为pending状态,没有选出主时,无法对DN状态进行仲裁,导致DN状态均显示为down或unknown。
检查当前集群cm_server状态命令:
cm_ctl query -vCd|grep cm_server
解决方法:收集主备cm_server日志并联系研发人员处理。
4.4.3 节点上存在多个om_monitor进程
场景描述:当节点上存在多个om_monitor进程时,会导致cm_agent进程反复被杀,无法持续向cm_server上报实例状态,进而导致节点上实例状态显示为down或unknown。
检查当前节点om_monitor个数命令:
ps -ef|grep om_monitor|grep -v grep
解决方法:kill掉当前所有om_monitor进程待起自动重新拉起。
- 点赞
- 收藏
- 关注作者
评论(0)