1、 实现原理:
Linux内核版本2.4以上,就开始支持网络传输带宽控制(Traffic Contol),可以控制某个网卡的包发送延迟时间和带宽分配。
实现对网络下载速率的控制可以直接通过tc命令,限制下载网卡的下载速率。
由于tc只能控制网卡发送的速率,所以在对网络上传速率进行控制时则需要变相实现:
2、 实现步骤(假设应用监听lo卡监听地址为127.0.0.1,Haproxy监听eth0网卡监听地址为10.20.16.73):
下载速率限制
a) 首先删除lo卡上原有的网络控制策略
tc qdisc del dev lo root
b) 然后添加一个qdisc:
tc qdisc add dev lo root handle 1: htb r2q 1
c) 再添加一个控制类,控制分配带宽为1Mbit,最高速率为1Mbit:
tc class add dev lo parent 1: classid 1:1 htb rate 1Mbitceil 1Mbit
d) 最后为lo卡再添加一个筛选器,限制指向10.20.16.73的带宽:
tc filter add dev lo parent 1: protocol ip prio 16 u32match ip dst 10.20.16.73 flowid 1:1
上传速率限制
e) 首先删除eth0卡上原有的网络控制策略
tc qdisc del dev lo root
f) 然后添加一个qdisc:
tc qdisc add dev lo root handle 1: htb r2q 1
g) 再添加一个控制类,控制分配带宽为1Mbit,最高速率为1Mbit:
tc class add dev lo parent 1: classid 1:1 htb rate 1Mbitceil 1Mbit
h) 最后为lo卡再添加一个筛选器,限制指向127.0.0.1的带宽:
tc filter add dev lo parent 1: protocol ip prio 16 u32match ip dst 127.0.0.1 flowid 1:1