NFSを介したrsync - 速度が一貫していない

NFSを介したrsync - 速度が一貫していない

ギガビットLANで約9TBのデータを転送しています。これをできるだけ早く完了することを望むように、ソースの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を見てみると、単一ファイルの速度が最大900 MBpsまで急増し、KBpsの範囲の数に落ちて再バックアップされることがわかります。以下は、転送がファイルの途中で停止しているように見えることを確認できるnloadのグラフです。これらのファイルのサイズは通常5〜6GBです。 MTUは9000です。スイッチは適切なバックプレーン速度を備えたcisco 3750xです。これらは2つの異なるホストのesxi 6.7ゲストです。ネットワークリソースを置いて競う他のゲストはありません。

ジム

画像は転送中のファイルです

デフォルトでは、設定の1つが間違っているか、転送速度を一定に保つためにいくつかの設定を変更できることを願っています。

CPU使用率はソースで約10%、ターゲットで約10%です。奇妙なことに、ターゲットでは、iotopはnfsdで99%のI / Oを示し、時々ソースではrsyncで60〜80%のIOを表示します。 7200RPM WDレッドハードドライブ。勝つ

答え1

残念ながら起こりうる最悪の状況は、rsyncNFS全体でこれを使用することです。 (またはローカルシステムにマウントされたリモートファイルシステム。)これにより、既知のrsync効率向上機能がほぼすべてオフになります。

データが多すぎる場合、システム間でデータを転送する最速の方法の1つは、データを別のシステムにダンプすることです。暗号化されていないターゲットシステムにすでに何があるかに関係なく接続します。

少なくとも部分的なレプリカがある場合、最良のオプションはrsync2つのホスト間でそれらを使用することです。これにより、rsync各ホストで 1 つのプロセスを実行して、相違点を考慮して比較できます。 (rsyncサイズと変更日が同じファイルは完全にスキップされます。他のファイルの場合、クライアントとサーバーコンポーネントはローリングチェックサムを実行して、まだ転送するブロックを決定します。)

  1. クイックダンプ。この例では、認証や暗号化をまったく使用しません。ただし、圧縮が適用され、-z次の2つのフラグを省略して圧縮を削除できます。

    受信サーバーを起動するには、ターゲットマシンで次のコマンドを実行します。

    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. 転送速度が遅くなります。この例では、認証と暗号化を提供するrsyncover を使用します。ソースパスの末尾のスラッシュ()をssh見逃さないでください。圧縮したくない場合は、このフラグを省略してください。/-z

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

Destination_server へのルートログインを許可するには、SSH 証明書を設定する必要があります。-Hハードリンクを処理する必要がある場合は、このフラグを追加してください。

答え2

可能であれば、2 つのホスト間で直接 rsync を使用するのが最善です。 rsyncは、増加したディスクIOを犠牲にしてネットワークIOを最適化するように構築されています。 NFSファイルシステムでrsyncを使用すると、ディスクIOはネットワークIOに変換されるため、これは非常に最適なソリューションです。また、rsyncがソースとターゲットの両方をローカルと見なしている場合は、最適化をオフにして差分のみを送信する差分比較アルゴリズムを使用するのではなく、毎回ファイル全体を転送します。

5GBファイルがあり、ソースとターゲットの間のデータ差が1%しかないとします。

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

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

関連情報