Alta disponibilidad en Linux: La IP de servicio, parte 1

En la entrada anterior vimos qué es la alta disponibilidad y qué debemos conseguir cuando un consumidor intenta acceder a un servicio: Una disponibilidad lo mas cercana posible al 100% del tiempo.

Esta entrada describe qué es la dirección IP de servicio, punto de entrada a los mismos, y cómo prepararla utilizando dos servidores.

Para poder implementar lo descrito bajo estas líneas es necesario disponer de dos servidores físicos o virtuales y una distribución Linux ya instalada en ellos.

Con el fin de no hacer excesivamente largas las entradas, esta está dividida en dos partes. Esta primera parte sirve de introducción y preparación de los sistemas, mientras que la segunda muestra como configurar la propia IP de servicio.

La dirección IP de servicio

Cuando accedemos a un servicio la conexión se realiza hacia una dirección IP, de forma directa (192.0.2.100) o a través de un nombre de host (www.example.com).

Supongamos que queremos acceder a una página web (http://www.example.com) y que su dirección IP asociada es “192.0.2.100”. Esta dirección IP, a través de la cual la página es accesible, es denominada “IP de servicio”.

El objetivo es que esta dirección IP esté siempre disponible. Para el consumidor la percepción debe ser como la siguiente imagen:

Conexion a Host (es)

Para conseguirlo, teniendo un mínimo de dos servidores, uno tendrá asignada la dirección IP de servicio y el otro estará en espera por si el primero de ellos falla para tomarla.

IP de servicio compartida

Conexion a Host (es)

Si el servidor “servidor-1” no fuese funcional, entonces el servidor “servidor-2” sería quien utilizase la dirección IP de servicio.  El servicio estaría degradado -un componente en estado de fallo-, pero operativo y accesible de cara al consumidor.

IP de servicio compartida - Servidor servidor-1 en fallo

Conexion a Host (es)

En caso de no tener ningún servidor disponible el servicio no se podrá prestar ya que la dirección IP de servicio no podría asignarse a ninguno de ellos.

IP de servicio compartida - Todos los servidores en fallo

Conexion a Host en fallo(es)

El consumidor no podrá acceder al servicio. Su percepción variará:

Conexion a Host en fallo(es)

La técnica que permite a un servidor utilizar una dirección IP de servicio previamente asignada a otro cuando este ya no está disponible se denomina “IP failover”.

Existen varios protocolos estandarizados que implementan métodos de “IP failover”, siendo VRRP el mas famoso de todos ellos y el que utilizaremos.

Configuración previa necesaria

Antes de comenzar hemos de tener preparado el material necesario.

Utilizaremos 2 servidores llamados “servidor-1” y “servidor-2”. He utilizado Debian 8, pero esta configuración es prácticamente idéntica en otros sistemas como CentOS donde varía el fichero de configuración de red y el comando de instalación de software.

Ambos servidores están conectados mediante la interfaz de red “eth0” a un switch y pertenecen a la subred 192.0.2.0/24. El switch está conectado a su vez a un router con dirección IP 192.0.2.1 que actúa como puerta de enlace (“gateway“).

El siguiente diagrama muestra la interconexión:

Conexión entre máquinas

Anotaremos los datos de ambos servidores para su posterior consulta:

Preparando los sistemas

En Linux existen varias implementaciones del protocolo VRRP. En estos artículos utilizaremos “keepalived” por su funcionalidad extra, pero otra opción valida sería “vrrpd“.

Los siguientes pasos se realizarán en ambos servidores.

Dependendiendo de la distribución utilizada podemos instalar “keepalived” mediante “apt” o “yum”:

También necesitamos que el servidor tenga cargado y configurado el módulo “dummy” que provee una interfaz de red virtual donde se asignará la dirección IP de servicio. Mas adelante explicaremos por qué utilizamos esta interfaz virtual en lugar de las clásicas interfaces “ethX”.

Para cargarlo y que sea permanente tras reiniciar un servidor ejecutaremos:

Para configurarlo y que sea permanente tras reiniciar un servidor ejecutaremos:

Una vez cargado, verificaremos que la interfaz “dummy0″ esté disponible:

Dejaremos la interfaz disponible para su uso:

Necesitamos un último cambio en el sistema operativo: Debemos permitir que los procesos (programas en segundo plano) puedan atender peticiones de red en una dirección IP que no les pertenece.

Ya que la dirección IP de servicio estará asignada únicamente a un servidor el otro no tendrá, por lo que no permitirá que los programas la utilicen para recibir datos. Esto implicaría, una vez que la dirección IP de servicio cambia de servidor, entrar en el servidor que la posee en ese momento y ejecutar los programas necesarios que, ahora sí, podrían utilizar dicha dirección IP.

Esto nos limitaría mucho y no cumpliríamos la premisa de “alta disponibilidad” -la IP de servicio cambiaría de servidor, sí, pero los procesos se ejecutarían para prestar servicio sin intervención manual- por lo que configuraremos el sistema para que permita a los procesos atender en cualquier IP, aunque no le pertenezca.

Llegados a este punto verificaremos lo siguiente:

– El software keepalived está instalado en ambos nodos:

– El módulo “dummy” está cargado y configurado en ambos nodos

– La interfaz “dummy0” existe en ambos nodos y está levantada

– El sistema tiene la variable net.ipv4.ip_nonlocal_bind a 1

Una vez se haya revisado todo, podemos comenzar con la configuración de la dirección IP de servicio, pero eso será en la próxima entrada de esta serie.

1 opinión en “Alta disponibilidad en Linux: La IP de servicio, parte 1”

Deja un comentario

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