Linux – UCARP

por | 11 noviembre, 2010

UCARP es un sistema de redundancia que permite tener una dirección IP virtual flotante entre varias máquinas. Está basado en CARP (Common Address Redundancy Protocol)

Características:

Bajo uso de ancho de banda
Mensajería encriptada entre hosts
Multiplataforma
Permite usar interfaces en banda (no necesita interfaces dedicados entre los host redundantes)

Mientras CARP está agregado al kernel, UCARP no.

Funcionamiento:

Hay un host actuando como Master, el que posee la IP de servicio, el cual envía regularmente mensajes (advertisements) al resto del grupo indicando que está vivo.

Si el Master deja de funcionar, deja de enviar los advertisements a resto del grupo. Si el grupo no recibe los advertisements durante un periodo de tiempo determinado, dan al master como fuera de servicio y uno de ellos levanta la IP de servicio en su interfaz.

A diferencia de otros mecanismos parecidos:

UCARP posee su propia mensajería, no se basa en ping, arping, etc.
Cada IP virtual define a un grupo que la usa. Cada grupo puede ser configurado con una password de seguridad.

En realidad UCARP lo que hace es que ejecuta un script cuando el equipo se convierte en master y otro script cuando el equipo pasa a ser backup. En estos stripts es donde indicamos que lo que se tiene que hacer es levantar una dirección IP o anularla. Estos scripts pueden ser por ejemplo:

Por defecto, si no se especifica en línea de comandos, los scripts buscados son:

/etc/vip-up.sh

y

/etc/vip-down.sh

Por ejemplo para gestionar una dirección IP flotante junto con el servicio Web Apache estos scripts podrían ser:

#!/bin/bash
#/sbin/ifconfig eth0:1 192.168.100.20/24 up
/sbin/ip addr add 10.1.1.252/24 dev eth0
/etc/init.d/apache start
#!/bin/bash
#/sbin/ifconfig eth0:1 down
/sbin/ip addr del 10.1.1.252/24 dev eth0
/etc/init.d/apache stop #

Los podemos crear directamente con “sudo nano /etc/vip-up.sh” y “sudo nano /etc/vip-down.sh” repectivamente.

Estos ficheros deben ser ejecutables:

chmod +x /etc/vip-up.sh /etc/vip-down.sh

Evidentemente en estos scripts podemos incluir lo que queramos, no sólo gestionar una IP, podemos levantar cualquier servicio, enviar mails, guardar logs, etc.

Instalación:
En sistemas basados en Debian:

# apt-get install ucarp
También se pueden bajar los fuentes de # apt-get install ucarp y compilarlo.
Configuración:

Una vez instalado, dispondremos del comando ucarp para configurarlo al vuelo:
ucarp [-i, –interface=INTERFACE] [-s, –srcip=IPADDRESS]
[-v, –vhid=VHID] [-p, –pass=PASSWORD] [-o, –passfile=PASSFILE]
[-P, –preempt] [-n, –neutral] [-a, –addr=IPADDR] [-h, –help]
[-b, –advbase=SECS] [-k, –advskew=SKEW] [-u, –upscript=SCRIPT]
[-d, –downscript=SCRIPT] [-r, –deadratio=RATIO] [-z, –shutdown]
[-B, –daemonize] [-f, –facility=FACILITY] [-x, –xparam PARAM] [-S, –ignoreifstate]
Las opciones son:
-i INTERFACE
–interface=INTERFACE Interfaz de red a usar.
-s IPADDRESS
–srcip=IPADDRESS IP real asociada al interfazce.
-v VHID
–vhid=VHID Identificación id del servidor virtual.
-p PASSWORD
–pass=PASSWORD Password compartida (se encriptará antes del envío).
-o PASSFILE
–passfile=PASSFILE Archivo a leer el password, debe contenerla en la primera línea.
-P
–preempt Activa failover preventivo. Se asume que se es master inmediatamente.
-n
–neutral Cuando el estado inicial es de backup, en el arranque no ejecuta el script de downscript.
-a IPADDRESS
–addr=IPADDRESS Dirección IP virtual del servidor.
-h
–help Visualiza ayuda.
-b SECONDS
–advbase=SECONDS Intervalo en segundos para los advertisements. Por defecto 1 seg.
-k SKEW
–advskew=SKEW “Cortar” los advertisements durante un tiempo de 1 a 255 segundos (por defecto 0).
-u COMMAND
–upscript=COMMAND Se ejecuta COMMAND después que el servidor se convierte en master.
-d COMMAND
–downscript=COMMAND Se ejecuta COMMAND después de que el servidor comunique que pasa a estado de backup.
-r RATIO
–deadratio=RATIO Tiempo que el backup espera sin respuesta del master antes de considerarlo muerto.
-z
–shutdown Causa que el comando especificado con la opción –d sea invocado cuando cuando se hace shutdown de Ucart.
-B
–daemonize Hace que Ucart se ejecute en segundo plano como un demonio, liberando el Terminal desde donde se invoca.
-f
–facility Configura la facilidad syslog, por defecto en modo daemon.
-x PARAMETER
–xparam=PARAMETER Permite especificar un parámetro extra a los scripts upscript y downscript.
-S
–ignoreifstate Ignora cables deconectados. Útil cuando los nodos están conectados por un cable cruzado. Sin esta opción el master pasará a backup cuando el otro nodo esté apagado como si no tuviera link.
Ejemplos:

