15.1. SLA の異なる複数のサイトを動作させる

いくつかのやり方があります。 Apache でもこの機能をモジュールでサポートしていますが、 ここでは Linux を使ってできること、 他のサービスでも同様に適用できることを示します。 これらのコマンドは、この文書の末尾に示す Jamal Hadi の発表から拝借してきたものです。

http, ftp, ストリーミングオーディオを使っている 2 つの顧客があり、 それぞれに限られた量のバンド幅を販売したいとしましょう。 これはサーバ自身で行います。

顧客 A には最大 2 メガビットを、顧客 B には 5 メガビットを割り当てます。 これらの顧客は、サーバに仮想 IP アドレスを作って分離します。

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

それぞれのサーバに適切な IP アドレスを割り当てるのは読者にお任せします。 有名なデーモンは、ほぼ間違いなくこの機能をサポートしています。

まず eth0 に CBQ qdisc をアタッチします。
# 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

ここで 2 つのクラスそれぞれにフィルタを追加します。
##FIXME: この行の意味と動作は? divisor とは?
##FIXME: divisor はハッシュテーブルとバケツの数に何か関係があるようだ -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 に落ちているのか?