rsyncバックアップパフォーマンスの向上


8

1つのシステムに常にマスターコピーがあり、他のシステムには常に最新のコピー(48時間以内)があると仮定して、UNIXボックス間のsshミラーリングでrsyncを改善するための最良のテクニックは何ですか?

また、それらの変更をプッシュする数十のマシンを処理するために、そのアプローチをスケーリングするために何をしなければならないでしょうか?

回答:


6

の場合:

  • ファイルの変更時刻が正しい
  • ファイルはそれほど大きくありません
  • プッシュを見逃すことはありません(または何らかのバックログ処理があります)

find -ctimeまたはfile -cnewerを使用して、最後の実行以降に変更されたファイルのリストを作成し、変更されたファイルのみをコピーできます(栄光の差分プッシュ)。

これは、複数のホストに対して非常にうまく変換されました。ソースで差分tarを実行し、すべてのホストでuntarするだけです。

それはあなたにそのようなものを与えます:

find -type f -cnewer /tmp/files_to_send.tar.gz > /tmp/files_to_send.txt
tar zcf /tmp/files_to_send.tar.gz --files-from /tmp/files_to_send.txt 
for HOST in host1 host2 host3 ...
do
    cat /tmp/files_to_send.tar.gz | ssh $HOST "tar xpf -"
done

スクリプトは洗練されているはずですが、あなたはそのアイデアを理解します。


おっと:猫のもう1つの役に立たない使用法:-)
スティーブシュネップ2009年

実際、これはほぼこのように行うことができます。BEは、これは正しいデータファイルを維持するスクリプトの後に実行するために追加でOKだろうと力を仮定
SAL

4

rsyncしているデータがまだ圧縮されていないことを前提として、圧縮(-z)をオンにすると、転送速度が向上する可能性がありますが、どちらか一方のCPUが犠牲になります。


圧縮はすでにsshを介してオンになっていた
sal

3
rsyncによる圧縮は通常、SSHトンネルでの圧縮よりも効果的です。その理由は、rsyncにはより多くの知識があり、それを利用できるからです。たとえば、その圧縮は、転送されないファイルの一部を参照できます。
derobert 2009年

5
ほぼ20%のrsync改善された性能にSSHから圧縮を移動@derobert
SAL

2

変更の多い非常に大きなファイルを転送する場合は、-inplaceオプションと--whole-fileオプションを使用します。これらのオプションを2Gb VMイメージに使用すると、大きな効果がありました(主にrsyncプロトコルがあまり機能していなかったため)これらのファイルでインクリメンタルデータを渡す場合)。ただし、ほとんどの場合、これらのオプションはお勧めしません。

--statsを使用して、rsyncインクリメンタルプロトコルを使用したファイルの転送状況を確認します。


2

もう1つの戦略は、sshとrsyncを高速化することです。信頼できるネットワーク(読み取り:プライベート)を経由する場合、実際のペイロードを暗号化する必要はありません。HPN sshを使用できます。このバージョンのsshは、認証のみを暗号化します。また、rsyncバージョン3は、ファイルリストの作成中にファイルの転送を開始します。もちろん、これはrsyncバージョン2に比べて大幅に時間を節約できます。それがあなたが探していたものかどうかはわかりませんが、お役に立てば幸いです。また、rsyncは何らかの方法でマルチキャストをサポートしますが、その方法を理解するふりはしません。


何年も前に、はるかに遅いプロセッサを搭載したシステムを使用していたときに、利用可能なすべてのOpenSSH圧縮方式をベンチマークし、「arcfour」が最も高速であると考えました。それと、gig-eを使用している場合にジャンボフレームをオンにすることで、転送速度が大幅に向上します。
Derek Pressnall

2

バックアップ方法としてrsyncを実行する場合、遭遇する最大の問題は、バックアップするファイルが大量にある場合です。Rsyncは大きなファイルを問題なく処理できますが、バックアップするファイルの数が多すぎると、rsyncが適切な時間内に完了しないことに気づくでしょう。これが発生した場合、バックアップをより小さな部分に分割し、それらの部分をループする必要があります。

