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


42

rsyncが高レベルでどのように機能するかは理解していますが、2つの側面があります。S3には、話すデーモンはありません—ありますが、基本的にはHTTPです。

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

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

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

s3は安価で信頼性が高いため、明らかにs3を使用したいのですが、画像の巨大なディレクトリをバックアップするなど、rsyncがツールとして使用できるものがあります。

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


4
S3は安いですか?それは私にとってニュースです。信頼性のある?確かに、しかし安くはない。
EEAA

5
s3は1ギガバイトあたり0.13ドル以下で、より多くのストレージを必要とするか、冗長性を低くしたいのです。クイック検索により、rsyncストレージのevbackup.comが明らかになります。はるかに高価です。何が安くて、ある程度の冗長性がありますか?
ジェイミーシロヴィッチ

場合、私は rsyncのを設計していた、それはプラグインをサポートする新しいプロトコルが(例えばS3://)そうすることを追加することができます。ただし、現時点では、rsyncはこれをサポートしていないため、S3へのバックアップにrsyncを直接使用できるとは思いません。
エドワードフォーク

次の問題は、S3が所有権や許可などのメタデータを保存するとは思わないことです。そのため、たとえば「aws s3 sync」を使用してバックアップを実行できますが、Unixファイルシステムの本格的なバックアップにはおそらく適していません。復元時に失われるデータが多すぎます。また、シンボリックリンク、ハードリンク、およびその他の特別なファイルは失われると思います。
エドワードフォーク

回答:


39

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

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

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

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

pip install awscli

1
私の経験では、これは単なる変更のデルタではなく、すべてをアップロードします。たとえば、静的なサイトをで開発サーバーにプッシュしてrsyncいましたが、平均1秒かかりましたが、接続が遅いと変更が反映されるだけでした。 aws s3 sync一方、約5分かかり、すべてのファイルを再転送しました。
ライブレッド

2
動作しないと信じていますが、ドキュメントでは、「ローカルファイルのサイズがs3オブジェクトのサイズと異なる場合、ローカルファイルのアップロードが必要であり、ローカルファイルの最終変更時刻はs3オブジェクトの最終変更時刻、または指定されたバケットとプレフィックスの下にローカルファイルが存在しません。」最新バージョンのaws-cliがあることを確認してください。これを再現できる場合は、githubでバグを報告してください。私はしばらく前にバグを提出したときに応答しました。
ダンプリッツ

コマンドは次のとおりです。aws s3 sync / some / local / dir / s3:// mybucket
Carlo S

1
カルロス、あなたのポイントが何なのか分かりません。あなたが私の例のコマンドが間違っていることを示唆するつもりなら、我々は両方とも正しいです。s3同期はどちらの方向でも機能します。
ダンプリッツ

パーティーに遅れましたが、ここで何が起こっていますか:S3にアップロードするとき、クイックチェックルールが適用されます(サイズまたは日付が変更された場合にアップロードします)。をダウンロードする場合、クイックチェックルールはなく、すべてが無条件にダウンロードされます。
エドワードフォーク

16

s3cmdツールは偉大持つsyncオプションを選択します。次のようなものを使用して、ローカルバックアップを同期するために使用します。

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

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


5

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

重複とs3を使用しますが、それはCPUを集中的に使用します。ただし、増分バックアップは実行します。緊急時に、同じパーティション上の他のファイルを復元せずに、ディレクトリまたは特定のファイルを復元する場合(前回の水曜日または昨年1月)、増分バックアップと、必要なファイルだけを要求できるツールが必要です。

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

ローカル署名を保持するには、かなりのローカル一時スペースが必要なので、慎重に一時ディレクトリを設定します。これは、/ 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")

1
s3バケットのバージョン管理をオンにすると、古いコピーが保持されます
mcmillab

3

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

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

適切に構造化された多数のファイルセットがある場合は、サブフォルダーで複数のs3同期を実行できます。

-アマゾンで素敵な人々はまた、あなたが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を外部から呼び出します。


1
これがどのように質問に答えているのかわかりません。反対側のデーモンなしでrsyncが行うことを、重複がどのように処理するかを尋ねていました。チェックサムを取得することさえできません。あるいは、チェックサムを取得することもできますが、それではどのようにファイルを増分更新しますか?
ハイミーシロヴィチ

OK。だから、DuplicityはS3からのこのハッシュを使用していると言っていますが、FTP経由でも機能すると主張しています。FTPにはハッシュメカニズムがありません。私は安全面で間違いを犯し、「証明された」ツールを使用する傾向があります。Rsyncはイエスであることが証明されていますが、s3アドオンサービスs3rsyncなしではs3バックアップを実行できません。私は重複を少し怖がっていますが、アクセサリーサービスなしでs3でrsyncのような機能をある程度得ることができれば、プロトコルの魅力が広がります。私はそれがどれだけうまく機能していないのか(そしておそらくさまざまなプロトコルで異なっているかもしれません)。FTP同期はどのように行われますか?:)
Jaimie Sirovich

@JaimieSirovichテストして見てください。持っていれば、Duplicityが「マニフェスト」ファイルをビルドするのを知っていただろう。
ceejayoz 14

3

別の方法として、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バケット
  • share / sharegain:s3上の私のオブジェクト

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

それが役に立てば幸い。


また、-wフラグがありfsnotify、変更を監視するために使用されます。システムサービスなどとして簡単に設定できます。
アルカー

2

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

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

多くのハッシュをインターネット経由で送信する必要があるという点でAmazonに2つの問題が発生し、Amazonのコストを増加させるすべてのハッシュを計算するために処理能力が必要になります。その機能には追加料金がかかります。

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

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

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

例として、私は何年も前に1つの初期のrsyncクローンを試しました。これはAmazonの価格構造を考慮して書かれておらず、各ブロックのハッシュを取得するために大量のHTTP GETを発行していました。風船。

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

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


0

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

これは始めるための良いチュートリアルです: Amazon S3 with Rsync

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


12
危険、ウィル・ロビンソン!rsyncの低帯域幅通信の利点が得られないため、これは非常に高価です--- s3fsはファイル全体を読み取り(変更された場合は書き込み)、最終的にAmazonは2回請求します。代わりに、EC2インスタンスを使用し、ssh経由でrsyncをリモートで使用することを検討してください。EC2インスタンスからS3への転送は無料なので、支払うのはローカルマシンからEC2インスタンスへのrsyncの低帯域幅通信だけです。EC2マイクロインスタンスをオンデマンドで実行しても、実質的には何もかかりません。
デビッド

2
この!悪いアドバイスの多くは... rsyncのとS3を理解していないもののためにそこにあります
マーク・

この欠点の1つは、管理するマイクロインスタンスがあることです。方法を知っていれば簡単ですが、多くの人にとっては参入の障壁です。プラス面として、EC2接続EBSストレージは、S3のバイトあたりの価格の約半分です。
ダンプリッツ

@DavidGiven rysncを使用せずにマウントされたs3fsに直接書き込み、ライフサイクルを介して寿命を管理した場合はどうなりますか?
Forethinker
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.