GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo configurar NGINX de alta disponibilidad con KeepAlived en Linux

Como sabemos, NGINX es un servidor web altamente calificado que también se puede usar como proxy inverso, equilibrador de carga y caché HTTP. En este artículo, demostraremos cómo configurar un servidor web NGINX de alta disponibilidad (HA) con keepalived en Linux. Keepalived funciona en VRRP (Protocolo de redundancia de enrutador virtual) que permite que una IP estática se conmute entre dos sistemas Linux.

Los siguientes son mis detalles de laboratorio para NGINX HA:

  • Nodo 1:192.168.1.130:nginx1.example.com:mínimo CentOS 8/RHEL 8
  • Nodo 2:192.168.1.140:nginx2.example.com:mínimo CentOS 8/RHEL 8
  • IP virtual (VIP):192.168.1.150
  • usuario sudo pkumar
  • Cortafuegos activado
  • Ejecución de SELinux

Pasemos a los pasos de instalación y configuración,

Paso 1) Instalar el servidor web NGINX desde la línea de comandos

El paquete NGINX está disponible en los repositorios predeterminados de CentOS 8/RHEL 8, así que ejecute el comando dnf en ambos nodos para instalar el servidor web nginx

$ sudo dnf install -y nginx

Para CentOS 7/RHEL 7

El paquete NGINX no está disponible en los repositorios predeterminados de CentOS 7 / RHEL 7, por lo que para instalarlo primero debemos habilitar el repositorio epel. Ejecute el siguiente comando en ambos nodos

$ sudo yum install epel-release -y
$ sudo yum install -y nginx

Para Ubuntu/Debian

Para las distribuciones de Linux basadas en Debian, el paquete del servidor web nginx está disponible en los repositorios de paquetes predeterminados, por lo que para instalar nginx, ejecute

$ sudo apt update
$ sudo apt install -y nginx

Paso 2) Configure el archivo index.html personalizado para ambos nodos

Vamos a crear un archivo index.html personalizado para ambos nodos para que podamos identificar fácilmente qué servidor está sirviendo al sitio web al acceder a través de una IP virtual.

Para el nodo 1, ejecute el siguiente comando de eco,

[[email protected] ~]$ echo "<h1>This is NGINX Web Server from Node 1</h1>" | sudo tee /usr/share/nginx/html/index.html

Para el nodo 2, ejecute

[[email protected] ~]$ echo "<h1>This is NGINX Web Server from Node 2</h1>" | sudo tee /usr/share/nginx/html/index.html

Paso 3) Permitir el puerto NGINX en el firewall e iniciar su servicio

En caso de que el firewall esté habilitado y se esté ejecutando en ambos nodos, permita el puerto 80 ejecutando los siguientes comandos,

Para el sistema CentOS/RHEL

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd –reload

Para sistema Ubuntu/Debian

$ sudo ufw allow 'Nginx HTTP'

Inicie y habilite el servicio nginx ejecutando debajo de los comandos en ambos nodos,

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

Pruebe el servidor web NGINX de ambos nodos ejecutando el siguiente comando curl desde el exterior,

$ curl http://192.168.1.130
<h1>This is NGINX Web Server from Node 1</h1>
$ curl http://192.168.1.140
<h1>This is NGINX Web Server from Node 2</h1>

Perfecto, la salida del comando anterior confirma que nginx se está ejecutando y es accesible desde el exterior con la dirección IP del sistema.

Paso 4) Instalar y configurar Keepalived

Para los sistemas CentOS / RHEL, el paquete keepalived y sus dependencias están disponibles en los repositorios de paquetes predeterminados, por lo que su instalación es sencilla, simplemente ejecute el siguiente comando en ambos nodos.

$ sudo dnf install -y keepalived       // CentOS 8/ RHEL 8
$ sudo yum install -y keepalived      // CentOS 7 / RHEL 7

Para el sistema Ubuntu/Debian,

$ apt install -y keepalived

Una vez que el keepalived esté instalado, configúrelo editando su archivo de configuración '/etc/keepalived/keepalived.conf'. Mantendremos el nodo 1 como nodo maestro y el nodo 2 como nodo de respaldo.

Realice una copia de seguridad del archivo de configuración,

[[email protected] ~]$ sudo cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf-org

Reemplace el contenido de keepalived.conf con lo siguiente:

[[email protected] ~]$ echo -n | sudo tee /etc/keepalived/keepalived.conf
[[email protected] ~]$ sudo vi /etc/keepalived/keepalived.conf

Pegue 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 enp0s3
  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.150/24
  }
  track_script {
    check_nginx
  }
  authentication {
    auth_type AH
    auth_pass secret
  }
}

