如何为 rsync 预留带宽?

如何为 rsync 预留带宽?

目前 nginx 占用了我所有的带宽。我该如何为 rsync 留出一些带宽?

答案1

此代码将限制端口 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/

答案2

这是一个草图,你需要自己弄清楚所有的细节,但它应该是这样的:

cgroups您需要做的就是使用两个 Linux 特定的内核工具,即QoS子系统及其调度策略来实现。

你基本上需要将 nginx 及其子节点放入自己的 cgroup,discq然后使用 QoS 中的调度程序来操作net_cls控制器(参见这个 RedHat 文档这大致描述了 net_cls。它的作用是向每个来自套接字的数据包附加一个标签,该套接字由来自 nginx 所在的 cgroup 的 PID 创建。

当然,您需要为 rsync 创建相同的 cgroup 设置。请确保在调用 rsync 或相应地设置 rsyncd 之前,您可以完成所有 cgroup 机制。

然后,可以从 net_cls 附加的这个“标签”用作附加到 qdisc 的过滤器中的 classid,以将流量传递到不同的类别。您还需要定义带宽类别,其中包含要分配给两个 cgroup 的带宽限制,例如 nginx 的上限为 500Mbit/s,rsync 的上限为 500Mbit/s。请注意,适用有关 QoS 和速率限制或排队 TCP 的常见警告。

相关内容