Linux Advanced Routing & Traffic Control HOWTO
Prev | Chapter 15. Cookbook | Next

# 15.1. Running multiple sites with different SLAs

You can do this in several ways. Apache has some support for this with a module, but we'll show how Linux can do this for you, and do so for other services as well. These commands are stolen from a presentation by Jamal Hadi that's referenced below.

Let's say we have two customers, with http, ftp and streaming audio, and we want to sell them a limited amount of bandwidth. We do so on the server itself.

Customer A should have at most 2 megabits, customer B has paid for 5 megabits. We separate our customers by creating virtual IP addresses on our server.

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

It is up to you to attach the different servers to the right IP address. All popular daemons have support for this.

We first attach a CBQ qdisc to eth0:

    # tc qdisc add dev eth0 root handle 1: cbq bandwidth 10Mbit cell 8 avpkt 1000 \
      mpu 64

We then create classes for our customers:

    # 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

Then we add filters for our two classes:

    ##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

And we're done.

FIXME: why no token bucket filter? is there a default pfifo_fast fallback somewhere?

Prev | Home | Next
Cookbook | Up | Protecting your host from SYN floods