
負荷の高いサーバーがあり、nginxが利用可能な帯域幅をすべて消費しているため、次のようなエラーが発生し、mysqlサーバー(別のマシンにある)に接続できません。
「認証パケットの読み取り」時に MySQL サーバーへの接続が失われました
mysql トラフィックが常に優先され、パケットがドロップされないように、何らかの Quality of Service を設定したいと考えています。
Centos 7 / RHEL でこれを行う方法はありますか?
あるいは、ポート 80 のトラフィックを、たとえば 900 Mbps に制限/シェーピングするオプションはありますか?
答え1
iptables と TC を使用できます。次のようになります。
iptables -t mangle -A FORWARD ! -s 192.168.xxx.0/24 -d 192.168.xxx.xxx -j MARK --set-mark 1
tc qdisc add dev <eth> root handle 1: cbq bandwidth 100Mbit avpkt 1000 mpu 64
tc class add dev <eth> parent 1:0 classid 1:1 cbq rate 3200Kbit allot 1514 prio 1 avpkt 1000 bounded
tc filter add dev <eth> parent 1:0 protocol ip handle 1 fw flowid 1:1
フィルターはホストの IP アドレスからのものであり、次のように適応する必要があります:
- アプリケーションの TCP ポートを含む iptables 行。
- 各クラスの帯域幅