Table of Contents

LVS

Linux Virtual Server load balancer layer 4

Escenario

^ IP ^ NIC ^ Nota ^
| 10.0.0.25 | eth2 | Director. Es el balanceador de carga |
| 10.0.0.4 | eth2 | Real Server 1 |
| 10.0.0.5 | eth3 | Real Server 2 |
| 10.0.0.16 | Da igual | Cliente |

Queremos:

10.0.0.16 → 10.0.0.25 → 10.0.0.4 o 10.0.0.5

Nota: todas las maquinas estan en la misma red

Instalación y configuración inicial en el director (balanceador de carga)

1. En el director (balanceador de carga)

sudo aptituda update; sudo aptitude install ipvsadm

2. Le asignamos la IP virtual al director (10.0.0.201):

 sudo ifconfig eth2:0 10.0.0.201 netmask 255.255.0.0 broadcast 10.0.255.255

Notas:

-El comando tiene en cuenta la interfaz (eth) adecuada
-Esa IP sera asignada posteriormente a los real servers

3. Crear el servicio, por ejemplo TCP 11111, con la IP virtual del paso 2:

sudo ipvsadm -A -t 10.0.0.201:11111 -s rr

4. Anyadimos real servers al servicio:

sudo ipvsadm -a -t 10.0.0.201:11111 -r 10.0.0.5:11111 
sudo ipvsadm -a -t 10.0.0.201:11111 -r 10.0.0.4:11111 

Configuración de los real servers

IMPORTANTE: los Real servers tienen que ignorar las peticiones ARP en las interfaces de red:

http://kb.linuxvirtualserver.org/wiki/Using_arp_announce/arp_ignore_to_disable_ARP

TODO: Hay que ver que consecuencias tiene eso a nivel de resolucion de nombres etc…

1. Ignoramos las peticiones ARP:

sudo vim.tiny /etc/sysctl.conf

Y le anyadimos las siguientes lineas (ajustar interfaz eth):

net.ipv4.conf.eth2.arp_ignore = 1
net.ipv4.conf.eth2.arp_announce = 2

2. Aplicar los cambios:

sudo sysctl -p

net.ipv4.conf.eth2.arp_ignore = 1
net.ipv4.conf.eth2.arp_announce = 2

3. Le asignamos la misma IP virtual del director (10.0.0.201) a la interfaz lo:

sudo ifconfig lo:0 10.0.0.201 netmask 255.255.255.255

4. Poner a escuchar en el puerto TCP 11111:

nc -l -p 11111

Probar

1. Desde el cliente (10.0.0.16):

telnet 10.0.0.201 11111

Teclear algo ('aaaaa'), debe aparecer en uno de los dos real servers (10.0.0.4 o 10.0.5)

2. En el cliente donde aparezcan las letras ('aaaaa') cancelar la escucha en el puerto TCP 11111:

CTRL+c

3. Desde el cliente (10.0.0.16):

telnet 10.0.0.201 11111

Teclear algo ('aaaaa'), debe aparecer en el otro real server (10.0.0.4 o 10.0.5)

Errores

Si el paso 3 falla, hacer un flush de la tabla arp del cliente (10.0.0.16):

1. Resolver la IP virtual:

nslookup 10.0.0.201

En mi caso:

balancer2.dev.jj.com

2. Hacer el flush de esa direccion:

sudo arp -nd balancer2.dev.jj.com

3. Comprobar:

sudo arp -a | grep balancer2.dev.jj.com
balancer2.dev.jj.com (10.0.0.201) at <incomplete> on eth2