web-dev-qa-db-ja.com

rsyncのパフォーマンスとスループットを最大化-直接接続されたギガビットサーバー

CentOS 6.5を実行している2台のDell R515サーバーがあり、それぞれのBroadcom NICの1つが他に直接接続されています。 ssh経由でrsyncを使用して、ペアのメインサーバーからセカンダリに毎晩バックアップをプッシュする直接リンクを使用します。トラフィックを監視すると、スループットが約2MBpsであることがわかります。これは、ギガビットポートで期待するよりもはるかに低い値です。両側でMTUを9000に設定しましたが、何も変更されていないようです。

利用可能な最大スループットに到達するための推奨される設定と最適化のセットはありますか?さらに、ssh(またはNFSのみ)を介してrsyncを使用して数百万のファイル(約6 TBの小さなファイル-巨大なZimbraメールストア)をコピーしているので、私が探している最適化は、特定のユースケースに対してより具体的にする必要があるかもしれません。

それが重要な場合、私は両側でext4を使用しています

ありがとう

編集:私は次のrsyncオプションを使用して、非常によく似た結果が得られました。

rsync -rtvu --delete source_folder/ destination_folder/

rsync -avHK --delete --backup --backup-dir=$BACKUPDIR source_folder/ destination_folder/

現在、同じダイレクトケーブルリンクを介して、NFSエクスポートにcpを使用すると、同じレベルのパフォーマンスの低下が見られます。

EDIT2:同期が終了した後、iperfを実行すると、パフォーマンスは約990Mビット/秒であることがわかりました。速度が遅いのは、実際に使用されているデータセットが原因でした。

28
dyasny

ファイル数とSSH暗号化オーバーヘッドが最大の障壁である可能性があります。このような転送では、ワイヤースピードは表示されません。

改善するオプションは次のとおりです。

  • より安価な暗号化アルゴリズム(-e "ssh -c arcfour"など)でrsync + SSHを使用する
  • HPN-SSH のようなものでSSHトランスポートを介した暗号化を完全に排除します。
  • ブロックベースの転送。スナップショット、ddZFSスナップショットの送受信 など.
  • これが1回限りの転送またはまれな転送である場合は、tar、netcat(nc)、 mbuffer またはいくつかの組み合わせを使用します。
  • CentOSを確認してください tuned-adm設定
  • ファイルシステムのマウントからatimeを削除します。他のファイルシステムのマウントオプションを調べる。
  • NIC送信/受信バッファー。
  • rsyncコマンドのチューニング。 -W、ファイル全体のオプションはここで意味がありますか?圧縮は有効ですか?
  • 転送のタイプ(SSD、スピンドル数、RAIDコントローラーキャッシュ)に合わせてストレージサブシステムを最適化します。
25
ewwhite

おそらくご存じのように、多くの小さなファイル(MailDir形式などを使用するメールボックス)をコピーすることは、高帯域幅インターフェイスを利用するための最良のオプションではありません。 SSHはおそらく、そのための最良のトランスポートプロトコルでもありません。セカンダリホストに送信する前に、tarを使用してソースホストにtarballを作成してみます。

tar c /var/mail | ssh root@secondary-Host 'tar x -C /var/backups'

増分バックアップが必要な場合は、-g tarのオプション。それでもthrouputを最大化する必要がある場合は、sshの代わりにnetcatを使用してみてください。

4
alxgomz

要因をばらばらにしてみてください。

  • CPU(例:ループバックを介してパイプされた/ dev/zeroのdd)
  • ディスクI/O(例:ddのlarge catにパイプされたファイル>/dev/null [短絡を防ぐためにパイプされた])
  • 物理ネットワークI/O(例:ddが他のマシンにパイプ接続)
  • 等.

独立してテストします。

Broadcomドライバーでいくつかの悪い経験をしたので、最初の提案は、使用可能なネットワーク帯域幅をdd if=/dev/zero bs=1m count=10k | rsh backup_Host cat \> /dev/nullでテストすることです。

1
Scott Leadley