web-dev-qa-db-ja.com

プロセスが使用する帯域幅を制限するにはどうすればよいですか?

ファイルを毎晩バックアップするCentOS 5.7サーバーがあります。バックアップがネットワーク経由で転送されている間、サーバーがホストするさまざまなサイトへの訪問者のパフォーマンスが低下するのではないかと心配しています。

プロセスの最大許容スループットをネットワークインターフェイスに制限することは可能ですか? SSHベースのファイル転送を使用可能な帯域幅の半分だけに制限したいと思います。これはサーバー側またはクライアント側にあります。つまり、接続を開始するクライアントまたは接続を受信するサーバーのいずれかでこれを実行できれば幸いです。

(残念ながら、バックアップ専用のインターフェースを追加することはできません。使用可能なスループットを増やすことはできますが、これは単にネットワーク転送がより速く完了することを意味しますが、それでも接続の総容量を最大にします。)


いくつかの背景

おそらく、いくつかの背景が整っています。後退すると、バックアップ自体を作成するための十分なローカルスペースがないという問題がありました。 SSHFSを入力してください!バックアップは外見上はローカルドライブに保存されるため、Webサーバー自体にはバックアップビットがありません。

なぜそれが重要なのですか?それは由緒あるrsync --bwlimitの使用を無効にするように見えるからです。 rsyncは実際には転送も実行していませんcanバックアップファイルを保存するためのスペースを確保することもできないためです。

「では、バックアップファイルを作成する必要があるのはなぜですか。なぜ、ソースファイルとフォルダだけをrsyncしないのですか?」 「Plesk」という迷惑なものが混在しているためです。これはPleskを便宜的に使用するクライアント向けWebホストです。そのため、Pleskを使用してバックアップを開始します。これは、Pleskがあらゆる種類の特別な魔法をバックアップに追加して、復元手順中にバックアップを非常に安全に使用できるようにするためです。

悲しい顔

44
Wesley

iptablesを使用してパケットをマークし(--pid-owner ...)、次にtcを使用してトラフィックをシェーピングできます。また、「-sid-owner」を使用して、そのプロセスのスレッドと子を含めることができます。

http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html#OWNERMATCH

Match--pid-owner
カーネル2.3、2.4、2.5、2.6
iptables -A OUTPUT -m owner --pid-owner 78
説明この一致は、パケットの原因となったプロセスID(PID)に基づいてパケットを一致させるために使用されます。この一致を使用するのは少し難しいですが、1つの例は、PID 94がHTTPポートからパケットを送信できるようにすることだけです(もちろん、HTTPプロセスがスレッド化されていない場合)。あるいは、特定のデーモンのps出力からPIDを取得して、それにルールを追加する小さなスクリプトを書くこともできます。たとえば、Pid-owner.txtの例に示すようなルールを作成できます。

26

私が発見した1つのオプションは、 trickle を使用することです。

トリクルは、ポータブルな軽量のユーザースペース帯域幅シェーパーです。コラボレーティブモード(トリクルと一緒に)またはスタンドアロンモードで実行できます。

トリクルは、UNIXローダーのプリロードを利用して機能します。基本的に、アプリケーションは、ソケットを介してデータを送受信するために必要な新しいバージョンの機能を提供します。次に、ソケットを介したデータの送受信の遅延に基づいてトラフィックを制限します。トリクルは完全にユーザースペースで実行され、ルート権限を必要としません。

41
Wesley

パイプ(またはstdout)に書き込むことができる場合は、pv(パイプビューア)コマンドをインストールできます。もともとは、パイプを介して転送されたデータの進行状況を表示するために作成されました。

tar cvf - /files/to/backup | pv -L 512k > /your/file/on/sshfs

   -L RATE, --rate-limit RATE
          Limit the transfer to a maximum of RATE  bytes  per  second.   A
          suffix of "k", "m", "g", or "t" can be added to denote kilobytes
          (*1024), megabytes, and so on.
22
hhaamu

同じ理由で、-bwlimit = KBPSオプションを指定してrsyncを使用します。

私たちの1ギガビットイーサネットは、古いSCSI320 DAS RAIDを簡単に破壊できます。基本的に、DOSは、NFSストアに依存する古い製品ボックスです。

7
Magellan

どのようにデータを転送していますか? (ssh上のrsync?scp?sftp?他の何か?)

rsyncを使用すると、帯域幅を制限できます(オプション--bwlimit = KBPSを参照)。 rsync -e ssh --bwlimit ..

または、qdiscまたは同等のものを設定して空想的なレート制限を行うこともできますが、あなたの場合、これは深刻な過剰となると思います。このドキュメントは Linux Advanced Routing and Traffic Control HOWTO にあります。

4
Devdas