Cómo configurar NGINX de alta disponibilidad con KeepAlived en CentOS 8

P√°gina de Nginx en el nodo 1

Nginx es un servidor web gratuito, de código abierto y uno de los más populares del mundo. También se puede utilizar como proxy inverso, equilibrador de carga y caché HTTP. La alta disponibilidad permite que una aplicación redirija el trabajo a otro sistema en caso de falla. Hay diferentes tecnologías disponibles para configurar un sistema de alta disponibilidad.

Keepalived es un demonio de sistema que monitorea servicios o sistemas de forma continua y logra una alta disponibilidad en caso de falla. Si un nodo est√° inactivo, el segundo nodo sirve los recursos.

En este tutorial, le mostraré cómo configurar un servidor web Nginx de alta disponibilidad con KeepAlived en CentOS 8.

requisitos previos

  • Dos servidores que ejecutan CentOS 8, uno para el nodo maestro y otro para el nodo de respaldo.
  • Una contrase√Īa de root est√° configurada en su servidor.

Instale Nginx en ambos nodos

Primero, deber√° instalar el paquete Nginx en ambos nodos. Puedes instalarlo usando el siguiente comando:

dnf install nginx -y

Una vez que se haya instalado Nginx en ambos nodos, inicie el servicio Nginx y habilítelo para que se inicie al reiniciar el sistema:

systemctl start nginx
systemctl enable nginx

Una vez que haya terminado, puede continuar con el siguiente paso.

Crear archivo Index.html en ambos nodos

A continuación, deberá crear un archivo index.html personalizado en ambos nodos para identificar cada nodo.

En el primer nodo, cree un archivo index.html con el siguiente comando:

echo "<h1>This is My First NGINX Web Server Node</h1>" | tee /usr/share/nginx/html/index.html

En el segundo nodo, cree un archivo index.html con el siguiente comando:

echo "<h1>This is My Second NGINX Web Server Node</h1>" | tee /usr/share/nginx/html/index.html

Guarde y cierre el archivo cuando haya terminado.

Instalar y configurar Keepalived

A continuación, deberá instalar Keepalived en ambos nodos. De forma predeterminada, el paquete Keepalived está disponible en el repositorio predeterminado de CentOS 8. Puede instalarlo ejecutando el siguiente comando:

dnf install keepalived -y

Una vez que el paquete keepalived esté instalado en ambos nodos, deberá editar el archivo de configuración predeterminado de keepalived en ambos nodos.

En el primer nodo, edite el archivo keepalived.conf:

nano /etc/keepalived/keepalived.conf

Elimine los contenidos predeterminados y agregue los siguientes contenidos:

global_defs {
  # Keepalived process identifier
  router_id nginx
}

# Script to check whether Nginx is running or not
vrrp_script check_nginx {
  script "/bin/check_nginx.sh"
  interval 2
  weight 50
}

# Virtual interface - The priority specifies the order in which the assigned interface to take over in a failover
vrrp_instance VI_01 {
  state MASTER
  interface eth0
  virtual_router_id 151
  priority 110

  # The virtual ip address shared between the two NGINX Web Server which will float
  virtual_ipaddress {
    192.168.1.10/24
  }
  track_script {
    check_nginx
  }
  authentication {
    auth_type AH
    auth_pass secret
  }
}

Guarde y cierre el archivo cuando haya terminado.

En el segundo nodo, edite el archivo keepalived.conf:

nano /etc/keepalived/keepalived.conf

Elimine los contenidos predeterminados y agregue los siguientes contenidos:

global_defs {
  # Keepalived process identifier
  router_id nginx
}

# Script to check whether Nginx is running or not
vrrp_script check_nginx {
  script "/bin/check_nginx.sh"
  interval 2
  weight 50
}

# Virtual interface - The priority specifies the order in which the assigned interface to take over in a failover
vrrp_instance VI_01 {
  state BACKUP
  interface eth0
  virtual_router_id 151
  priority 100

  # The virtual ip address shared between the two NGINX Web Server which will float
  virtual_ipaddress {
    192.168.1.10/24
  }
  track_script {
    check_nginx
  }
  authentication {
    auth_type AH
    auth_pass secret
  }
}

Guarde y cierre el archivo, luego deber√° crear un script para verificar si el servicio Nginx se est√° ejecutando o no. Puedes crearlo usando el siguiente comando:

Nota: Simplemente reemplazó MASTER con BACKUP y 110 con 100 en el archivo de configuración anterior.

nano /bin/check_nginx.sh

Agregue las siguientes líneas: Anuncio

#!/bin/sh
if [ -z "`pidof nginx`" ]; then
  exit 1
fi

Guarde y cierre el archivo, luego establezca el permiso adecuado con el siguiente comando:

chmod 755 /bin/check_nginx.sh

Finalmente, inicie el servicio keepalived y habilítelo para que se inicie al reiniciar el sistema usando el siguiente comando:

systemctl start keepalived
systemctl enable keepalived

También puede verificar el estado del servicio keepalive usando el siguiente comando:

systemctl status keepalived

Deberías obtener el siguiente resultado:

? 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

Apr 08 04:24:22 node1 Keepalived_vrrp[3143]: (VI_01) Changing effective priority from 110 to 160
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) Receive advertisement timeout
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) Entering MASTER STATE
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) setting VIPs.
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) Sending/queueing gratuitous ARPs on eth0 for 192.168.1.10
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10

También puede verificar el estado de la dirección IP virtual en el nodo principal con el siguiente comando:

ip add show

Debería ver la dirección IP virtual 192.168.1.10 en el siguiente resultado:

1: lo: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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 haya terminado, puede continuar con el siguiente paso.

Configurar el cortafuegos en ambos nodos

A continuación, deberá habilitar el puerto 80 y permitir VRRP en ambos nodos. Puedes hacerlo usando el siguiente comando:

firewall-cmd --permanent --add-service=http
firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent

A continuación, vuelva a cargar el firewalld para aplicar los cambios:

firewall-cmd ‚Äďreload

Verificar Keepalive

En este punto, Nginx y Keepalived est√°n instalados y configurados. Es hora de probar si la alta disponibilidad de Nginx funciona o no.

Abra su navegador web y acceda a la URL http://tu-ip-virtual. Deberías ver la siguiente página:

P√°gina de Nginx en el nodo 1

Ahora, detenga el servicio Nginx en el nodo maestro y pruebe si la IP virtual se cambia del nodo 1 al nodo 2.

En el nodo maestro, detenga el servicio Nginx con el siguiente comando:

systemctl stop nginx

Luego, inicie sesión en Node2 y verifique la IP virtual usando el siguiente comando: Anuncio

ip add show

Debería ver su IP virtual en el siguiente resultado:

1: lo: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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, acceda a su servidor web Nginx usando la URL http://tu-ip-virtual. Debería ver la página Node2:

Nginx en el nodo 2

Conclusión

¡Felicidades! Ha configurado con éxito un servidor Nginx de alta disponibilidad con Keepalived. Espero que ahora tenga suficiente conocimiento para configurar un servidor Nginx de alta disponibilidad en un entorno de producción.

Deja una respuesta

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