Balanceo de carga con Keepalived

El balanceo de carga es un método de distribución del tráfico IP a través de un cluster de servidores reales, proporcionando uno o más servicios virtuales para una alta disponibilidad.

Keepalived proporciona un entorno de trabajo para el equilibrio de carga y por ende la alta disponibilidad. Keepalived se ejecuta basado en un módulo de kernel del Servidor Virtual Linux (IPVS) en la capa 4. También implementa un conjunto de verificadores de estado para gestionar y mantener dinámicamente a los grupos de servidores en función de su estado. La alta disponibilidad se consigue mediante el Protocolo de Enrutamiento de Redundancia Virtual (VRRP). VRRP es un pieza fundamental para la conmutación por error de los enrutadores. En este contexto, el equilibrador de carga también puede denominarse director o enrutador LVS.

Instalación de Keepalived

Se debe instalar Keepalived en cada una de las máquinas que integrarán el esquema de balanceo de carga. Para más información estudie el siguiente enlace:

https://www.keepalived.org/doc/installing_keepalived.html

Instalación en Rocky Linux 8

Con derechos de usuario root se ejecuta en una ventana terminal:

dnf install keepalived

Instalación en Ubuntu server 22.04

Con derechos de usuario root se ejecuta en una ventana terminal:

apt install keepalived

SIGUIENTE >

Configuración de Keepalived

Una vez instalado Keepalived en todas y cada una de las máquinas que conforman el entorno de trabajo de balanceo de carga, el fichero a configurar con un editor de textos (Vim, Nano, etcétera) es el siguiente:

/etc/keepalived/keepalived.conf

Configuración de instancias

Configuración de dirección IP flotante

En la instancia definida, en una sección aparte denominada virtual_ipaddress se colocará las direcciones IP posibles a ser servidas, por ejemplo:

virtual_ipaddress { <vip>/24 }

Configuración de seguridad

En la instancia definida, en una sección aparte denominada authentication se colocará un método de autenticación por contraseña (auth_type PASS) y la contraseña en sí misma (longitud de 8 caracteres exactos), por ejemplo:

authentication {
  auth_type PASS
  auth_pass <8_digit_pass>
}

Ejemplo

En esquema denominado VI_1 con un nodo principal denominado MASTER y uno secundario llamado BACKUP con direcciones IP fijas <ha1_ip> y <ha2_ip>, y una dirección IP flotante (<vip>) a balancear su carga:

En HA1:

vrrp_instance VI_1 {
  state MASTER
  interface <if_name_1>
  virtual_router_id 55
  priority 150
  advert_int 1
  unicast_src_ip <ha1_ip>
  unicast_peer {
    <ha2_ip>
  }

  authentication {
    auth_type PASS
    auth_pass <8_digit_pass>
  }

  virtual_ipaddress {
    <vip>/24
  }
}

En HA2:

vrrp_instance VI_1 {
  state BACKUP
  interface <if_name_2>
  virtual_router_id 55
  priority 100
  advert_int 1
  unicast_src_ip <ha2_ip>
  unicast_peer {
    <ha1_ip>
  }

  authentication {
    auth_type PASS
    auth_pass <8_digit_pass>
  }

  virtual_ipaddress {
    <vip>/24
  }
}

< ANTERIOR   SIGUIENTE >

Activación de Keepalived

Se debe activar la ejecución de manera persistente en cada reinicio de la máquina con el siguiente comando ejecutado en cada nodo:

systemctl enable --now keepalived

Se podrá consultar en todo momento el estado de cada nodo ejecutando el siguiente comando:

systemctl status keepalived

< ANTERIOR