节点文件描述符耗尽可能引起GaussDB实例重启造成集群不可用,本文主要讨论如何快速恢复集群以及后续如何预防。
以下图为例,文件由于文件描述符耗尽导致实例异常状态如下:

前提:如何确定实例异常是由于文件描述符耗尽影响的呢?可以查看主dn对应日志是否有以下日志出现,如上图所示对应为6045为主实例(对端实例6046目前状态为standby promoting状态能够说明该实例故障之前为备实例,那么6045肯定为主实例)

有以上日志出现可以继续按照以下步骤进行修复。
1、集群现场修复:
方案一:
1)查看从备日志是否有以下报错:

2)此场景下一般是由于从备wal槽位残留造成备机升主时连接从备失败,此时登录从备实例所在节点kill该实例即可。
方案二:
方案一修复失败的话可以考虑使用该方案
1)确认从备实例pg_xlog与base/dummy_standby/是为空,若不为空的话可以手动将其移动到其他路径(该场景下基本都为空)
2)手动停止处于standby promoting的实例:
cm_ctl stop -n nodeId -D 实例目录
3)kill原主实例(实例状态为need repair),登录该实例所在节点执行以下命令,让其升主:
kill pid; sleep 4; gs_ctl notify -M primary -D
2、文件描述符耗尽预防:
1)查看并修改文件描述符大小(集群内每台机器都需要修改,防止其他节点也出现该问题)
cat /etc/sysctl.conf |grep file-max
fs.file-max = 6553600
2)定期观察文件描述符使用情况:
查看机器整体文件描述符使用情况:lsof -u omm|grep urandom| wc -l
查看具体进程文件描述符使用情况:lsof -p pid|grep urandom| wc -l (pid 通过ps -ux查看,只关注gaussdb进程即可)
3)若监控到文件描述符使用达到90%左右在业务低峰期可以考虑手动kill该进程释放资源。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/bigdata/316630.html