web-dev-qa-db-ja.com

S3を効率的に使用してファイルを段階的にバックアップするにはどうすればよいですか?

高レベルでのrsyncの動作を理解していますが、2つの側面があります。 S3では、話すデーモンはありません—ありますが、基本的にはHTTPだけです。

いくつかのアプローチがあるようです。

s3rsync(ただし、これはrsyncをs3にボルトで固定しただけです)。簡単です。サードパーティに依存したいのかわかりません。 s3がrsyncだけをサポートすることを望みます。

ボルトオンなしでs3をサポートすると主張する、複製のようないくつかのrsync 'クローン'もあります。しかし、どうすればこれを行うことができますか?インデックスファイルをローカルに保持していますか?それがどれほど効率的であるかはわかりません。

S3は安価で信頼性が高いため、明らかに使用したいのですが、rsyncがツールのツールです。たとえば、画像の巨大なディレクトリをバックアップする場合などです。

ここでのオプションは何ですか? rsync + s3rsync + s3の代わりにduplicity + s3を使用すると何が失われますか?

42
Jaimie Sirovich

この質問に最後に回答したので、新しいAWSコマンドラインツール aws があります。

ローカルストレージとs3の間で sync 、rsyncのようにできます。使用例:

aws s3 sync s3://mybucket /some/local/dir/

システムのpython環境が適切に設定されている場合は、 pip を使用してAWSクライアントをインストールできます。

pip install awscli
39
Dan Pritts

s3cmdツール には、優れたsyncオプションがあります。私は次のようなものを使用して、ローカルバックアップを同期するために使用します。

s3cmd sync --skip-existing $BACKUPDIR/weekly/ s3://MYBACKUP/backup/mysql/

--skip-existingは、既存のファイルを比較するチェックサムを試みないことを意味します。その名前のファイルが既に存在する場合は、すぐにスキップして次に進みます。もあります --delete-removedオプション。ローカルに存在しないファイルを削除しますが、ローカルでクリーンアップしたものでもS3を維持したいので、これは使用しません。

16
Nic Cottrell

何をすべきかを誰かに伝えたくないのですが、重複のフラグを振ってもいいですか?またはその他の増分バックアップソリューション。同期はすべて非常にうまくいきますが、夜間にバックアップする場合、2日間問題に気付かないとどうなりますか?回答:手遅れですが、ローカルファイルとバックアップは相互のミラーであり、必要なデータもありません。増分バックアップまたはスナップショットを検討して、特定の時点に回復できるようにし、これを効率的に行うには、増分バックアップが必要です。そして、もしあなたのデータを失うことが世界の終わりのシナリオであるなら、あなたが知らないように異なるプロバイダーでコピーを保管してください、そしてあなたは失われて、知っているハッキングされるかもしれません。

私は重複とs3を使用していますが、その問題はありませんが、CPUを集中的に使用します。ただし、増分バックアップは行います。最後の水曜日または昨年1月のように、dirまたは特定のファイルを復元したい緊急時に、同じパーティション上の他のファイルを復元せずに、増分バックアップと、必要なファイルだけを要求できるツールが必要です。

私はcronを持っています。これはxか月ごとにいっぱいになり、それ以外の場合はインクリメンタルで、xか月より古いものを削除してs3ストレージの合計を抑え、最終的に収集ステータスを実行して、毎朝ステータスをメールで受け取ります。バックアップが機能していないときに気付くように、定期的に監視する必要があります。

ローカルシグネチャを保持するには、かなりのローカル一時スペースが必要なので、慎重に一時ディレクトリを設定してください。これは/ mnt内のさまざまなディレクトリを除いて/ mntをバックアップします。これはデータのバックアップに適しています。システムパーティションはAmazonのイメージングツールまたはスナップショットツールを使用するためです。

PHPスクリプト:

# Duplicity Backups

$exclude  = "--exclude /mnt/ephemeral ".
            "--exclude /mnt/logs ".
            "--exclude /mnt/service ".
            "--exclude /mnt/mail ".
            "--exclude /mnt/mysql ";

$key = "PASSPHRASE=securegpgpassphrase";

$tmp = "/mnt/mytempdir";

system("mkdir -p $tmp");

# Amazon

$aws = "AWS_ACCESS_KEY_ID=xxxxxx ".
       "AWS_SECRET_ACCESS_KEY=xxxxxx ";

$ops = "-v5 --tempdir=$tmp --archive-dir=$tmp --allow-source-mismatch --s3-european-buckets --s3-use-new-style --s3-use-rrs";
$target = " s3://s3-eu-west-1.amazonaws.com/mybucket";

# Clean + Backup

system("$key $aws /usr/bin/duplicity $ops --full-if-older-than 2M $exclude /mnt $target");
system("$key $aws /usr/bin/duplicity $ops remove-older-than 6M --force $target");
system("$key $aws /usr/bin/duplicity $ops cleanup --force --extra-clean $target");
system("$key $aws /usr/bin/duplicity $ops collection-status $target")
5
Jack

別の方法として、minio client aka mc を使用することもできます。「mc mirror」コマンドを使用すると、ジョブを実行できます。

