Jasper Ji

开口不在舌头上

0%

记Gitlab一次故障

Gitlab部署后一年多基本没出问题,最近一次提交突然失败,后台也登不上去了,显示502错误页面。用top命令确实发现CPU飙升,满负荷运行,怎么办呢?

重启

重启可能是最实用的方法吧,于是我第一步就先重启,刚一开始还能访问下,但很快就不行了,发现CUP还是很高。

升级

后来发现好像是Gitlab漏洞的问题,于是就像想着赶紧升级到最新的版本吧。一顿猛操作,就把版本升级到最新的版本了,但还是无法访问,CPU还是占用很高。

日志

使用gitlab-ctl start后并没有哪个是异常的,然后使用gitlab-ctl status,也是没有看出问题。最后决定查看日志吧,其实这个应该是最先想到的,可是每次都有点滞后。

1
2
3
/var/log/gitlab/gitlab-rails/production.log # Gitlab日志目录

gitlab-ctl tail # 也可以用这个查询

发现是数据库连接的问题,最新版本和我原来的数据是不同的版本,无法直接升级。

版本

我之前安装的Gitlab是什么版本?原来也没有太注意。但这个很重要,我最后是通过备份文件的后缀知道我原来安装的版本的,我根据Postgres报错信息,定位到了原来的Postgres是11,但是发现Gitlab12和13版本,我先选择的12,是可以访问了,但是项目点进去后项目显示不存在。

1
2
3
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION # 比较靠谱
网址/help # 这个也可以查,但是网站502时不行。
sudo gitlab-rake gitlab:env:info # 这个方法,我第一次使用的时候,因为有个报错所以也不行。

备份

我已经有点想放弃了,干脆重装或者换个Gitlab类似的东西。可作为一个技术,还是决定再试下。网上说要恢复备份,好在Gitlab有一个默认备份,大概是7天备份一次,还好我最近一直没有提交过。我决定恢复备份,结果发现版本不对,备份的后缀有一个版本号,是13.0.4,而我装的是12。于是又下载重装了版本。

1
/var/opt/gitlab/backups # 默认备份路径

重装后实际上还不能访问,需要恢复备份。

1
gitlab-rake gitlab:backup:restore BACKUP=需要恢复的版本名称 # _gitlab_backup.tar 之前的所有。

最后成功运行。

问题点

执行gitlab-ctl reconfigure报错

1
2
3
PG::ConnectionBad: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket “/var/opt/gitlab/postgresql/.s.PGSQL.5432”?

解决方案

1
2
3
4
5
sudo gitlab-ctl stop # 停止gitlab
sudo chmod 755 /var/opt/gitlab/postgresql
sudo systemctl restart gitlab-runsvdir
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart

总结

应该解决问题,而不是轻易的重装。

  1. 出现故障不要轻易的跨版本升级,比如Postgres的版本就有点频繁,而Gitlab也好像喜欢用最新的版本。
  2. 一定要记住当前的版本
  3. 备份
  4. 出现问题先看日志
  5. 机器配置,我的机子是单核4G的理论上是可以的,CPU占用率在50%上下,内存占有率也是在50%左右,实际上是可以运行的。

参考

Gitlab官方包中心
gitlab安装、备份、恢复、升级、内存消耗问题