目前nginx使用我所有的带宽。 我如何离开一些rsync?
这是一个草图,你需要自己弄清楚所有的细节,但这是应该是可能的:
通过使用两个特定于Linux的内核工具,即cgroups和具有调度策略的QoS子系统,可以实现您想要的function。
你基本上需要的是把nginx和它的子进入一个自己的cgroup,使用QoS的discq调度器,然后可以在net_cls控制器上作用(见这个RedHat文档 ,粗略地描述了net_cls)。 它所做的是在源自套接字的每个数据包上添加一个标签,该套接字是由来自nginx所在的cgroup的PID创build的。
您当然需要为rsync创build相同的cgroup设置。 注意,在调用rsync或设置rsyncd之前,可以先执行所有的cgroups机制。
这个从net_cls附加的“标签”可以在连接到qdisc的filter中用作classid,以将stream量传递给不同的类。 您还需要定义带宽类别,其中包含要分配给两个cgroup的带宽限制,例如nginx为500Mbit / s,rsync为500Mbit / s。 请注意,有关QoS和速率限制或排队TCP的常见警告适用。
该代码将限制端口80,443(HTTP,HTTPS)到最大0.5Mb并突发到0.6Mb。 调整/调整,以适应您的要求。
/sbin/tc qdisc add dev eth0 root handle 1: htb /sbin/tc class add dev eth0 parent 1: classid 1:1 htb rate 1024kbps /sbin/tc class add dev eth0 parent 1:1 classid 1:5 htb rate 512kbps ceil 640kbps prio 1 /sbin/tc class add dev eth0 parent 1:1 classid 1:6 htb rate 512kbps ceil 640kbps prio 0 /sbin/tc filter add dev eth0 parent 1:0 prio 1 protocol ip handle 5 fw flowid 1:5 /sbin/tc filter add dev eth0 parent 1:0 prio 0 protocol ip handle 6 fw flowid 1:6 /sbin/iptables -A OUTPUT -t mangle -p tcp --sport 80 -j MARK --set-mark 5 /sbin/iptables -A OUTPUT -t mangle -p tcp --sport 443 -j MARK --set-mark 6
从http://www.cyberciti.biz/faq/linux-traffic-shaping-using-tc-to-control-http-traffic/