複数のscpスレッドを同時に実行する


11

複数のscpスレッドを同時に実行する:

バックグラウンド:

サーバーファイルのセットを頻繁にミラーリングしていることがよくあります。これらのサーバーファイルには、何千もの小さな1kb〜3kbファイルが含まれています。すべてのサーバーは1Gbpsポートに接続されており、通常、さまざまなデータセンターに分散しています。

問題:

SCPはこれらの小さなファイルを1つずつ転送します。これには時間がかかり、美しいネットワークリソースを浪費しているように感じます。

解決?:

私にはアイデアがありました。ファイルを等量に分割し、5〜6 scpのスレッドを起動するスクリプトを作成すると、理論的には5〜6倍速く実行できます。しかし、私はLinuxスクリプトの経験はありません!

質問:

  • 上記の問題に対するより良い解決策はありますか?
  • このようなものはすでに存在していますか?
  • そうでない場合、私を始めるか、私を助けてくれる誰かがいますか?
  • 2つまたは3つではない場合、どこでLinuxスクリプトの学習を開始するのに適していますか?bashやその他のように。

回答:


11

私はそれをこのようにします:
tar -cf - /manyfiles | ssh dest.server 'tar -xf - -C /manyfiles'

転送するファイルによっては、tarコマンドで圧縮を有効にすることが理にかなっています。
tar -czf - /manyfiles | ssh dest.server 'tar -xzf - -C /manyfiles'

sshコマンドに(CPUFOURなどの)CPUに適した暗号を選択することも意味があります。 tar -cf - /manyfiles | ssh -c arcfour dest.server 'tar -xf - -C /manyfiles'

または、両方を組み合わせることができますが、実際にはボトルネックが何であるかによって異なります。増分同期を行っている場合は、
明らかrsyncにはるかに高速になります。


10

rsync代わりに使用しますscp。あなたは使用することができますrsyncオーバーsshやすいなどとしてscp、それは「レイテンシー、コストを最小限に抑えるために、ファイル転送のパイプライン」をサポートしています。

ヒント:データが圧縮可能な場合は、圧縮を有効にします。そうでない場合は、無効にしてください。


私はrsyncを使って別の同様の転送を行って、SCPと午前と昨夜一回の転送をした-それはそうですたくさん速いです。しかし、それはまだ一度に一つのファイルを転送しているようだ-任意のアイデアをどのように--include'ingとスクリプトによるディレクトリの束を--exclude'ing(ビヨンドこれを行う複数のスレッドを作成するには、以下を参照してください。sun3.org/archivesを/ 280
2012

帯域幅が限られているため、複数のファイルを同時に転送しても意味がありません。帯域幅が豊富な場合は、このコマンドを考慮しないと思います。多数の小さなファイルを処理する場合、レイテンシコストをなくすことはすでに非常に役立ちました。複数のファイルを同時にコピーできる場合でも、帯域幅が限られているためファイル転送の速度は向上しません。
Joe

1

私は、GNOの提案することについてでしたパラレル(まだあなたの部分にいくつかのスクリプトの作業が必要です)、その後私は(の一部であり、PSCPたpsshのを)。それはあなたのニーズにぴったり合うかもしれません。


1
pssh複数のマシンで同時に動作しているようです。ファイルレベルの並列処理を実装しているとは思いません。
デビッドシュワルツ

私はおそらく具体的であるべきです-私はpscpを意味しました。
Rilindo

1

直接のscpではなく、マルチスレッド転送のオプション(単一ファイルであっても)はbbcp- https: //www2.cisl.ucar.edu/resources/storage-and-file-systems/bbcp です。

データを転送するスレッドの数に-sオプションを使用します。ラグによってスレッドごとのTCPウィンドウサイズが制限されるため、高帯域幅だが遅延のある接続に最適です。


0

おそらく無関係ですが、よりリアルタイムなものが必要な場合は、GlusterFSを試すことができます。うまく機能しますが、小さなファイルを効率的に読み取るには、いくつかの調整が必要です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.