ビジネスとIT活用に役立つブログBlog


resticを使ってGoogle Cloud Storageにバックアップする方法を検証してみる

この記事をシェアする:

アーティスでは、ファイルシステムのストレージサーバーにGCPのCloud Filestore(以下、Filestore)を利用しています。FilestoreはマネージドのNFSサーバーで、手軽に大容量のストレージを利用できとても便利ですが、自動的にバックアップしてくれるサービスはありません。

また、ゾーン間のレプリケーションはサポートされておらず、特定のゾーン内でのサービスなので、定期的にバックアップを取ることが奨められています。

gsutilのrsyncでバックアップする方法のデメリット

当初は、gsutilコマンドのrsyncでバックアップする予定でしたが、OS固有のファイルタイプの同期で問題があることがわかりました。


  • シンボリックファイルをバケットから復元した場合、シンボリックではなく実際のファイルになる
  • 壊れたシンボリックリンクを含むディレクトリがある場合、中断される
  • ディレクトリを指すシンボリックリンクはスキップされる

If you use gsutil rsync as a simple way to backup a directory to a bucket, restoring from that bucket will result in files where the symlinks used to be. At best this is wasteful of space, and at worst it can result in outdated data or broken applications — depending on what is consuming the symlinks. If you use gsutil rsync over directories containing broken symlinks, gsutil rsync will abort (unless you pass the -e option). gsutil rsync skips symlinks that point to directories.rsync - Synchronize content of two buckets/directories

シンボリックファイルが正常に展開できないと、アプリケーションが正常に動作しない可能性があります。
ですので、公式では、tarなどを使って該当のディレクトリを固める方法が推奨されています。

resticを使ってバックアップする

tarを使うのなら、Cloud Storageをバックエンドに指定できるバックアップツールを使ってもいいのではないのかと思い、以前から気になっていたresticを試すことにしました。

インストール

公式には、パッケージマネージャからインストールする方法が書かれていますが、今回は検証なのでバイナリを直接ダウンロードします。

上記のページから、自分の環境に合ったバイナリをダウンロードして、展開しました。

リポジトリの準備

resticは、バックアップするのにリポジトリを使うので、その準備を行います。
リポジトリはローカルに作成することもできますし、さまざまなクラウドストレージに対応しています。

今回は、Filestoreのデータをバックアップするので、Cloud Storageを利用することにしました。

まずは、サービスアカウントを作成して「ストレージのオブジェクト管理者」の役割を付与して、その鍵を保存します。
環境変数にプロジェクトIDと、サービスアカウントの鍵のパスを保存します。

次に、Cloud Storage側でバケットを作成します。
そして、リポジトリを初期化します。

パスワードを紛失すると、データが復元できなくなるので大切に保管します。

バックアップとレストアをして時間を計測する

テスト用データとして、ブロックサイズで約20GB(67,544ファイル)のデータをバックアップしてみます。
実行するインスタンス環境は、Filestoreのデータをマウントしている「f1-micro」タイプのGCEです。
Cloud Storageは、マルチリージョンでローケーションは「asia」です。
ストレージクラスは、検証用なので短期間でIOオペレーションが発生するのでStandardを選択しました。

約38分で20GBのバックアップが完了しました。 1GBあたり2分くらいかかる計算です。

こちらは、約17分で20GBの復元が完了しました。

現在のバックアップツールだと、80GBのバックアップに4.5h時間、レストアに5時間かかってます。
今回の方式に変更することで、遅めに見積もって、バックアップに2.5時間~3時間、レストアに1.5時間~2時間くらいなので、かなり高速化できそうです。

まとめ

Filestore内のデータをCloud Storageにバックアップする方法として、resticを使ってみました。
goで実装されていることもあり、シングルバイナリをデプロイすることで非常に簡単に検証できました。

バックアップの速度やレストアの速度は、障害やインシデント発生時の復旧時間に影響してきます。
Webアプリケーションのデータは日々増えていくので、大容量のデータを迅速にバックアップ、復元することが次第に難しくなっていきます。

ある程度データが大きくなったら、インフラ全体の構成を見直して、データを分割する必要も出てくると思います。

The following two tabs change content below.
アーティス

アーティス

創造性を最大限に発揮するとともに、インターネットに代表されるITを活用し、みんなの生活が便利で、豊かで、楽しいものになるようなサービスやコンテンツを考え、創り出し提供しています。
この記事のカテゴリ:

SNSで最新の情報を
受け取ることができます!