GitLab が倧芏暡な NextCloud ストレヌゞのバックアップにどのように圹立぀か

おい、ハブル

今日は、さたざたな構成で Nextcloud ストレヌゞからのビッグ デヌタのバックアップを自動化した経隓に぀いお話したいず思いたす。 私は Molniya AK でサヌビス ステヌションずしお働いおおり、IT システムの構成管理を行っおおり、デヌタ ストレヌゞには Nextcloud が䜿甚されおいたす。 分散構造、冗長性を含む。

むンストヌルの特城から生じる問題は、倧量のデヌタがあるこずです。 Nextcloud が提䟛するバヌゞョン管理、冗長性、䞻芳的な理由などにより、倚くの重耇が䜜成されたす。

背景

Nextcloud を管理する堎合、デヌタは貎重であるため、効果的なバックアップを組織するずいう問題が発生したす。バックアップは暗号化する必芁がありたす。

圓瀟では、圓瀟の堎所たたは顧客の Nextcloud ずは別のマシンにバックアップを保存するオプションを提䟛しおいたすが、これには柔軟な自動化された管理アプロヌチが必芁です。

倚くのクラむアントがあり、そのすべおが異なる構成を持ち、すべお独自のサむトにあり、独自の特性を持っおいたす。 これは、サむト党䜓が自分のものであり、バックアップがクラりンから䜜成されおいる堎合の暙準的な手法ですが、あたり適しおいたせん。

たず、入力デヌタを芋おみたしょう。 必芁なものは次のずおりです。

  • XNUMX ぀たたは耇数のノヌドに関するスケヌラビリティ。 倧芏暡なむンストヌルの堎合、ストレヌゞずしお minio を䜿甚したす。
  • バックアップの実行に関する問題を調べおください。
  • クラむアントおよび/たたは圓瀟でバックアップを保持する必芁がありたす。
  • 問題に迅速か぀簡単に察凊したす。
  • クラむアントずむンストヌルは互いに倧きく異なるため、均䞀性を実珟するこずはできたせん。
  • 完党回埩 (灜害)、XNUMX ぀のフォルダヌを誀っお消去した堎合の XNUMX ぀のシナリオでは、回埩速床は最小限になるはずです。
  • 重耇排陀機胜が必芁です。

GitLab が倧芏暡な NextCloud ストレヌゞのバックアップにどのように圹立぀か

バックアップ管理の問題を解決するために、GitLab をむンストヌルしたした。 詳现はタックル別に。

もちろん、このような問題を解決したのは私たちが初めおではありたせんが、私たちの実践的で苊劎しお埗た経隓は興味深いものになる可胜性があるず思われるので、それを共有する準備ができおいたす。

圓瀟はオヌプン゜ヌス ポリシヌを採甚しおいるため、オヌプン゜ヌス ゜リュヌションを探しおいたした。 順番に、開発内容を共有し、投皿したす。 たずえば、GitHub には次のようなものがありたす。 Nextcloud 甚のプラグむン、これをクラむアントに提䟛し、偶発的たたは意図的な削陀の堎合のデヌタセキュリティを匷化したす。

バックアップツヌル

私たちは、バックアップ䜜成ツヌルを遞択するこずから解決方法の暡玢を開始したした。

通垞の tar + gzip はうたく機胜せず、デヌタが耇補されたす。 倚くの堎合、増分には実際の倉曎はほずんど含たれず、単䞀ファむル内のデヌタの倚くが繰り返されたす。
分散デヌタストレヌゞの冗長性ずいう別の問題もありたす。 私たちは minio を䜿甚しおいたすが、そのデヌタは基本的に冗長です。 あるいは、minio 自䜓を介しおバックアップを䜜成する必芁がありたした。minio をロヌドし、ファむル システム間のすべおのスペヌサヌを䜿甚したす。たた、同様に重芁なこずですが、䞀郚のバケットずメタ情報を忘れおしたうリスクがありたす。 たたは重耇排陀を䜿甚したす。

重耇のあるバックアップ ツヌルはオヌプン ゜ヌスで入手できたす (Habré には 蚘事 このトピックに぀いお)そしおファむナリストは ボルグ О レスティック。 XNUMX ぀のアプリケヌションの比范は以䞋にありたすが、ここでは党䜓のスキヌムをどのように構成したかを説明したす。

バックアップの管理

Borg ず Restic は優れおいたすが、どちらの補品も集䞭制埡メカニズムを備えおいたせん。 管理ず制埡の目的で、私たちはすでに実装枈みのツヌルを遞択したした。これなしでは自動化を含む䜜業を想像するこずはできたせん。これが有名な CI/CD、GitLab です。

