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 -y

Una 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 nginx

Una 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.html

En 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.html

Guarda 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 -y

Una 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.conf

Elimina 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.conf

Elimina 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.sh

Agrega 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.sh

Finalmente, inicia el servicio keepalived y habilítalo para que se inicie al reiniciar el sistema utilizando el siguiente comando:

systemctl start keepalived  
systemctl enable keepalived

También puedes verificar el estado del servicio keepalived utilizando el siguiente comando:

systemctl status keepalived

Deberí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 show

Deberí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' --permanent

A continuación, recarga el firewalld para aplicar los cambios:

firewall-cmd –reload

Verificar 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:

Página de Nginx en el nodo 1

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 nginx

A continuación, inicia sesión en Node2 y verifica la IP virtual utilizando el siguiente comando:

ip add show

Deberí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:

Nginx en el nodo 2

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.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.