web-dev-qa-db-ja.com

NFS経由のrsync-速度が一定していません

ギガビットLANで約9 TBを転送しています。これをできるだけ迅速に行うために(私は願っています)、宛先をNFS経由でソースにマウントし、rsyncを実行しました。

これが私のマウントオプションです:x.x.x.x:/mnt on /mnt type nfs (rw,noatime,nodiratime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=x.x.x.x,mountvers=3,mountport=56548,mountproto=udp,local_lock=none,addr=x.x.x.x)

これが私のrsyncコマンドです:rsync -avWH --progress ./ /mnt/

単一ファイルのnloadを見ると、最大900MBpsに急上昇し、KBpsの範囲の数値に低下してから、バックアップする速度がわかります。これはnloadからのグラフィックで、転送が停止しているように見えることがわかります、midfile。ファイルのサイズは通常5〜6 GBです。 MTUは9000です。スイッチは、十分なバックプレーン速度を備えたCisco 3750xです。これらは、2つの異なるホスト上のesxi 6.7ゲストです。ネットワークリソースを争う他のゲストは存在しません。

Nload

この画像は1つのファイルが送信されています

基本的に、設定が間違っているか、転送速度をある程度一定に保つために変更できるものがあることを願っています。

ソースのCPU使用率は約10%、宛先では約10%です。奇妙なことに、宛先では、iotopはnfsdから99%のI/O(時々)を示し、ソースは60-80%を示しますIO rsyncから。これらは7200RPM WD赤いドライブです。w

6
driz

残念ながら、あなたができる最悪のことは、NFS全体でrsyncを使用することです。 (またはローカルシステムにマウントされているリモートファイルシステムに対して)これにより、rsyncがわかっているほとんどすべての効率向上がオフになります。

この大量のデータの場合、システム間でデータを転送する最も速い方法の1つは、ターゲットシステムに何が存在しているかを考慮せずにnencrypted接続を介してデータをダンプすることです。

少なくとも部分的なコピーができたら、2つのホスト間でrsyncを使用するのが最善の方法です。これにより、rsyncが各ホストで1つのプロセスを実行して、違いを検討および比較できます。 (rsyncは、同じサイズと変更日を持つファイルを完全にスキップします。他のファイルの場合、クライアントおよびサーバーコンポーネントはローリングチェックサムを実行して、転送する必要があるブロックを決定します。)

  1. 高速ダンプ。この例では、認証も暗号化もまったく使用していません。ただし、圧縮は適用されますが、両方の-zフラグを省略して削除できます。

    これを宛先マシンで実行して、リスニングサーバーを起動します。

    cd /path/to/destination && nc -l 50505 | pax -zrv -pe
    

    ソースマシンでこれを実行して、送信クライアントを起動します。

    cd /path/to/source && pax -wz . | nc destination_server 50505
    

    nc -lの一部のバージョンでは、ポートをフラグ付きで指定する必要がある場合があります(nc -l -p 50505など)。 DebianのOpenBSDバージョン(nc.openbsd/etc/alternativesから/bin/ncにリンク)はサポートしていません。

  2. 転送が遅い。この例では、認証と暗号化を提供するrsyncよりもsshを使用しています。ソースパスの末尾のスラッシュ(/)をお見逃しなく。圧縮が必要ない場合は、-zフラグを省略します。

    rsync -avzP /path/to/source/ destination_server:/path/to/destination
    

Rootとしてdestination_serverにログインできるように、SSH証明書を設定する必要がある場合があります。ハードリンクを処理する必要がある場合は、-Hフラグを追加します。

8
roaima

可能であれば、2つのホスト間で直接rsyncを使用することをお勧めします。 rsyncは、ネットワークを最適化するように構築されているIO増加したディスクIOを犠牲にしてください。NFSファイルシステムでrsyncを使用する場合、ディスクIOはネットワークIOに変換されます。また、rsyncがソースと宛先の両方がローカルであると判断した場合、差分のみを送信する差分アルゴリズムを使用する代わりに、最適化をオフにしてファイル全体を毎回転送します。

ソースと宛先の間でデータの1%のみが異なる5GBファイルがあるとします。

  • ホスト間で転送する場合、rsyncはソースファイルと宛先ファイルをチェックサムし、違いのみを転送します。宛先では、古いファイルとソースからの新しいデータを使用してファイルが再作成され、古いファイルが置き換えられます。
  • ローカルに転送する場合、各ファイルをチェックサムするのは意味がありません。つまり、サンプルファイルに対して2 x 5GBを読み取り、1 x 5GBを書き込む必要があります。ファイル全体モードに切り替えることにより、rsyncは1 x 5GBの読み取りと1 x 5GBの書き込みのみを行う必要があります。ローカルディスクではこれは完全に理にかなっており、1つがNFSの場合、ネットワーク帯域幅は屋根を突き抜けます。

NFSファイルシステムを提供するホストに直接rsyncを使用できる場合、それを実行すると、パフォーマンスが大幅に向上します。

5
wurtel