Ahora cree un script con los siguientes contenidos que verificará si el servicio nginx se está ejecutando o no. Keepalived siempre verificará la salida del script check_nginx.sh, si encuentra que el servicio nginx está detenido o no responde, moverá la dirección IP virtual al nodo de respaldo.

[[email protected] ~]$ sudo vi /bin/check_nginx.sh
#!/bin/sh
if [ -z "`pidof nginx`" ]; then
  exit 1
fi

guarde y cierre el archivo y establezca el permiso requerido con el comando chmod,

[[email protected] ~]$ sudo chmod 755 /bin/check_nginx.sh

Ahora copie los archivos keepalived.conf y check_nginx.sh del nodo 1 al nodo 2 usando el siguiente comando scp.

[[email protected] ~]$ scp /etc/keepalived/keepalived.conf [email protected]:/etc/keepalived/
[[email protected] ~]$ scp /bin/check_nginx.sh [email protected]0:/bin/

Una vez que se copian los archivos, inicie sesión en el Nodo 2 y realice un par de cambios en el archivo keepalived.conf. Cambie el estado de MAESTRO a RESPALDO y reduzca la prioridad estableciéndolo en 100. Después de realizar los cambios, keepalived.conf en el Nodo 2 se vería como se muestra a continuación,

En caso de que se esté ejecutando el firewall del sistema operativo, permita VRRP ejecutando los siguientes comandos,

Nota – Ejecute estos comandos en ambos nodos

Para sistemas CentOS/RHEL

$ sudo firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent
$ sudo firewall-cmd --reload

Para sistemas Ubuntu/Debian

Permita VRRP ejecutando lo siguiente, desde el nodo maestro (Nodo 1), ejecute

$ sudo ufw allow to 224.0.0.18 comment 'VRRP Broadcast'
$ sudo ufw allow from 192.168.1.140 comment 'VRRP Router'

Desde el nodo de respaldo/esclavo (nodo 2)

$ sudo ufw allow to 224.0.0.18 comment 'VRRP Broadcast'
$ sudo ufw allow from 192.168.1.130 comment 'VRRP Router'

Ahora, finalmente, inicie el servicio keepalived ejecutando debajo de los comandos systemctl desde ambos nodos,

$ sudo systemctl start keepalived
$ sudo systemctl enable keepalived

Verifique el servicio keepalived ejecutando a continuación:

$ sudo systemctl status keepalived

Perfecto, ahora verifique el estado VIP (dirección IP virtual) en el nodo maestro, en nuestro caso, VIP es 192.168.1.130

$ ip add show

El resultado anterior confirma que VIP está configurado en el nodo maestro en su interfaz enp0s3. Por lo tanto, hagamos las pruebas de keepalived y nginx en el siguiente paso.

Paso 5) Pruebas de Keepalived y NGINX

Para realizar la prueba, intente acceder al servidor web nginx con IP virtual (192.168.1.150), actualmente debería mostrarnos la página nginx del nodo 1.

Abra el navegador wen y escriba 'http://192.168.1.150' y presione enter,

Ahora intente detener el servicio NGINX en el nodo 1 y vea si la IP virtual se cambia del Nodo 1 al Nodo 2 y luego intente acceder a la página web nginx con VIP (192.168.1.150) y esta vez debería mostrarnos la página nginx del nodo 2 .

[[email protected] ~]$ sudo systemctl stop nginx
[[email protected] ~]$ ip add show

Inicie sesión en el nodo 2 y ejecute el comando ip para verificar la dirección IP virtual,

[[email protected] ~]$ ip add show

Ahora, intentemos acceder a la página web usando una IP virtual,

Genial, lo anterior confirma que hemos configurado con éxito el servidor web NGINX de alta disponibilidad con keepalived. Eso es todo de este artículo, comparta sus opiniones, comentarios y sugerencias.


Linux
  1. Cómo instalar el servidor web Nginx en Linux

  2. Cómo configurar los privilegios de Sudo para el usuario en Linux

  3. Cómo configurar una aplicación simple de nodejs con nginx y pm2 en el servidor ubuntu

  4. Cómo instalar ModSecurity con Nginx en Rocky Linux 8

  5. Cómo instalar y configurar MERN Stack con Nginx en Ubuntu 20.04

Configurar el equilibrio de carga con HAProxy, Nginx y Keepalived en Linux

Cómo ejecutar un alias con Sudo en Linux

Cómo instalar Apache Tomcat 10 en Ubuntu 20.04 con Nginx

Cómo instalar Apache Tomcat 10 en Ubuntu 22.04 con Nginx

Cron Vs Anacron:Cómo configurar Anacron en Linux (con un ejemplo)

Cómo configurar Logstash en Linux con ElasticSearch, Redis, Nginx