15.1. 使用不同 SLA 运行多个站点

您可以通过几种方式做到这一点。Apache 通过一个模块对此提供一些支持,但我们将展示 Linux 如何为您做到这一点,并为其他服务也这样做。这些命令是从 Jamal Hadi 的演示文稿中借鉴的,该演示文稿在下面被引用。

假设我们有两个客户,他们有 http、ftp 和流媒体音频,我们想向他们出售有限的带宽。我们在服务器本身上这样做。

客户 A 应该最多有 2 兆比特,客户 B 支付了 5 兆比特。我们通过在服务器上创建虚拟 IP 地址来分隔我们的客户。

# ip address add 188.177.166.1 dev eth0
# ip address add 188.177.166.2 dev eth0

由您来将不同的服务器连接到正确的 IP 地址。所有流行的守护进程都支持这一点。

我们首先将 CBQ qdisc 附加到 eth0
# tc qdisc add dev eth0 root handle 1: cbq bandwidth 10Mbit cell 8 avpkt 1000 \
  mpu 64

然后我们为我们的客户创建类

# tc class add dev eth0 parent 1:0 classid 1:1 cbq bandwidth 10Mbit rate \
  2MBit avpkt 1000 prio 5 bounded isolated allot 1514 weight 1 maxburst 21
# tc class add dev eth0 parent 1:0 classid 1:2 cbq bandwidth 10Mbit rate \
  5Mbit avpkt 1000 prio 5 bounded isolated allot 1514 weight 1 maxburst 21

然后我们为我们的两个类添加过滤器
##FIXME: Why this line, what does it do?, what is a divisor?:
##FIXME: A divisor has something to do with a hash table, and the number of
##       buckets - ahu
# tc filter add dev eth0 parent 1:0 protocol ip prio 5 handle 1: u32 divisor 1
# tc filter add dev eth0 parent 1:0 prio 5 u32 match ip src 188.177.166.1
  flowid 1:1
# tc filter add dev eth0 parent 1:0 prio 5 u32 match ip src 188.177.166.2
  flowid 1:2

我们就完成了。

FIXME:为什么没有令牌桶过滤器?是否有默认的 pfifo_fast 回退?