5. Balanceo de Carga con LVS

Daniel Eugenin M. -

Instalación de paquetes:

yum install piranha -y

 

Consideraciones:

- Tenemos 2 servidores, con una única tarjeta de red:

nodo1.domain.com -> 192.168.5.82/16

nodo2.domain.com -> 192.168.5.83/16

Virtual IP (Ip Flotante) -> 192.168.5.81

- Sacamos todos los servicios del cluster y lo dejamos "limpio".

- De preferencia: deshabilitar los servicios cman y rgmanager:

chkconfig cman off
chkconfig rgmanager off

- Dejaremos el servicio httpd corriendo en ambos nodos

service httpd start
chkconfig httpd on

 

Inicio

 

1) * Se levanta la interfaz web de configuración:

service piranha-gui start

Esto levantará un sitio web en el puerto 3636.

 

2) * Seteamos el password del administrador de piranha:

piranha-passwd

 

3)  * Ingreso a la interfaz web de configuración: http://IP:3636

Captura_de_pantalla_2012-12-12_a_la_s__18.44.56.png

 

4) * En sección "Global Settings", definir la IP del nodo Primario

Captura_de_pantalla_2012-12-12_a_la_s__18.46.24.png

 

* Explicación de las diferencias entre NAT, Direct Routing y Tunneling, y sus problemas de ARP:

http://www.ibiblio.org/pub/linux/docs/LuCaS/Manuales-LuCAS/doc-curso-salamanca-clustering/html/ch03s04.html

http://www.linuxvirtualserver.org/how.html

 

 

5) * En sección "Redundancy" configuramos la IP del nodo secundario:

Captura_de_pantalla_2012-12-12_a_la_s__18.48.22.png

 

 6) * En sección "Virtual Servers" agregamos uno nuevo:

Captura_de_pantalla_2012-12-12_a_la_s__18.50.26.png

 

7) * Lo editamos:

Captura_de_pantalla_2012-12-12_a_la_s__18.52.14.png

 

* Nota: una explicación de todos los parámetros que posee se puede encontrar en:

man lvs.cf

 

 

8) * Sección "Real Server", se agregan los 2 nodos:

 Captura_de_pantalla_2012-12-12_a_la_s__18.53.37.png

 

 Quedando así:

Captura_de_pantalla_2012-12-12_a_la_s__18.54.31.png

 

9) * Activarlos:

Captura_de_pantalla_2012-12-12_a_la_s__18.55.06.png

 

10) * Sección "Monitoring Scripts"

Captura_de_pantalla_2012-12-12_a_la_s__18.57.35.png

 

Nota: el Sending Program es:   /etc/sysconfig/ha/check_apache.sh %h

 

11) Crear el archivo: /etc/sysconfig/ha/check_apache.sh

#!/bin/sh 
 # This script is functionally equivilent to the
 # normal send string 'GET / HTTP/1.0\r\n\r\n'
 # It's simply put here as an example of how
 # $1 passing is used in a shell script
 # Makes use of nc - netcat (nc-1.10-9)
    
 TEST=`(echo "GET / HTTP/1.0\r\n\r\n" | nc $1 80) | grep -c HTTP`
 
 if [ $TEST == "1" ]; then 
         echo "OK" 
 else 
         echo "FAIL" 
 fi

 

Notas: debe estar con permisos de ejecución, y se debe copiar a ambos nodos.

 

12) Darle permisos de ejecución y copiarlo al otro nodo

chmod 755 /etc/sysconfig/ha/check_apache.sh
scp /etc/sysconfig/ha/check_apache.sh nodo2:/etc/sysconfig/ha/

 

 

13) * Volver a sección "Virtual servers" y activarlo:

Captura_de_pantalla_2012-12-12_a_la_s__19.00.18.png

 

14) * Modificamos el /etc/sysctl.conf

net.ipv4.ip_forward = 1

 

Y ejecutamos: 

sysctl -p

 

15) * Levantamos el servicio en ambos nodos:

service pulse start

 

Nota: debemos tener arriba el servicio httpd en ambos nodos ahora.

 

16) * Monitoreo:

Captura_de_pantalla_2012-12-12_a_la_s__19.15.07.png

 

 

17) * Por comandos:

Captura_de_pantalla_2012-12-12_a_la_s__19.16.19.png

 

18) * Verificación: ahora abro un browser y me conecto a la IP Virtual: 192.168.5.81

Nota: observaremos que una conexión funciona y la otra falla... (round robin)

 

Captura_de_pantalla_2012-12-12_a_la_s__19.18.14.png

 

Archivo final /etc/sysconfig/ha/lvs.cf:

