Esta sección contiene "recetas" que pueden ayudarle a resolver problemas. Aún así, un recetario no reemplaza al conocimiento, de manera que intente comprender qué es lo que sucede.
N del T: SLA es Service Level Agreement. Se refiere a clientes que han firmado por tener diferentes servicios.
Esto se puede hacer de varias maneras. Apache tiene soporte para esto en un módulo, pero mostraremos cómo puede hacerse con Linux, y por tanto con otros servicios. Estas órdenes las robamos de una presentación de Jamal Hadi a la que se hace referencia más adelante.
Digamos que tenemos dos clientes, con http, ftp y streaming de sonido, y queremos venderle una cantidad limitada de ancho de banda. Lo haremos en el propio servidor.
El cliente A debería tener al menos 2 megabits, el cliente B ha pagado por 5 megabits. Separamos nuestros clientes creando IP virtuales en nuestro servidor.
# ip address add 188.177.166.1 dev eth0 # ip address add 188.177.166.2 dev eth0
Es su responsabilidad asociar los diferentes servidores a la dirección IP correcta. Todos los demonios populares soportan esto.
Primero asociamos una qdisc CBQ a eth0:
# tc qdisc add dev eth0 root handle 1: cbq bandwidth 10Mbit cell 8 avpkt 1000 \ mpu 64
Entonces creamos clases para nuestros clientes:
# 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
Luego añadimos filtros para nuestras dos clases:
##FIXME: ¿Por qué esta línea, qué hace?, ¿qué es un divisor?: ##FIXME: Un divisor tiene algo que ver con una tabla hash, y el número de # 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
Y ya está.
FIXME: ¿por qué no usar el token bucket filter? ¿hay alguna pfifo_fast por defecto de respaldo en algún lado?