私は今、数時間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
しかし、「すべてをキャッチ」フィルターを指定しなくても機能することがわかりました。デフォルトのプリオバンドはすでに低いようです。
結論として、帯域幅を制限せずに任意のパラメータに基づいて優先トラフィックを設定する簡単なソリューションを次に示します。
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
説明:
「u32matchsrc」を使用するか、スポーツまたは任意のプロトコルを指定できます
デフォルトのpfifo_fastqdiscは、ToSビットに従うことで、目的の処理をすでに実行できるはずです。したがって、tcをまったくいじることなく、別の解決策は、トラフィックにToSビットを設定するようにsshデーモンとMySqlデーモンを構成することです。