find /home -mindepth 1 -maxdepth 1 -print0 | xargs -0 -n 1 -I {} -- rsync -a -e ssh {} backup@mybackupserver:/backup/

または、ファイル数を減らすためにファイルセットを圧縮します。

何十台ものマシンにそれらの変更のミラーを取得させることに関しては、バックアップがどれだけ新鮮でなければならないかによります。1つのアプローチは、プライマリサーバーからバックアップサーバーに変更をミラーリングし、他のサーバーに初期バックアップサーバーのrsyncデーモンによって変更をバックアップサーバーからプルさせ、他のサーバーをわずかにプルするようにスケジュールすることです。異なる時間に、またはスクリプトでパスワードなしのsshを使用して各サーバーに接続し、バックアップの新しいコピーをプルするように指示することで、最初のバックアップサーバーの過負荷を防ぐのに役立ちます。バックアップのコピーをプルしている他のマシンの数。


次の違いを知っていますか?:/ f / /Backup/*.bak; rsync -e ssh $ f backup @ mybackupserver;を実行します。完了し、rsync -re ssh /Backup/*.bak backup @ mybackupserver?
Osama ALASSIRY 09年

違いは、最初のものは/ Backup /ディレクトリ内の.bakファイルごとにrsyncを実行する(* .bakはファイルと一致するため)のに対して、2つ目は1つのrsyncを実行してすべてを転送することです。* .bakがディレクトリに一致することを意図している場合、最初のディレクトリはサブディレクトリに再帰しません(意図的に-rを省略した場合)。一般に、ファイルが多すぎてうまく処理できないまで、最初のファイルではなく2番目のファイルを実行することになります。
Rodney Amato、

1
forルックを使用してディレクトリまたはファイルを反復処理することは、一般に、良い考えではないことに注意してください。スペースのあるディレクトリやファイルにヒットすると、ひどく壊れてしまいます。
ネイサン

@ネイサン、そうfind /Backup/ -name '*.bak' -print0 | xargs -0 -n 1 rsync -e sshですか?
HARK

xargsアプローチを使用するように例を更新しました。/ homeの下にディレクトリがあり、そこにスペースがあるので、自分でこれを行う必要はありませんでしたが、そこに最良の例があるはずです。
ロドニーアマート

2

rsyncには、切断されたコピーを行う方法があります。言い換えれば、rsyncのは(概念的には)できdiffのディレクトリツリーを生成し、パッチあなたが後ですることができ、ファイル適用元のソースと同じですファイルを任意の数の上を。

マスターでrsyncを、ミラーでミラーを呼び出す必要があります--write-batch。ファイルを作成します。次に、このファイルを他の任意の数のターゲットに転送し、次にを使用してそれらの各ターゲットにバッチ適用します--read-batch

最後のrsynced状態のローカルコピー(つまり、現在ミラーがどのように見えるかのコピー)をマスターと同じマシンに保持している場合、ミラーに接続することなく、マスターでこの「パッチ」を生成できます。

マスター:

rsync --write-batch=my-batch.rsync /master/data /current/mirror

必要な他のオプションを追加します。これは2つのことを行います。

  1. /current/mirror反映するように変更します/master/data
  2. 後で使用するために呼び出されるバイナリパッチファイル(またはバッチファイル)が作成さmy-batch.rsyncれます。

my-batch.rsyncマスターからすべてのミラーにファイルを転送してから、ミラーにパッチを適用してください。

rsync --read-batch=my-batch.rsync /local/mirror

このアプローチの利点:

  • マスターは殺到していません
  • マスター/ミラーを同時に調整/アクセスする必要はありません
  • 異なる権限を持つ異なる人々がマスターとミラーで作業を行うことができます。
  • TCPチャネルは必要ありません(ssh、netcatなど、ファイルは電子メールで送信できます;-))
  • オフラインのミラーは後で同期できます(オンラインにしてパッチを適用するだけです)
  • 同一であることが保証されているすべてのミラー(同じ「パッチ」を適用するため)
  • すべてのミラーを同時に更新できます(--read-batchミラー自体でCPU / IOのみが集中するため)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.