Capítulo 15. Recetario

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.

15.1. Llevar varios sitios con diferentes SLA

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?