问题现象:
db03节点故障导致集群不可用

通过Xshell连接工具直接连接故障服务器,无法正常登录和执行命令;通过BMC界面执行linux相关命令都会报错,Too many open files in system,这个错误表明句柄数超出系统限制。

应急措施:
1、可以连到故障节点执行命令,可以通过命令停止故障节点的实例。
omm 用户登录集群任一节点
source $BIGDATA_HOME/mppdb/.mppdbgs_profile
cm_ctl stop -n nodeid -mi nodeid替换为对应节点编号。
2、如果无法连接节点执行命令,可通过BMC重启异常节点服务器恢复。
问题分析:
文件句柄是打开文件的唯一识别依据,8月8日6:51日志中看到文件句柄数已达到上限,导致cm_agent出现读取不到gauss.state文件情况,cm_agent无法确认DN实例状态。


10:24 cm_agent开始持续读取不到gauss.state文件。cm_agent检查DN连接,连接不上;检查DN存在,于是上报了unknown状态。


10:25cm_sever上获取的db03主DN状态为unknown,对于unknown状态的DN cm_server不会进行仲裁,需要人为干预。

问题原因:
cm_server执行dn仲裁流程时,需要获取cm_agent上报的DN实例状态。
cm_agent根据dn进程的情况判断其状态:
(1) dn进程存在时,如果cm_agent可成功连接dn,则通过执行sql语句获取dn状态;如果cm_agent无法连接,则读取dn数据目录下的gaussdb.state文件获取dn状态。
(2) dn进程不存在,直接上报dn为Down状态
出现的dn无法仲裁的现象,对应上面第一种场景中,dn进程存在但无法连接的情况。但由于文件句柄异常,cm_agent读取gaussdb.state文件失败,导致无法正确判断dn所处的状态,因此上报Unknown状态(即未知状态)。
综上分析,是因文件句柄数超限导致cm_agent无法读取DN实例状态,上报了DN unknown状态,cm_server因cm_agent上报的unknown状态无法做仲裁,备DN没有进行升主操作。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/bigdata/316775.html