Omnibus GitLab の Mattermost のバックアップがちゃんと取れていなかったので直しました。

対象バージョン

  • gitlab-ce パッケージ 10.5.5-ce.0

現在の実装

provision/roles/znz.gitlab-ce/files/gitlab-misc-backup.sh:

#!/bin/sh
set -e
BACKUPS=/var/opt/gitlab/backups
umask 077
if [ ! -S /var/opt/gitlab/postgresql/.s.PGSQL.5432 ]; then
  sleep 5
fi
tar acf "$BACKUPS/$(date +%s_%Y_%m_%d)_etc_gitlab.tar.xz" -C / etc/gitlab
tar acf "$BACKUPS/$(date +%s_%Y_%m_%d)_var_opt_gitlab_mattermost.tar.xz" -C / var/opt/gitlab/mattermost
/opt/gitlab/embedded/bin/chpst -u gitlab-psql /opt/gitlab/embedded/bin/pg_dump -Fc -p 5432 -h /var/opt/gitlab/postgresql mattermost_production > "$BACKUPS/$(date +%s_%Y_%m_%d)_mattermost_production.dump"

以前の問題点

pg_dump だけしかとっていなかったので、 リストアすると GitLab での SSO (Single Sign On) の連携が壊れてしまいました。

とりあえず復旧

sudo -u gitlab-psql /opt/gitlab/embedded/bin/psql -h /var/opt/gitlab/postgresql gitlabhq_production で gitlab 側のデータベースにつないで、 \x で表示形式を変えた後、 select * from oauth_applications;uidsecret を確認しておきます。

/var/opt/gitlab/mattermost/config.json"GitLabSettings": { の下にある "Secret":"Id":secretuid を設定し直すと復旧できました。 (sudo gitlab-ctl restart で再起動が必要だったかもしれません。)

バックアップの修正

Omnibus GitLab 自体のバックアップ方法を見直すと /etc/gitlab-C / etc/gitlab でバックアップする方法があったので、 それを真似て -C / var/opt/gitlab/mattermostconfig.json を含む設定全体をバックアップするようにしました。

後でみつけた gitlab-mattermost-backup でも /var/opt/gitlab/mattermostmattermost_production をバックアップしているので、 これで良さそうです。 (gitlab-mattermost-backup 自体は s3 へのバックアップ専用のようなので、使えませんでした。)

ついでにバックアップの方式を SQL でとる方式から -Fc をつけてアーカイブ形式に変更しました。

まとめ

Ansible Playbook for gitlab omnibus, gitlab-ci, and dokku で使っている box のバージョンを上げるために vagrant destroy して vagrant up してリストアしたところ、 バックアップが不完全だったことが発覚しました。

ちゃんとバックアップ方法が書かれている GitLab 本体はいいとしても、 Omnibus パッケージで一緒に入るのにバックアップ方法がはっきりしない Mattermost 側は 自分でバックアップ方法を考える必要があるので、 リストアまで含めて確認して運用する必要があると思いました。

Disqus Comments

Kazuhiro NISHIYAMA

Ruby のコミッターとかやってます。 フルスタックエンジニア(って何?)かもしれません。 About znzに主なアカウントをまとめました。

znz znz


Published