serial_no = 35
primary = 192.168.5.82
service = lvs
backup_active = 1
backup = 192.168.5.83
heartbeat = 1
heartbeat_port = 539
keepalive = 6
deadtime = 18
network = direct
debug_level = NONE
monitor_links = 1
syncdaemon = 1
virtual Apache {
active = 1
address = 192.168.5.81 eth0:1
vip_nmask = 255.255.0.0
port = 80
expect = "OK"
use_regex = 0
send_program = "/etc/sysconfig/ha/check_apache.sh %h"
load_monitor = none
scheduler = rr
protocol = tcp
timeout = 6
reentry = 15
quiesce_server = 0
server nodo1.domain.com {
address = 192.168.5.82
active = 1
weight = 1
}
server nodo2.domain.com {
address = 192.168.5.83
active = 1
weight = 1
}
}

 

 

 

Trabajando con ARP Tables para el forwardeo y respuesta correcta del otro nodo:

 

19) * Instalamos el paquete: arptables_jf

yum install arptables_jf -y

 

20) * Ejecutamos en nodo 1:

 arptables -A IN -d 192.168.5.81 -j DROP
 arptables -A OUT -d 192.168.5.81 -j mangle --mangle-ip-s 192.168.5.83
 service arptables_jf save
 chkconfig arptables_jf on

 

21) * Ejecutamos en nodo 2:

 arptables -A IN -d 192.168.5.81 -j DROP
 arptables -A OUT -d 192.168.5.81 -j mangle --mangle-ip-s 192.168.5.82
 service arptables_jf save
 chkconfig arptables_jf on

 

22) * En ambos nodos agregamos la siguiente línea al archivo /etc/rc.local

ifconfig eth0:1 192.168.5.81 netmask 255.255.0.0 broadcast 192.168.255.255 up

 

23) * Ejecutamos en ambos nodos:

/etc/rc.local

 

24) * Modificamos la sección "start" del servicio pulse: /etc/init.d/pulse

start)
echo -n "Starting pulse: "
arptables -F
delay
daemon pulse $OPTIONS
RETVAL=$?

 

Y agregamos en la sección "stop" del servicio pulse: /etc/init.d/pulse

stop)
echo -n "Shutting down pulse: "
killproc pulse
RETVAL=$?
/etc/rc.local
service arptables_jf start
echo

 

25) * Reiniciamos el servicio pulse en ambos nodos:

service pulse restart

 

26) * Verificamos en qué nodo quedó funcionando como master (nodo1 o nodo2):

Captura_de_pantalla_2012-12-12_a_la_s__19.33.17.png

 

27) * En el nodo que quedó como slave, volvemos a ejecutar:

/etc/rc.local
service arptables_jf start

 

* Y ahora sí el servicio se está balanceando y respondiendo ambos nodos en un round robin.

 

 

Otras pruebas:

 

28) * Reiniciemos el nodo que tenía el control, y se verán en los logs del otro nodo lo siguiente:

Captura_de_pantalla_2012-12-12_a_la_s__19.38.13.png

 

Ahora se está balanceando a un sólo nodo:

Captura_de_pantalla_2012-12-12_a_la_s__19.38.49.png

 

Cuando vuelve a subir el otro nodo:

Captura_de_pantalla_2012-12-12_a_la_s__19.39.47.png


Agregándolo al Cluster


29) *Ahora agregamos este servicio "pulse" al cluster para que se preocupe de las tablas ARP:

 

Captura_de_pantalla_2012-12-12_a_la_s__19.44.47.png

 

Captura_de_pantalla_2012-12-12_a_la_s__19.45.09.png

 

30) * Ejecutamos en ambos nodos:

Captura_de_pantalla_2012-12-12_a_la_s__19.47.12.png

 

31) * Levantamos en ambos nodos:

Captura_de_pantalla_2012-12-12_a_la_s__19.49.09.png


32) * Verificamos en los logs:

Captura_de_pantalla_2012-12-12_a_la_s__19.50.47.png

 

33) * Ahora el servicio de balanceo está controlado por el cluster y se controlan las tablas ARP al volver a tomar el control.

Captura_de_pantalla_2012-12-12_a_la_s__19.52.17.png


Y se comprueba que está balanceando en ambos nodos......

 

34) Prueba: Reiniciamos el nodo que tiene el control, y el otro nodo levantará el balanceo y responderá sólo él...

Captura_de_pantalla_2012-12-12_a_la_s__19.54.19.png

 

Captura_de_pantalla_2012-12-12_a_la_s__19.54.56.png

 

 


Otras referencias:

http://kloneton.wordpress.com/2010/07/01/configurar-lvs-piranha-en-centos-5-tutorial-en-espanol/

https://access.redhat.com/knowledge/docs/es-ES/Red_Hat_Enterprise_Linux/6/html/Virtual_Server_Administration/

http://www.redhat.com/support/resources/howto/piranha/

http://www.ibiblio.org/pub/linux/docs/LuCaS/Manuales-LuCAS/doc-curso-salamanca-clustering/html/ch03s04.html

 

 

0 Comentarios

Inicie sesión para dejar un comentario.
Tecnología de Zendesk