NGINX, KeepAlived · 6 min read · Nov 08, 2025
Cómo configurar NGINX altamente disponible con KeepAlived en CentOS 8

Nginx es un servidor web gratuito, de código abierto y uno de los más populares en todo el mundo. También se puede utilizar como un proxy inverso, balanceador de carga y caché HTTP. La alta disponibilidad permite que una aplicación redirija el trabajo a otro sistema en caso de fallo. Hay diferentes tecnologías disponibles para configurar un sistema altamente disponible.
Keepalived es un demonio del sistema que monitorea servicios o sistemas continuamente y logra alta disponibilidad en caso de fallo. Si un nodo está caído, entonces el segundo nodo proporciona los recursos.
En este tutorial, te mostraré cómo configurar un servidor web Nginx altamente disponible con KeepAlived en CentOS 8.
Requisitos previos
- Dos servidores que ejecuten CentOS 8, uno para el nodo maestro y otro para el nodo de respaldo.
- Una contraseña de root configurada en tu servidor.
Instalar Nginx en Ambos Nodos
Primero, necesitarás instalar el paquete de Nginx en ambos nodos. Puedes instalarlo utilizando el siguiente comando:
dnf install nginx -yUna vez que Nginx ha sido instalado en ambos nodos, inicia el servicio de Nginx y habilítalo para que se inicie al reiniciar el sistema:
systemctl start nginx
systemctl enable nginxUna vez que hayas terminado, puedes proceder al siguiente paso.
Crear el Archivo Index.html en Ambos Nodos
A continuación, necesitarás crear un archivo index.html personalizado en ambos nodos para identificar cada nodo.
En el primer nodo, crea un archivo index.html con el siguiente comando:
echo "Este es mi primer nodo de servidor web NGINX
" | tee /usr/share/nginx/html/index.htmlEn el segundo nodo, crea un archivo index.html con el siguiente comando:
echo "Este es mi segundo nodo de servidor web NGINX
" | tee /usr/share/nginx/html/index.htmlGuarda y cierra el archivo cuando hayas terminado.
Instalar y Configurar Keepalived
A continuación, necesitarás instalar Keepalived en ambos nodos. Por defecto, el paquete de Keepalived está disponible en el repositorio predeterminado de CentOS 8. Puedes instalarlo ejecutando el siguiente comando:
dnf install keepalived -yUna vez que el paquete keepalived esté instalado en ambos nodos, necesitarás editar el archivo de configuración predeterminado de keepalived en ambos nodos.
En el primer nodo, edita el archivo keepalived.conf:
nano /etc/keepalived/keepalived.confElimina el contenido predeterminado y agrega el siguiente contenido:
global_defs {
# Identificador del proceso Keepalived
router_id nginx
}
# Script para verificar si Nginx está en ejecución o no
vrrp_script check_nginx {
script "/bin/check_nginx.sh"
interval 2
weight 50
}
# Interfaz virtual - La prioridad especifica el orden en el que la interfaz asignada tomará el control en un failover
vrrp_instance VI_01 {
state MASTER
interface eth0
virtual_router_id 151
priority 110
# La dirección IP virtual compartida entre los dos servidores web NGINX que flotará
virtual_ipaddress {
192.168.1.10/24
}
track_script {
check_nginx
}
authentication {
auth_type AH
auth_pass secret
}
}
Guarda y cierra el archivo cuando hayas terminado.
En el segundo nodo, edita el archivo keepalived.conf:
nano /etc/keepalived/keepalived.confElimina el contenido predeterminado y agrega el siguiente contenido:
global_defs {
# Identificador del proceso Keepalived
router_id nginx
}
# Script para verificar si Nginx está en ejecución o no
vrrp_script check_nginx {
script "/bin/check_nginx.sh"
interval 2
weight 50
}
# Interfaz virtual - La prioridad especifica el orden en el que la interfaz asignada tomará el control en un failover
vrrp_instance VI_01 {
state BACKUP
interface eth0
virtual_router_id 151
priority 100
# La dirección IP virtual compartida entre los dos servidores web NGINX que flotará
virtual_ipaddress {
192.168.1.10/24
}
track_script {
check_nginx
}
authentication {
auth_type AH
auth_pass secret
}
}
Guarda y cierra el archivo, luego necesitarás crear un script para verificar si el servicio Nginx está en ejecución o no. Puedes crearlo utilizando el siguiente comando:
Nota: Solo reemplaza MASTER con BACKUP y 110 con 100 en el archivo de configuración anterior.
nano /bin/check_nginx.shAgrega las siguientes líneas:
#!/bin/sh
if [ -z "`pidof nginx`" ]; then
exit 1
fi
Guarda y cierra el archivo, luego establece los permisos adecuados con el siguiente comando:
chmod 755 /bin/check_nginx.shFinalmente, inicia el servicio keepalived y habilítalo para que se inicie al reiniciar el sistema utilizando el siguiente comando:
systemctl start keepalived
systemctl enable keepalivedTambién puedes verificar el estado del servicio keepalived utilizando el siguiente comando:
systemctl status keepalivedDeberías obtener la siguiente salida:
? keepalived.service - LVS and VRRP High Availability Monitor
Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2021-04-08 04:24:22 EDT; 5s ago
Process: 3141 ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 3142 (keepalived)
Tasks: 2 (limit: 12524)
Memory: 2.1M
CGroup: /system.slice/keepalived.service
??3142 /usr/sbin/keepalived -D
??3143 /usr/sbin/keepalived -D
Abr 08 04:24:22 node1 Keepalived_vrrp[3143]: (VI_01) Cambiando la prioridad efectiva de 110 a 160
Abr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) Recibiendo tiempo de espera de anuncio
Abr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) Entrando en el ESTADO MASTER
Abr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) configurando VIPs.
Abr 08 04:24:25 node1 Keepalived_vrrp[3143]: Enviando ARP gratuito en eth0 para 192.168.1.10
Abr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) Enviando/poniendo en cola ARPs gratuitos en eth0 para 192.168.1.10
Abr 08 04:24:25 node1 Keepalived_vrrp[3143]: Enviando ARP gratuito en eth0 para 192.168.1.10
Abr 08 04:24:25 node1 Keepalived_vrrp[3143]: Enviando ARP gratuito en eth0 para 192.168.1.10
Abr 08 04:24:25 node1 Keepalived_vrrp[3143]: Enviando ARP gratuito en eth0 para 192.168.1.10
Abr 08 04:24:25 node1 Keepalived_vrrp[3143]: Enviando ARP gratuito en eth0 para 192.168.1.10
También puedes verificar el estado de la dirección IP virtual en el nodo maestro utilizando el siguiente comando:
ip add showDeberías ver la dirección IP virtual 192.168.1.10 en la siguiente salida:
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:00:2d:3a:20:9b brd ff:ff:ff:ff:ff:ff
inet 45.58.32.155/24 brd 45.58.32.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 192.168.1.10/24 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::200:2dff:fe3a:209b/64 scope link
valid_lft forever preferred_lft forever
3: eth1: mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:00:0a:3a:20:9b brd ff:ff:ff:ff:ff:ff
inet6 fe80::200:aff:fe3a:209b/64 scope link
valid_lft forever preferred_lft forever
Una vez que hayas terminado, puedes proceder al siguiente paso.
Configurar el Firewall en Ambos Nodos
A continuación, necesitarás permitir el puerto 80 y permitir VRRP en ambos nodos. Puedes hacerlo utilizando el siguiente comando:
firewall-cmd --permanent --add-service=http
firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanentA continuación, recarga el firewalld para aplicar los cambios:
firewall-cmd –reloadVerificar Keepalived
En este punto, Nginx y Keepalived están instalados y configurados. Es hora de probar si la alta disponibilidad de Nginx funciona o no.
Abre tu navegador web y accede a la URL http://tu-ip-virtual. Deberías ver la siguiente página:

Ahora, detén el servicio de Nginx en el nodo maestro y prueba si la IP virtual se cambia del Nodo 1 al Nodo 2.
En el nodo maestro, detén el servicio de Nginx utilizando el siguiente comando:
systemctl stop nginxA continuación, inicia sesión en Node2 y verifica la IP virtual utilizando el siguiente comando:
ip add showDeberías ver tu IP Virtual en la siguiente salida:
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:00:2d:3a:26:37 brd ff:ff:ff:ff:ff:ff
inet 45.58.38.55/24 brd 45.58.38.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 192.168.1.10/24 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::200:2dff:fe3a:2637/64 scope link
valid_lft forever preferred_lft forever
3: eth1: mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:00:0a:3a:26:37 brd ff:ff:ff:ff:ff:ff
inet6 fe80::200:aff:fe3a:2637/64 scope link
valid_lft forever preferred_lft forever
Ahora, accede a tu servidor web Nginx utilizando la URL http://tu-ip-virtual. Deberías ver la página del Nodo2:

Conclusión
¡Felicidades! has configurado con éxito un servidor Nginx altamente disponible con Keepalived. Espero que ahora tengas suficiente conocimiento para configurar un servidor Nginx altamente disponible en un entorno de producción.
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.