読者です 読者をやめる 読者になる 読者になる

オンプレミスでもGitLabでバックアップに失敗していたので対応した

GitLab PostgreSQL

GitLab.comのバックアップがうまくいっていなかったことが話題になっていますが、環境によってはオンプレミスで動かしているバックアップも失敗しているかもしれません。
といいますか私の環境がそうでした

GitLab.com Database Incident - 2017/01/31

GitLab.com melts down after wrong directory deleted, backups fail • The Register

環境

  • CentOS: 7.2.1511 (Core)
  • GitLab 8.16.2
  • PostgreSQL: 9.6.1(最近9.2から上げた)
  • GitlabにバンドルされたPostgreSQLではなくyumやmake installしたPostgreSQLを利用している

現象

gitlab-rake gitlab:backup:create でバックアップを実行すると、pg_dumpと実際に動いているPostgreSQLのバージョンが異なるというエラーでバックアップに失敗する

まさに上記記事にあった現象と同じである

原因

  • gitlab-rakeでは、動いているPostgreSQLpg_dump/usr/pgsql-9.6/bin/pg_dump)ではなくGitlabにバンドルされたpg_dump/opt/gitlab/embedded/bin/pg_dump)を使っている
  • バンドルされたpg_dumpのバージョンが9.2であるがゆえにバージョンの不一致でバックアップに失敗する
# gitlab-rake gitlab:backup:create
Dumping database ...
Dumping PostgreSQL database gitlabhq_production ... pg_dump: server version: 9.6.1; pg_dump version: 9.2.18
pg_dump: aborting because of server version mismatch
[FAILED]
Backup failed

対応

  • /opt/gitlab/embedded/bin/pg_dump を稼働中のPostgreSQLのバージョンと合わせる

対応例

  1. GitLabのpg_dumpを退避
  2. yumやmake installしたPostgreSQLpg_dumpシンボリックリンクをはる
mv /opt/gitlab/embedded/bin/pg_dump /opt/gitlab/embedded/bin/pg_dump.gitlab`
ln -s /usr/pgsql-9.6/bin/pg_dump /opt/gitlab/embedded/bin/

上記の対策を行ってからgitlab-rake gitlab:backup:createを行えば正常にバックアップが動くと思います

感想

私はcronでバックアップを取っています。PostgreSQLを9.6にアップデートした次の日の朝にバックアップ失敗のメール通知を受けて気がつきました。バックアップ失敗時の通知をしていなかったり、ログを見ていなかったりすることもあると思うので一度確認してみたほうがいいかもしれません。