Host 1 actuando como Master:

IP real: 192.168.1.10
IP virtual: 192.168.1.1
Password: miclave
Id del grupo: 10
Strip de up: /etc/vip-up.sh
Scirpt de down: /etc/vip-down.sh

ucarp -i eth0 -s 192.168.1.10 -v 10 -p miclave -a 192.168.1.1 \
-u /etc/vip-up.sh -d /etc/vip-down.sh -P
Host 2 actuando como Backup:

IP real: 192.168.1.11
IP virtual: 192.168.1.1
Password: miclave
Id del grupo: 10
Strip de up: /etc/vip-up.sh
Scirpt de down: /etc/vip-down.sh

ucarp -i eth0 -s 192.168.1.11 -v 10 -p miclave -a 192.168.1.1 \
-u /etc/vip-up.sh -d /etc/vip-down.sh

Otro ejemplo, el master siempre se erigirá como master:
Master:

# ucarp -i eth2 -s 192.168.0.125 -v 10 -p miclave -a 192.168.0.233 -u /etc/vip-up.sh -d /etc/vip-down.sh -b 1 -P
Backup:

# ucarp -i eth0 -s 192.168.0.26 -v 10 -p miclave -a 192.168.0.233 -u /etc/vip-up.sh -d /etc/vip-down.sh -b 2

Funcionamiento:

Cuando ucarp se ejecuta empieza a funcionar como backup y escucha en la red si hay otro master. Si se sobrepasa tres veces el intervalo definido para los advertisements (según la opción –b más un tiempo de escucha) sin recibir respuesta de un master, el nodo para a ser master.

En la transición de backup a master:

Se ejecuta el strip para asignar dirección IP virtual.
Se envían paquetes ARP gratuitos para identificarse con la IP ante los swtches. Esto es para que los swiyches actualicen sus tablas ARP con la nueva MAC asociada a la dirección IP flotante.
Se continúan enviando paquetes CARP (los advertisements de ucarp) a la red a intervalos.

En la transición de master a backup:

Se ejecuta el script para borrar la dirección IP virtual

Para establecer una prioridad en la adjudicación del rol de master, es decir, quién queremos que sea el master y qué jerarquía de hosts queremos configurar, se usan las opciones –b y –k las cuales no sólo definen el intervalo de tiempo definido entre advertisements. Estos parámetros son también un mecanismo de prioridad y son enviados como dato en los advertisements. El de menor valor de intervalo advertisements se convertirá en master y así con el resto de la jerarquía. En caso de que todos tengan el mismo valor prevalece el de menor dirección IP.

Por defecto cuando un host inicialmente se convierte en master, continuará así indefinidamente. Si un host master escucha a otro host en cual por algún motivo anómalo también se ha convertido en master, uno de ellos volverá a estado backup basado en la información de prioridades o valor de IP que tiene cada uno.

Notas:

Al probarlo con dos PCs intento poner un host como prioritario de tal modo que al restablecerse su conexión debe ponerse en master y el otro volver a backup. Esto lo podemos hacer con la opción -b1 para el master y -b 2 para el backup. He observado que así no funciona y necesitas poner en el backup al menos –b 3 para que retorne a modo backup cuando se vuelve a levantar el master. Cuando ponemos la opción -P en el host master entoces sí que se levanta como master por defecto y al detectarlo host de backup que actúa como master pasa entonces a modo backup.

Un pensamiento en “Linux – UCARP

  1. Exylon

    Muchas gracias por la explicación, me sirvió mucho el articulo , es mucho mas concreto y señido que los demás articulo de habla inglesa

    Responder

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *