web-dev-qa-db-ja.com

mysqlトラフィックの優先順位付けのためのtcprio qdisc

私は今、数時間tc prioqdiscに苦労しています。 lartcのドキュメント、例、ハウツーを読みましたが、このすべてが私にとっては少し新しく、やや混乱しています:)

これが私のシナリオです。大量のhttpおよびftpトラフィックを処理するいくつかのファイルサーバー。リンクがいっぱいになると、SQLトラフィックが遅くなったり文字化けしたりして、接続エラーやタイムアウトなどが発生することが多いため、mysqlトラフィックに優先順位を付ける必要があります。

これは私がこれまでに持っているものです:

# tc qdisc add dev eth0 root handle 1: prio
# tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dport 22 0xffff flowid 1:1
# tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dport 3306 0xffff flowid 1:1
# tc filter add dev eth0 parent 1: prio 3 protocol all u32 match u32 0 0 flowid 1:3
# tc -s qdisc ls dev eth0
qdisc prio 1: root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
Sent 125836067 bytes 87549 pkt (dropped 0, overlimits 0 requeues 347) 
backlog 0b 0p requeues 347 

私がlartcのドキュメントと間違えない場合、これはsshとmysqlのトラフィックをprioバンド1に入れ、他のすべてをprioバンド3に入れるはずです。ドキュメントによると、prio qdiscにはデフォルトで3つのバンドがあり、低いバンドの方が優先度が高いはずです。

誰かがこれを確認または否定できますか、または他の考えがありますか?動作することを絶対に確信できるようになる前に、本番システムでこれをテストしたくありません。彼らはトラフィックの明確な分離を示していないので、私は統計に延期されています

編集:私はこの構成でさらにいくつかのテストを行い、サーバーでpingを実行し、リンクをロードしました。pingは40ミリ秒から170ミリ秒になります。これを行う:

# tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip protocol 1 0xff flowid 1:1

Pingは40ミリ秒に低下するため、これは実際にはすでに機能している可能性があります:)

edit2:さらにテストを行った後、私は次のことを思いつきました。

tc qdisc add dev eth0 root handle 1: prio
tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dport 22 0xffff flowid 1:1
tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dport 3306 0xffff flowid 1:1
tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip protocol 1 0xff flowid 1:1

「その他のトラフィック」を照合するために使用する可能性のあるもの:

tc filter add dev eth0 protocol ip parent 1: prio 2 u32 match ip src 0/0 flowid 1:2

または

tc filter add dev eth0 parent 1: prio 2 protocol all u32 match u32 0 0 flowid 1:2

しかし、「すべてをキャッチ」フィルターを指定しなくても機能することがわかりました。デフォルトのプリオバンドはすでに低いようです。

2
Niko S P

結論として、帯域幅を制限せずに任意のパラメータに基づいて優先トラフィックを設定する簡単なソリューションを次に示します。

tc qdisc add dev eth0 root handle 1: prio 
tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dport 22 0xffff flowid 1:1
tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dport 3306 0xffff flowid 1:1
tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip protocol 1 0xff flowid 1:1

説明:

  1. 1という名前のprioqdiscを作成します。
  2. ポート22->バンド1に一致するフィルターを追加します
  3. ポート3306->バンド1に一致する別のフィルターを追加します
  4. および別のフィルタ整合プロトコル1(icmp)->バンド1

「u32matchsrc」を使用するか、スポーツまたは任意のプロトコルを指定できます

3
Niko S P

デフォルトのpfifo_fastqdiscは、ToSビットに従うことで、目的の処理をすでに実行できるはずです。したがって、tcをまったくいじることなく、別の解決策は、トラフィックにToSビットを設定するようにsshデーモンとMySqlデーモンを構成することです。

0
Some Guy