
実行中の GitLab インスタンスに次のgitlab-rake gitlab:backup:create
コマンドで完全バックアップ アーカイブを生成するように要求します。
- GitLab はアプリケーションの状態を固定するために何かを実行しますか?
- 技術的には正常に機能するバックアップが、不整合な状態を伴って生成されるリスクはありますか?
詳細に:
- バックアップの生成中に新しいコミットがプッシュされるとどうなりますか?
- 一般的に、バックアップ中に何らかの変更が開始されると、何が起こるでしょうか?
- データベースに適用したり、ファイル/リポジトリに書き込むために変更をキューに入れるキャッシュはありますか?
現時点では、変更中のリポジトリをアーカイブした場合や、トランザクションを実行しているデータベースでバックアップを実行した場合に何が起こるのかわかりません。
今日はGitLabのバックアップコードを読みましたgitlab.com/gitlab-org/gitlab-ce/tree/master/lib/バックアップしかし、私の質問に対するヒントは見つかりませんでした。私は Ruby でコーディングしていないので、これは役に立ちません...
GitLab はtar
バックアップするファイルに対してコマンドを実行するだけです。
GitLabのドキュメントdocs.gitlab.com/ee/raketasks/backup_restore.html#バックアップ戦略オプション次のように述べられています。
tar がデータを読み込んでいる間にデータが変更されると、エラー ファイルを読み込んだときに変更されたというエラーが発生し、バックアップ プロセスが失敗する可能性があります。これに対処するために、8.17 では copy と呼ばれる新しいバックアップ戦略が導入されています。この戦略では、tar と gzip を呼び出す前にデータ ファイルを一時的な場所にコピーして、エラーを回避します。
引数により、アーカイブを作成する前にすべてのファイルをコピーするコマンドが実行STRATEGY=copy
されます。gitlab-rake gitlab:backup:create
rsync -a
tar
ドキュメントから私が理解したところによると、このcopy
戦略を使用すると、GitLab は技術的に破損したアーカイブを生成することはなく、アーカイブの作成に失敗することもないとのことです。この戦略により、生成されたアーカイブが復元可能であることが保証されると思いますが、データの一貫性状態はどうでしょうか?
バックアップ アーカイブに GitLab インスタンスの一貫性のあるクリーンなスナップショット状態が含まれていることを確認できますか?
この点に関してはドキュメント内に情報が見つかりません。
中断することなく GitLab をバックアップしたいです。
統合バックアップ メカニズムを使用する代わりに、GitLab を数秒間停止して LVM ボリュームまたはファイルシステムのスナップショットを作成できることはわかっていますが、GitLab を中断したくはありません。
GitLab のバックアップを実行すると、postgresql
1 つのサービス以外のすべてのサービスが中断されるため、GitLab の統合メカニズムを使用してバックアップしている間は変更は発生しませんが、それでもしばらくの間、ユーザーに対してサービスをブラックアウトする必要があります。
ボーナス: 私の質問は、LVM ボリュームまたはファイルシステムのスナップショットにも当てはまります。
答え1
Gitlab の一貫したバックアップを取ることについて多くの質問がありますが、良い答えが見つかりませんでした。
質問の一部:
- https://stackoverflow.com/questions/24066283/一貫性のあるgitlabバックアップを作成する方法
- https://stackoverflow.com/questions/15825735/gitlab-is-the-backup-rake-task-atomic
あなたを引用できますソレン・ロブボルグ正しいと思われる答え:
リポジトリ自体は を使用してバックアップされる
git bundle
ため、同様に安全であるはずです。アップロードは単純なファイルであり、一度だけ書き込み可能なため、ここでも問題は発生しないはずです。データベースはリポジトリやファイルと完全に同期していない可能性がありますが、データ損失を引き起こすような状況ではありません。全体として、GitLab の実行中にバックアップを実行することは、アトミックでなくても完全に安全であるように見えます。
編集:すでに正式な回答を受け取っていますGitlab チーム。