Gitlabを大規模にバックアップするには?


13

オンプレミスのGitlabで3TBのバックアップを行う方法についてGitlabのサポートに尋ねるとき、彼らはtarballを生成するツールを使用して返信します。

これはすべてのレベルで間違っているように思えます。このtarballには、postgresダンプ、dockerイメージ、リポジトリデータ、GIT LFSなどの構成などが含まれています。KBの非常に動的なデータと一緒にTBの静的データをバックアップすることは適切ではありません。そして、1時間ごとにバックアップを取りたいという問題があります。

質問

一貫性のあるバックアップを取得するために、他の人からどのようにそれを行っているのかを本当に知りたいです。

Linux上のZFSは、それがソリューションの一部であるなら、私にとっては問題ないでしょう。


3
なぜこれが間違っているのですか?Gitlabを完全にバックアップして、完全に復元します。これは間違っているとは思わない。もちろん、インクリメンタルバックアップよりもはるかに多くのスペースを使用しますが、...バックアップサイズは気にしません。
レニー

3
1時間ごとにバックアップを作成することは珍しいことではありませんが、3時間以内に3TBを作成することは不可能です。また、たった1日のバックアップは最大100TBで、データへの変更は10MBしかありません。
サンドラ

OK、これは別の質問です。一般的なバックアップについてではなく、頻繁なバックアップについてです。
レニー

5
彼らの公式ドキュメントでは、彼らは方法が遅いと言及し、代替案を提案しています:If your GitLab server contains a lot of Git repository data you may find the GitLab backup script to be too slow. In this case you can consider using filesystem snapshots as part of your backup strategy.私は経験から話すことはできません。しかし、私はすぐにこのようなものを含める必要があります
...-レニー

Gitlabの構成ファイルとバックアップフラグには、セクションを除外したり、オブジェクトストアに画像やアーティファクトを保存したりできるオプションがあります
-ssube

回答:


10

バックアップ間のこのような短い時間(1時間)については、ファイルシステムレベルのスナップショット send/recvサポートに頼ることが最善の策です。

ZoLの使用が環境で問題にならない場合は、使用することを強くお勧めします。ZFSは非常に堅牢なファイルシステムであり、ZFSが提供するすべての追加機能(例:圧縮)が本当に好きになるでしょう。と組み合わせるとsanoid/syncoid、非常に強力なバックアップ戦略を提供できます。主な欠点は、メインラインカーネルに含まれていないことです。したがって、個別にインストール/更新する必要があります。

あるいは、本当にメインラインに含まれるものに制限する必要がある場合は、BTRFSを使用できます。しかし、その(多くの)欠点とピタを必ず理解してください。

最後に、代替ソリューションを使用することですlvmthin:(と例えば定期的にバックアップを取るためにsnapper:(たとえば、サードパーティ製のツールに頼って、) bdsyncblocksync/船デルタのみをコピーするなど)。

別のアプローチは、2つの複製されたマシン(経由DRBD)を使用して、経由で独立したスナップショットを取得することですlvmthin


postgresはどうですか?gitlabとpostgresを1分間停止すると、一貫性のあるショットが作成できますか?理想的には、スナップショットの作成中にpostgresを読み取り専用モードにできると便利です。
サンドラ

4
ファイルシステムのスナップショットから復元する@Sandraは、postgresql(および他の適切に書き込まれたデータベース)に一般的な「ホストクラッシュ」シナリオとして表示され、独自の回復手順(つまり、部分的に書き込まれたページをメインデータベースにコミットします)として表示されます。つまり、スナップショットを撮るときにpostgresを読み取り専用モードにする必要はありません。
shodanshok

14

バックアップ対象を確認し、「マルチパス」アプローチを使用する可能性があります。たとえば、バックアップサーバーでGitプルを常に実行することにより、Gitリポジトリをバックアップできます。これにより、差分のみがコピーされ、すべてのGitリポジトリの2番目のコピーが残ります。おそらく、APIを使用して新しいリポジトリを検出できます。

そして、「組み込み」のバックアップ手順を使用して問題などをバックアップします。3TBがこの部分から来ているので、非常に少ないコストで非常に頻繁にバックアップを実行できるとは思えません。また、レプリケーションを備えたウォームスタンバイでPostgreSQLデータベースをセットアップすることもできます。

おそらく、3TBはDockerレジストリのコンテナーイメージから取得されます。それらをバックアップする必要がありますか?もしそうなら、そのためのより良いアプローチがあるかもしれません。

基本的に、バックアップを構成し、さまざまな部分のデータをバックアップするのは何かを実際に検討することをお勧めします。

GitLabのバックアップツールにも、Dockerレジストリなどのシステムの特定の部分を含める/除外するオプションがあります。


1
git pullsは完全な増分バックアップではありません。git push --force実装方法に応じて、バックアップを中断するか、履歴を消去します。
user371366

@ dn3sこれが、メインリポジトリでgit push --forceを常に無効にする理由です。誰かが歴史を変えたいなら、彼らは自分のフォークを作り、それがもたらすすべてのリスクを受け入れることができます。
charlie_pl

2
これはレプリケーションには適しているかもしれませんが、バックアップの整合性が正しいアプリケーションの動作に依存することは望ましくありません。アプリケーションにバグがある場合、または今後設定が正しくない場合はどうなりますか?サーバーが悪意のあるユーザーによって侵害された場合はどうなりますか?アプリケーションにバックアップホストからコンテンツを削除する機能がある場合、増分リモートバックアップの価値の多くは失われます。
user371366
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.