场景一:gp服务正常,存在部分segment实例丢失
1.1、异常现象
主节点切换gpadmin用户输入gpstate查看状态
[gpadmin@node1 root]$ gpstate
如果红色框内有指向左边的箭头则说明存在部分segment实例丢失。
使用gpcc查看发现有一个节点故障
1.2、排查思路
首先查看主节点日志,重点关注发生segment丢失那段时间的日志;
主节点日志目录一般为 /usr/local/godb/data/master/gpseg-1/pg_log/
已知可能造成segment丢失的原因:频繁的内存溢出。
1.3、解决步骤
在主节点gpadmin用户下执行:
- 步骤一:gprecoverseg
[gpadmin@node1 root]$ gprecoverseg
如果执行失败或存在部分失败,执行步骤二,否则直接执行步骤三
- 步骤二:gprecoverseg -F
[gpadmin@node1 root]$ gprecoverseg -F
- 步骤三:gprecoverseg -r
等待执行结束再次使用gpstate检查gp状态。
[gpadmin@node1 root]$ gpstate -e
使用GPCC监控平台查看发现故障节点已经恢复正常。
场景二:gp启动失败,segment实例可用数已不足一半
2.1、异常现象
主节点切换gpadmin用户输入gpstart启动数据库
如果未出现红框内字样,说明启动失败。
2.2、排查思路
使用 gpstart -v 查看启动日志明细;
进入主节点日志目录/usr/local/godb/data/master/gpseg-1/pg_log/查看 startup.log 和最新的 ggpdb-2023-07-15_xxxxxx.csv 日志;
根据这些日志锁定出问题的segment实例是哪个,然后查看对应实例的日志 startup.log 和最新的 gpdb-2023-07-15_xxxxxx.csv;
重点关注日志级别为ERROR、FATAL的内容,逐个解决即可;
可能存在的问题:数据目录存在目录或文件权限不足、损坏文件等。
2.3、解决步骤
按照排查思路对存在的问题逐个解决,直至至少半数的segment启动成功,此时大概率是场景一的现象,按照场景一流程解决。