Alta disponibilidad en FreeBSD: La IP de servicio, parte 2

En esta segunda parte del artículo configuraremos la dirección IP de servicio.

Configurando la IP de servicio

Como se mencionó en la primera parte, utilizando el módulo del kernel “carp” -que implementa el protocolo del mismo nombre-, haremos que una dirección IP esté asignada a dos nodos, de forma que si uno de ellos falla, el otro siga respondiendo las solicitudes.

La configuración consiste en una línea extra en el fichero /etc/rc.conf de cada nodo.

Para el primer nodo, ejecutaremos lo siguiente:

Para el segundo nodo, ejecutaremos:

Analicemos esta línea de forma genérica:

La primera línea indica el uso de un alias de IP. Esto quiere decir que la NIC ’em0′ tendrá una IP adicional a la que ya tuviera configurada como IP principal (192.0.2.5/24 en nuestro caso). Todo lo que va entrecomillado son los parámetros que tomará este alias.

La segunda línea establece que vamos a utilizar la família “inet” (IPv4), y, si no se especifica, es el valor por defecto. Otra opción es “inet6” para el protocolo IPv6.

En la tercera línea se establece el identificador de host virtual. Cada dirección IP de servicio debe tener el mismo valor en todos los nodos donde se configure. Si tuvieramos más direcciones de servicio, este campo debe cambiar. Los valores permitidos son de 1 a 255.

La cuarta línea establece la contraseña de autenticación con la que se identificaran en un “vhid” los nodos participantes. Esta clave no establece ningún tipo de cifrado.

En la quinta línea se establece la dirección IP que establecemos cono dirección IP de servicio.

Por último, y solo para el nodo secundario, se fija el valor de “advskew” a 100. Este valor introduce un retraso a la hora de que el nodo se “anuncie” como nodo de CARP, modificando su orden de procedencia; y es útil cuando queremos forzar un nodo primario automáticamente o hay multiples nodos secundarios.

En este momento debe aplicarse el cambio en cada nodo.

Para el primer nodo ejecutaremos:

Y, en el segundo, ejecutaremos:

Podemos verificar el correcto arranque funcionamiento de varias formas.

Mediante el comando ifconfig em0 en cada nodo:

Si observamos la última línea, en el primer servidor indica “CARP: MASTER” y, en el segundo, “CARP: BACKUP”.

Otra opción, donde además veremos más información como la elección del nodo “MASTER”, transiciones de estado, etc., es el fichero /var/log/messages de cada nodo:

Verificando el funcionamiento

Con la configuración ya realizada y activada y los nodos definidos en maestro y esclavo, llega el momento de hacer las pruebas necesarias para verificar que, realmente, el comportamiento es el adecuado.

Utilizaremos el comando “ping” desde algún sistema en la misma subred 192.0.2.100/24 para verificar que la dirección IP de servicio está disponible.

La primera prueba real que haremos será verificar qué ocurre cuando el nodo activo deja de estar disponible por reinicio o perdida de corriente eléctrica; y la segunda consistirá en simular un fallo en la interfaz de red.

En caso de reinicio del nodo activo

Conectados a ambos nodos, reiniciaremos el maestro y en el secundario observaremos qué ocurre:

El nodo esclavo pasa a ser el maestro, y la salida del comando ifconfig así lo muestra:

La dirección IP de servicio seguirá siendo accesible desde los demás sistemas de la red. La siguiente salida muestra qué percepción ha tenido un cliente durante el proceso desde que falló el primer nodo hasta que el secundario tomó el control y comenzó a responder las peticiones:

Como puede observarse, la dirección IP virtual no ha estado disponible durante unos 3 segundos.

En caso de pérdida de la interfaz de red física

Es posible simular la pérdida de una interfaz de red mediante el siguiente comando:

Podremos comprobar que el nodo esclavo detecta dicho fallo en el maestro:

Al igual que en el caso anterior, el segundo servidor pasa a tener estado MASTER :

El estado actual del servicio sería como muestra la siguiente imagen:

IP de servicio compartida - Servidor servidor-1 en fallo - Español
En caso de deshabilitar la interfaz de red en el segundo nodo mediante

Al no tener ninguna interfaz habilitada (ni en el primer nodo ni en el segundo), el servicio dejaría de ser prestado.

IP de servicio compartida - Todos los servidores en fallo - Español

Forzando un nodo como principal

Es posible que deseemos que un nodo concreto siempre sea el principal.

Para ello podemos utilizar una configuración automática que consiste en añadir una línea al fichero /etc/sysctl.conf del nodo que deseemos que lo sea:

Si no queremos reiniciar el nodo en estos momentos, activaremos el cambio de la siguiente forma:

Tambien podemos fijar temporalmente un nodo como principal utilizando el siguiente comando en el nodo principal:

Notas finales

Por simplicidad a lo largo de estos dos artículos relacionados con la dirección IP de servicio, hemos utilizado una única interfaz de red física tanto para la gestión del servidor como para prestar el servicio.

Es recomendable utilizar múltiples interfaces de red físicas, cada una para una tarea. Idealmente la interfaz de red física “em0” se utilizará para prestar el servicio, mientras que otra interfaz de red “em1” será la utilizada para administrar el servidor y donde CARP intercambia el estado de ambos nodos.

De igual modo, por simplicidad, sólo hemos utilizado una conexión para cada tarea. En entornos donde prime la alta disponibilidad debe utilizarse un doble enlace de red mediante agregación de enlace, utilizando tarjetas de red independientes; en un futuro publicaré sobre ello.

Esta entrada también está disponible en: enEnglish (Inglés)

Deja un comentario

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