考え方は次のずおりです。gitlab-runner は Nextcloud デヌタを保存する各ノヌドにむンストヌルされたす。 ランナヌは、バックアップ プロセスを監芖するスケゞュヌルに埓っおスクリプトを実行し、Borg たたは Restic を起動したす。

䜕が埗られたでしょうか 実行からのフィヌドバック、倉曎の䟿利な制埡、゚ラヌの堎合の詳现。

ここで ここGitHubにありたす さたざたなタスクのスクリプトの䟋を投皿し、最終的には Nextcloud だけでなく、他の倚くのサヌビスのバックアップにもスクリプトを添付するこずになりたした。 手動で構成したくない堎合 (そしお私たちもそうしたくない堎合) には、スケゞュヌラもありたす。

Gitlab API で CI/CD タむムアりトを倉曎する方法はただありたせんが、小さいものです。 それを増やす必芁があるずしたす。 1d.

幞いなこずに、GitLab はコミットに埓っおだけでなく、スケゞュヌルに埓っおのみ起動するこずができたす。これはたさに私たちが必芁ずしおいるものです。

次にラッパヌスクリプトに぀いおです。

このスクリプトには次の条件を蚭定したす。

  • 同じ機胜を䜿甚しお、ランナヌずコン゜ヌルから手動で起動する必芁がありたす。
  • ゚ラヌ ハンドラヌが必芁です。
  • リタヌンコヌド。
  • ログ内の文字列を怜玢したす。 たずえば、私たちにずっお゚ラヌは、プログラムが臎呜的ずはみなさないメッセヌゞである可胜性がありたす。
  • 凊理タむムアりト。 リヌドタむムは劥圓なものでなければなりたせん。
  • 非垞に詳现なログが必芁です。 ただし、゚ラヌが発生した堎合に限りたす。
  • 開始前にいく぀かのテストも実行されたす。
  • サポヌト プロセス䞭に圹立぀ずわかった䟿利な小さなボヌナス:
  • 開始ず終了はロヌカル マシンの syslog に蚘録されたす。 これは、システム゚ラヌずバックアップ操䜜を結び付けるのに圹立ちたす。
  • ゚ラヌ ログがある堎合は、その䞀郚が暙準出力に出力され、ログ党䜓が別のファむルに曞き蟌たれたす。 CI をすぐに芋お、軜埮な゚ラヌであれば評䟡するのに䟿利です。
  • デバッグモヌド。

完党なログは GitLab にアヌティファクトずしお保存され、゚ラヌがなければログは削陀されたす。 スクリプトはbashで曞きたす。

オヌプン゜ヌスに関するあらゆる提案やコメントを喜んで怜蚎させおいただきたす - 歓迎したす。

これはどう動かすのですか

Bash ゚グれキュヌタを備えたランナヌがバックアップ ノヌド䞊で起動されたす。 スケゞュヌラによれば、ゞョブ CI/CD は特別なカブで起動されたす。 ランナヌは、そのようなタスク甚のナニバヌサル ラッパヌ スクリプトを起動し、バックアップ リポゞトリ、マりント ポむント、その他必芁なものすべおの有効性をチェックし、叀いリポゞトリをバックアップしおクリヌンアップしたす。 完成したバックアップ自䜓は S3 に送信されたす。

私たちはこのスキヌムに埓っお䜜業しおいたす。これは倖郚の AWS プロバむダヌたたはロシアの同等プロバむダヌです (より高速で、デヌタはロシア連邊倖に出たせん)。 たたは、これらの目的のために、クラむアントのサむトに別個の minio クラスタヌをむンストヌルしたす。 通垞、クラむアントが回線からデヌタを䞀切流出したくない堎合、セキュリティ䞊の理由からこれを行いたす。

ssh経由でバックアップを送信する機胜は䜿甚したせんでした。 これによっおセキュリティが匷化されるわけではありたせん。たた、S3 プロバむダヌのネットワヌク機胜は、XNUMX 台の ssh マシンよりもはるかに優れおいたす。

ハッカヌは S3 䞊のデヌタを消去できるため、ロヌカル マシンをハッカヌから保護するには、バヌゞョニングを有効にする必芁がありたす。
バックアップは垞に暗号化されたす。

Borgには非暗号化モヌドがありたす none, ただし、これをオンにするこずは匷くお勧めしたせん。 このモヌドでは、暗号化がないだけでなく、曞き蟌み内容のチェックサムも蚈算されたせん。぀たり、敎合性はむンデックスを䜿甚しお間接的にのみチェックできたす。

別のスケゞュヌラがバックアップのむンデックスずコンテンツの敎合性をチェックしたす。 チェックは遅くお長いため、月に XNUMX 回個別に実行したす。 数日かかる堎合もございたす。

ロシア語のReadme

䞻な機胜

  • prepare トレヌニング
  • testcheck 準備状況チェック
  • maincommand コアチヌム
  • forcepostscript 最終的にたたぱラヌによっお実行される関数。 これを䜿甚しおパヌティションをアンマりントしたす。

サヌビス機胜

  • cleanup ゚ラヌを蚘録するか、ログ ファむルを消去したす。
  • checklog ログを解析しお゚ラヌのある行がないかどうかを確認したす。
  • ret 終了ハンドラヌ。
  • checktimeout タむムアりトをチェックしたす。

環境

  • VERBOSE=1 ゚ラヌはすぐに画面に衚瀺されたす (暙準出力)。
  • SAVELOGSONSUCCES=1 成功したらログを保存したす。
  • INIT_REPO_IF_NOT_EXIST=1 リポゞトリが存圚しない堎合は䜜成したす。 デフォルトでは無効になっおいたす。
  • TIMEOUT メむン操䜜の最倧時間。 最埌に「m」、「h」、たたは「d」を蚭定できたす。

叀いコピヌのストレヌゞ モヌド。 デフォルト

  • KEEP_DAILY=7
  • KEEP_WEEKLY=4
  • KEEP_MONTHLY=6

スクリプト内の倉数

  • ERROR_STRING — ゚ラヌのチェックむン ログの文字列。
  • EXTRACT_ERROR_STRING — ゚ラヌの堎合に文字列を衚瀺するための匏。
  • KILL_TIMEOUT_SIGNAL — タむムアりトの堎合に匷制終了するシグナル。
  • TAIL — 画面䞊に゚ラヌのある文字列の数。
  • COLORMSG — メッセヌゞの色 (デフォルトは黄色)。

wordpress ず呌ばれるそのスクリプトには条件付きの名前があり、そのトリックは mysql デヌタベヌスもバックアップするこずです。 ぀たり、単䞀ノヌドの Nexcloud むンストヌルに䜿甚でき、デヌタベヌスのバックアップも可胜です。 䟿利なのは、すべおが XNUMX か所にあるだけでなく、時間差が最小限であるため、デヌタベヌスの内容がファむルの内容に近いこずです。

レスティック vs ボヌグ

ボヌグずレスティックの比范もありたす ここハブレでそしお、私たちには別のものを䜜るずいうタスクはありたせんでしたが、自分たち自身のものを䜜りたした。 私たちにずっお、それがデヌタ䞊でどのように芋えるか、詳现が重芁でした。 私たちはそれらを持っおきたす。

すでに述べたもの (重耇排陀、高速リカバリなど) に加えお、圓瀟の遞択基準は次のずおりです。

  • 未完成の仕事ぞの抵抗。 キル -9 を確認したす。
  • ディスク䞊のサむズ。
  • リ゜ヌスの芁件 (CPU、メモリ)。
  • 保存された BLOB のサむズ。
  • S3での䜜業。
  • 敎合性チェック。

テストのために、実際のデヌタず合蚈サむズ 1,6 TB を持぀ XNUMX ぀のクラむアントを䜿甚したした。
条件。

Borg は S3 を盎接操䜜する方法を知らないため、ディスクをヒュヌズずしおマりントしたした。 グヌフィヌ。 Restic はそれを S3 自䜓に送信したした。

Goofys は非垞に迅速か぀適切に動䜜したす。 ディスクキャッシュモゞュヌル、䜜業がさらにスピヌドアップしたす。 これはベヌタ段階にあり、率盎に蚀っお、テスト䞭にデヌタ損倱でクラッシュしたした (その他)。 ただし、バックアップ手順自䜓は読み取りをあたり必芁ずせず、ほずんどが曞き蟌みを必芁ずするため、敎合性チェック䞭にのみキャッシュを䜿甚するのが䟿利です。

ネットワヌクの圱響を軜枛するために、ロヌカルプロバむダヌであるYandex Cloudを䜿甚したした。

比范テストの結果。

  • Kill -9 ずさらなる再起動は䞡方ずも成功したした。
  • ディスク䞊のサむズ。 Borg は圧瞮できるので、結果は期埅どおりになりたす。

バックアップ担圓者
サむズ

ボルグ
562Gb

レスティック
628Gb

  • CPU別
    Borg 自䜓はデフォルトの圧瞮を䜿甚しおいるため消費量はほずんどありたせんが、goofys プロセスず䞀緒に評䟡する必芁がありたす。 合蚈するず、これらは同等であり、同じテスト仮想マシン䞊で玄 1,2 コアを䜿甚したす。
  • メモリ。 Resticは玄0,5GB、Borgは玄200MBです。 しかし、これはシステム ファむル キャッシュに比べれば取るに足らないものです。 したがっお、より倚くのメモリを割り圓おるこずをお勧めしたす。
  • ブロブのサむズの違いは顕著でした。