$ mc mirror share/sharegain/ s3/MyS3Bucket/share/sharegain 
  • mc:minioクライアント
  • share/sharegain:ローカルディレクトリ
  • s3: https://s3.amazonaws.com のエイリアス
  • MyS3Bucket:リモートS3バケット
  • シェア/シェアゲイン:s3上の私のオブジェクト

定期的な間隔で同期を維持する簡単なスクリプトをcronjobとして記述できます。

それが役に立てば幸い。

3
Atul

S3は、使用目的を設計するのに十分な柔軟性を提供する汎用オブジェクトストレージシステムです。

あなたの質問から、rsyncに関する問題(インデックス作成以外)または実行した「サードパーティ」ツールに関する問題はわかりません。

大規模なファイルのセットが適切に構成されている場合は、サブフォルダーで複数のs3同期を実行できます。

Amazonの素晴らしい人々は、S3またはEBSへの大きなファイル転送のためにポータブルハードドライブからインポート/エクスポートを行うこともできます http://aws.Amazon.com/importexport/ 最初のアップロードに使用します。

Amazon s3のベストプラクティスをこちらでご覧ください- http://aws.Amazon.com/articles/1904

さまざまなツールについては、それらを試してみて、自分にとって最適なものを確認してください。価格設定に関しては、それがあなたのニーズに合っている場合、冗長価格設定が削減されます-- http://aws.Amazon.com/s3/pricing/

一般的な推奨事項-高速のマルチコアCPUと優れたネットワークパイプが必要です。

更新:S3でのチェックサムについての言及

S3については、キーと値のペアでデータを格納し、ディレクトリの概念はありません。 S3syncはチェックサムを検証します(S3には、検証用のヘッダーとしてチェックサムを送信するメカニズムがあります-Content-MD5ヘッダー)。ベストプラクティスは、データの整合性の部分にリンクしています。 S3では、チェックサムを送信/検証して取得できます。重複して増分バックアップを行う人はたくさんいます。 S3でrsyncが実行されていなくても、ここで述べたようにチェックサムを実行できます。

rsyncは実績のあるツールであり、最新のツールのほとんどは同じアルゴリズムまたはrsyncライブラリを使用するか、rsyncを外部から呼び出します。

3
Chida

真のrsyncがAmazonに適しているかどうかはわかりません。

私が理解しているように、標準のrsyncアルゴリズムは、クライアントがファイルの各ブロックのハッシュを計算し、サーバーがそのコピーのハッシュを計算し、それらのハッシュをクライアントに送信することを意味します。つまり、クライアントは変更されたブロックを特定し、アップロードが必要です。

これは、Amazonに2つの問題を引き起こします。多くのハッシュをインターネット経由で送信する必要があり、また、Amazonのコストを増加させるすべてのハッシュを計算するために処理能力が必要です-これがおそらく、サードパーティのプロバイダーに任せる理由です。その機能には追加料金がかかります。

クローンについては、明らかにハッシュをどこかに保存しており、クローンによってはどこかが異なる場合があります。ハッシュをAmazonのファイルごとに個別のオブジェクトとして、またはAmazonに保存されたデータベースとして保存することが可能です。または、ローカルおよびリモートに保存することもできます。

どちらの方法でもそれを行うことには長所と短所があります。ハッシュがリモートで個々のファイルに格納されている場合、それらを継続的に取得することはコストがかかる可能性があります。ハッシュがリモートでデータベースに格納されている場合、このデータベースが大きくなる可能性があり、ハッシュを継続的に取得および更新することはコストがかかる可能性があります。ハッシュがローカルに保存されている場合、これはコストの削減に役立ちますが、他の複雑さと問題をもたらします。

(もちろん、Amazonには他のサービスがあるので、データベースをAmazon DBに保持することが可能です)

例として、私は何年も前に1つの初期のrsyncクローンを試してみました。これは、Amazonの料金体系を考慮して書かれておらず、各ブロックのハッシュを取得するために大量のhttp getを発行していました。Amazonは各getの料金を請求しているため、請求書の保管部分が大幅に減少した一方で、転送部分は膨らんだ。

Rsync + s3rsync + s3の代わりにduplicity + s3を使用すると何が失われますか?

Rsyncを使用すると、ソースファイルとバックアップファイルを比較していることがわかります。重複およびその他のクローンでは、ソースファイルを、バックアップの実行時に取得されたハッシュと比較しています。たとえば、ハッシュを再計算したり、ハッシュデータベースを更新したりせずに、S3に直接アクセスしてファイルの1つを置き換えることができる場合があります。

2
sgmoore

このスレッドで言及されている複数のオプションを比較した後、私はS3fsに行くことにしました。 S3をローカルファイルシステムとしてマウントできます。次に、先に進んで、すでに知っている方法でrsyncを使用できます。

これは、始めるのに適したチュートリアルです: Amazon S3 with Rsync

作成者は前述のs3syncを以前使用していましたが、S3Fを使用するオプションに切り替えました。 SSHFSを介してローカルにマウントされた他のバックアップフォルダーもあるので、気に入っています。

0
Hendrik