前情概要:
物理服务器因为停电宕机导致部署在VMware中CentOS7.6上面的gitlab启动异常,报502错误~
恢复供电以后重启gitlab,运行命令:gitlab-ctl start
显示所有启动项都正常,但是网页端报502错误。
网上搜了一下说什么大概是服务器内存不足引起的,所以我清理了gitlab下面cache目录的大量安装包。重启gitlab依然报错,没有办法,只能先关闭虚拟机,然后扩展了虚拟内存和swap分区。启动以后依旧如此~(在这个地方耽误了两三个小时)
执行命令:gitlab-ctl tail gitlab-rails
查看gitlab运行日志,显示:PG::ConnectionBad: could not connect to server: No such file or directory
执行命令:gitlab-ctl tail postgresql
查看postgresql的日志,果然发现报错:FATAL: the database system is starting up
数据库服务一直在不停的自动重启~
解决方案:
- 切换到postgresql的用户:
su - gitlab-psql
- 执行日志reset:
/opt/gitlab/embedded/bin/pg_resetwal -f /var/opt/gitlab/postgresql/data/
执行后如有可能报错:
pg_resetwal: error: lock file "postmaster.pid" exists pg_resetwal: Is a server running? If not, delete the lock file and try again.
按照提示删除"postmaster.pid",重新执行reset即可:
cd /var/opt/gitlab/postgresql/data/ rm postmaster.pid
- 重启gitlab所有服务:
gitlab-ctl restart
等几分钟即可正常访问gitlab仓库页面。
原理猜想:
启动postgresql以后会在它的数据目录下面生成一个pid文件,记录当前进程信息。然后正常停止进程的时候会把这个pid文件清除掉。这次断电是非正常停止,导致pid文件没有被清除。重新启动gitlab的时候,到postgresql启动的那一步,先读取pid文件,发现文件里面对应的进程ID不存在。恰好日志也出现了问题,找不到对应的数据文件。所以postgresql进程就一直自动重启,然后gitlab就一直连接不上数据库,所以报502错误。