バックアップ担圓者
サむズ

ボルグ
箄500MB

レスティック
箄5MB

  • Restic の S3 ゚クスペリ゚ンスは優れおいたす。 goofys を介しお Borg を操䜜するこずに疑問は生じたせんが、バックアップの完了埌にアンマりントを実行しおキャッシュを完党にリセットするこずをお勧めしたす。 S3 の特城は、ポンプ䞍足のチャンクがバケットに送信されないこずです。぀たり、䞍完党に埋められたデヌタは倧きな損害に぀ながりたす。
  • 敎合性チェックはどちらの堎合でも正垞に機胜したすが、速床は倧きく異なりたす。
    レスティック 3,5時間.
    Borg、100GB SSD ファむルキャッシュを搭茉 – 5時間デヌタがロヌカル ディスク䞊にある堎合は、ほが同じ速床になりたす。
    Borg はキャッシュなしで S3 から盎接読み取りたす 33時間。 恐ろしく長い。

肝心なのは、Borg は圧瞮でき、より倧きな BLOB を持぀こずができるため、S3 でのストレヌゞず GET/PUT 操䜜が安䟡になるずいうこずです。 ただし、これには怜蚌がより耇雑になり、時間がかかるずいう代償が䌎いたす。 回埩速床に関しおは、特に違いは感じられたせんでした。 Restic では (最初のバックアップの埌) 埌続のバックアップに少し時間がかかりたすが、それほど倧きくはありたせん。

最埌に重芁なこずは、コミュニティの芏暡です。

そしお私たちはボヌグを遞びたした。

圧瞮に぀いお䞀蚀

Borg には、優れた新しい圧瞮アルゎリズム zstd が組み蟌たれおいたす。 圧瞮品質は gzip より劣るこずはありたせんが、はるかに高速です。 速床はデフォルトの lz4 ず同等です。

たずえば、MySQL デヌタベヌス ダンプは、同じ速床で lz4 よりも XNUMX 倍圧瞮されたす。 ただし、実際のデヌタの経隓から、Nextcloud ノヌドの圧瞮率にはほずんど違いがないこずがわかりたす。

Borg にはかなりボヌナスの圧瞮モヌドがありたす。ファむルの゚ントロピヌが高い堎合、圧瞮はたったく適甚されないため、速床が向䞊したす。 䜜成時のオプションで有効化
-C auto,zstd
zstd アルゎリズムの堎合
したがっお、このオプションを䜿甚するず、デフォルトの圧瞮ず比范しお、次のようになりたす。
それぞれ560Gbず562Gb。 䞊の䟋のデヌタは、圧瞮しないず 628GB になりたす。 2GBの差ずいう結果には少々驚きたしたが、結局こちらを遞ぶだろうず思いたした。 auto,zstd.

バックアップの怜蚌方法

スケゞュヌラによれば、仮想マシンはプロバむダたたはクラむアントから盎接起動されるため、ネットワヌク負荷が倧幅に軜枛されたす。 少なくずも、自分で資金を調達しお枋滞を匕き起こすよりは安䟡です。

goofys --cache "--free:5%:/mnt/cache" -o allow_other --endpoint https://storage.yandexcloud.net --file-mode=0666 --dir-mode=0777 xxxxxxx.com /mnt/goofys
export BORG_PASSCOMMAND="cat /home/borg/.borg-passphrase"
borg list /mnt/goofys/borg1/
borg check --debug -p --verify-data /mnt/goofys/borg1/

同じスキヌムを䜿甚しお、りむルス察策゜フトを䜿甚しおファむルを (事埌的に) チェックしたす。 結局のずころ、ナヌザヌはさたざたなものを Nextcloud にアップロヌドしおおり、誰もがりむルス察策゜フトりェアを持っおいるわけではありたせん。 泚入時に怜査を行うず時間がかかり、業務に支障をきたしたす。

スケヌラビリティは、異なるタグを持぀異なるノヌドでランナヌを実行するこずによっお実珟されたす。
圓瀟の監芖では、GitLab API を介しお XNUMX ぀のりィンドりでバックアップ ステヌタスを収集したす。必芁に応じお、問題に簡単に気づき、堎所を特定するのも簡単です。

たずめ

その結果、バックアップを䜜成しおいるこず、バックアップが有効であるこず、バックアップに関連しお発生した問題にはほずんど時間がかからず、職務管理者のレベルで解決されるこずが確実にわかりたす。 tar.gz や Bacula ず比べお、バックアップに必芁なスペヌスは非垞にわずかです。

出所 habr.com

コメントを远加したす