tmegos blog

Web developer

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

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のバージョンと合わせる

対応例

gitlab.com

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

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

感想

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