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
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
vrrp_instance
contendrá el nombre de la instancia de balanceo de carga, el cual debe ser el mismo en todos los nodos.- En
interface
se asignará el nombre de la interfaz de red (NIC) utilizada para el balanceo de carga, por ejemploeth1
. - El token
state
será diferente en cada nodo, por ejemplo, el principal pudiera ser llamadostate primary
y los demásstate secondary1
,state secondary2
, y así sucesivamente (el orden de jerarquía debería ser cónsono con el siguiente token,priority
). priority
un valor numérico que indica la prioridad, siendo el principal el valor más alto y se irá disminuyendo en cada uno de los nodos acorde con el token anterior (state
).unicast_src_ip
en cada nodo especifica la dirección IP propia que atenderá en el balanceo de carga.unicast_peer
las direcciones IP del resto de los nodos.
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
}
}
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