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
4) * En sección "Global Settings", definir la IP del nodo Primario
* 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:
6) * En sección "Virtual Servers" agregamos uno nuevo:
7) * Lo editamos:
* 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:
Quedando así:
9) * Activarlos:
10) * Sección "Monitoring Scripts"
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:
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:
17) * Por comandos:
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)
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):
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:
Ahora se está balanceando a un sólo nodo:
Cuando vuelve a subir el otro nodo:
Agregándolo al Cluster
29) *Ahora agregamos este servicio "pulse" al cluster para que se preocupe de las tablas ARP:
30) * Ejecutamos en ambos nodos:
31) * Levantamos en ambos nodos:
32) * Verificamos en los logs:
33) * Ahora el servicio de balanceo está controlado por el cluster y se controlan las tablas ARP al volver a tomar el control.
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...
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