GNU/Linux >> Tutoriales Linux >  >> Linux

Equilibrio de carga con HAProxy, Nginx y Keepalived en Linux

Contar con una configuración adecuada del balanceador de carga le permite a su servidor web manejar un alto tráfico sin problemas en lugar de colapsar.

¿Qué es el equilibrio de carga?

El equilibrio de carga es el proceso de distribución de cargas de trabajo a varios servidores. Es como distribuir las cargas de trabajo entre los trabajadores del turno de día y del turno de noche en una empresa. El equilibrio de carga mejora la confiabilidad del servidor, ya que supera la falla de un solo punto.

A continuación se muestra un ejemplo de cómo se ve un servidor sin equilibrio de carga.

En este ejemplo, si el servidor web se cae, no se puede acceder a la solicitud web del usuario en tiempo real. Además, si varios usuarios solicitan la misma página web simultáneamente, entonces atender la solicitud web del usuario mediante un único servidor web puede ser un proceso lento. Por lo tanto, los balanceadores de carga se utilizan para mejorar el rendimiento del servidor, brindar respaldo y evitar fallas.

En este tutorial, configuraremos un balanceador de carga para un servidor web utilizando Nginx, HAProxy y Keepalived.

A continuación se muestra un ejemplo de cómo se ven los servidores con balanceadores de carga.

Entonces, ¿qué son Nginx, Haproxy y Keepalived?

Nginx

Nginx, pronunciado como Engine-x, es un servidor web de código abierto. Más que un servidor web, puede funcionar como servidor proxy inverso, servidor proxy de correo, equilibrador de carga, servidor de archivos ligero y caché HTTP. Nginx se ha utilizado en muchos sitios populares como BitBucket, WordPress, Pinterest, Quora y GoDaddy.

HAProxy

HAProxy significa Proxy de alta disponibilidad. Es un equilibrador de carga de código abierto que proporciona soluciones de equilibrio de carga, alta disponibilidad y proxy para aplicaciones basadas en TCP y HTTP. Es más adecuado para distribuir la carga de trabajo entre varios servidores para mejorar el rendimiento y la confiabilidad de los servidores.

La función de Haproxy es reenviar la solicitud web del usuario final a uno de los servidores web disponibles. Puede usar varios algoritmos de equilibrio de carga como Round Robin, Least Connections, etc.

Keepalived

¿Qué pasa si el balanceador de carga HAProxy deja de funcionar?

Keepalived es un programa de código abierto que admite equilibrio de carga y alta disponibilidad. Es básicamente un software de enrutamiento y proporciona dos tipos de equilibrio de carga:

  • Capa 4 (capa de transporte)
  • Capa 7 (capa de aplicación)

Keepalived puede realizar las siguientes funciones:

  • Comprobación de estado (ya sea que los servidores estén activos o no)
  • Implementa VRRP (protocolo de enrutamiento de redundancia virtual) para manejar la conmutación por error del equilibrio de carga

Keepalived usa VIP (dirección IP virtual) como una IP flotante que flota entre un balanceador de carga maestro y un balanceador de carga de respaldo y se usa para cambiar entre ellos. Si el balanceador de carga maestro deja de funcionar, se usa el balanceador de carga de respaldo para reenviar la solicitud web.

Avancemos hacia la simulación de cómo se mantiene la alta disponibilidad y el equilibrio de carga para los servidores web.

Configurando un balanceador de carga en Linux con Nginx, HAProxy y Keepalived

Este es un experimento de laboratorio de prueba, lo que significa que es solo una configuración de prueba para comenzar. Es posible que deba hacer algunos ajustes si lo está implementando en servidores reales. Utilice este tutorial como material de aprendizaje en lugar de seguirlo a ciegas para su propia configuración.

He usado la distribución CentOS Linux en este tutorial. Puede usar otras distribuciones de Linux, pero no puedo garantizar que todos los comandos (especialmente los de instalación) funcionen en otras distribuciones.

Requisitos para la configuración del balanceador de carga

4 sistemas CentOS instalados (la instalación mínima es suficiente para este tutorial)

  • 2 CentOS para configurar con nginx
  • 2 CentOS se configurarán con HAProxy y Keepalived

En este tutorial, hemos trabajado en las siguientes direcciones IP como ejemplo. Estos se pueden cambiar según su sistema. No crea que estas son direcciones IP estáticas.

Servidores web:

  • 10.13.211.169
  • 10.13.211.158

Equilibrador de carga:

  • 10.13.211.194
  • 10.13.211.120

IP virtual:

  • 10.13.211.10

Puede obtener fácilmente la dirección IP en la línea de comandos de Linux.

Paso 1:configurar los servidores web con Nginx

En esta parte, usaremos dos sistemas CentOS como servidor web. Necesitamos instalar Nginx en ellos primero.

Para eso, agregue un repositorio que contenga nginx y luego instálelo desde allí:

yum install epel-release
yum install nginx

Después de instalar nginx, inicie el servicio Nginx:

systemctl start nginx

Habilite el servicio nginx incluso después de cada arranque:

systemctl enable nginx

Verifique el estado del servicio nginx:

systemctl status nginx

Permita el tráfico web en nginx que está bloqueado de manera predeterminada por el firewall de CentOS.

firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd –reload 

Repita los pasos anteriores en el segundo servidor web CentOS también.

Ahora presta atención a los siguientes pasos.

Los archivos web para nginx se encuentran en /usr/share/nginx/html Cambie el contenido del archivo index.html solo para identificar los servidores web.

Para el primer servidor web:

echo “this is first webserver” > /usr/share/nginx/html/index.html

Para el segundo servidor web:

echo “this is second webserver” > /usr/share/nginx/html/index.html

NOTA:Si está en una máquina virtual, es mejor instalar y configurar Nginx en un sistema y luego clonar el sistema. Después, puede reconfigurar en el segundo sistema. Ahorra tiempo y errores.

Ahora confirme el estado del servidor web yendo a la siguiente URL en su navegador:http://SERVER_DOMAIN_NAME o Local_IP_Address. Ejemplo aquí:

http://10.13.211.169

O en la terminal, curl Local_IP_Address. Ejemplo aquí:

curl 10.13.211.169

Obtendrá la salida como:

Paso 2:Configurar balanceadores de carga con HAProxy

En los otros dos sistemas, use los siguientes comandos para instalar HAProxy:

yum -y update
yum -y install haproxy

El archivo de configuración de HAProxy se encuentra en /etc/haproxy. Use el comando cd para ir al directorio y hacer una copia de seguridad del archivo antes de editarlo.

cd /etc/haproxy/
mv haproxy.cfg haproxy.cfg_bac

Cree un nuevo archivo haproxy.cfg y ábralo con cualquier editor que desee.

touch haproxy.cfg
vim haproxy.cfg

Ahora, pegue las siguientes líneas en el archivo:

global
   log /dev/log local0
   log /dev/log local1 notice
   chroot /var/lib/haproxy
   stats timeout 30s
   user haproxy
   group haproxy
   daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000

#frontend
#---------------------------------
frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back

#round robin balancing backend http
#-----------------------------------
backend http_back
balance roundrobin
#balance leastconn
mode http
server webserver1 10.13.211.169:80 check    # ip_address_of_1st_centos_webserver
server webserver2 10.13.211.158:80 check    # ip_address_of_2nd_centos_webserver

Ahora, habilite e inicie el servicio HAProxy.

systemctl enable haproxy
systemctl start haproxy

Verifique el estado de HAProxy:

systemctl status haproxy

Vaya a la URL en su navegador para confirmar el servicio de haproxy:http://Dirección IP del equilibrador de carga/haproxy?stats. Ejemplo usado aquí:

http://10.13.211.194/haproxy?stats

o en la terminal, use el comando $ curl  LoadBalancer_IP_Address

curl 10.13.211.194
curl 10.13.211.194

curl dos veces y verá diferentes salidas para el comando curl. Se debe a que la respuesta proviene de diferentes servidores web (uno a la vez), para su solicitud en el balanceador de carga.

La salida se vería así:

Paso 3:Configure la alta disponibilidad con Keepalived

Keepalived debe instalarse en ambos sistemas CentOS del balanceador de carga HAProxy (que acabamos de configurar arriba). Uno actúa como maestro (balanceador de carga principal) y el otro actúa como balanceador de carga de respaldo.

En ambos sistemas, ejecute el siguiente comando:

yum install -y keepalived

El archivo de configuración de Keepalived se encuentra en /etc/keepalived/keepalived.conf . Realice una copia de seguridad del archivo keepalived.conf original y use la siguiente configuración en el nuevo archivo keepalived.conf.

mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf_bac
touch /etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf

Pegue las siguientes líneas en el archivo de configuración (no olvide cambiar las direcciones de correo electrónico):

global_defs {
notification_email {
linuxhandbook.com
[email protected]
}
notification_email_from [email protected]
smtp_server 10.13.211.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}

vrrp_instance VI_1 {
state MASTER
interface eth0 #put your interface name here. [to see interface name: $ ip a ]
virtual_router_id 51
priority 101 # 101 for master. 100 for backup. [priority of master> priority of backup]
advert_int 1
authentication {
auth_type PASS
auth_pass 1111 #password
}
virtual_ipaddress {
10.13.211.10 # use the virtual ip address. 
}
}

Nota:las direcciones IP virtuales pueden ser cualquier dirección IP activa dentro de su red. Cerca del rango de la dirección IP de Loadbalancer. Aquí, la IP del balanceador de carga es:10.13.211.194 y 10.13.211.120, y VIP es 10.13.211.10

Edite el archivo de configuración según la suposición del sistema. Tenga cuidado con la configuración maestra y de respaldo. Guarde el archivo e inicie y habilite el proceso Keepalived:

systemctl start keepalived
systemctl enable keepalived

Para ver el estado de Keepalived:

systemctl status keepalived

Nota:si está en una máquina virtual, es mejor instalar y configurar Haproxy y Keepalived en un sistema y luego clonar el sistema. Después, puede reconfigurar en el segundo sistema. Ahorra tiempo y errores.

Ahora, para verificar el estado de su balanceador de carga de alta disponibilidad, vaya a la terminal y presione:

$ while true; do ; curl 10.13.211.10 ; sleep 1; done;

Presiona ctrl+c para detener la ejecución del terminal.

La salida se verá así:

Si no se siente cómodo instalando y configurando los archivos, descargue los scripts desde mi repositorio de GitHub y simplemente ejecútelos.

Espero que este tutorial te haya ayudado a configurar un balanceador de carga en Linux con alta disponibilidad. Por supuesto, fue una configuración simple, pero definitivamente da una idea sobre el equilibrio de carga y el manejo de la alta disponibilidad.

Si tiene preguntas o sugerencias, deje un comentario a continuación.

Autor :Rishi Raj Gautam es un amante de Linux y un activista del código abierto.


Linux
  1. Edite texto en Linux con KWrite y Kate

  2. Personalizando mi terminal Linux con tmux y Git

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

  4. Equilibrar la seguridad de Linux con la usabilidad

  5. Equilibrio de carga Nginx

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

Instale y configure Varnish Cache con Nginx Web Server en Ubuntu 18.04

Cómo instalar y configurar el servidor web Caddy con PHP en Rocky Linux 8

Cómo configurar Load Balancing con NGINX en Jelastic Cloud

Desarrollo Web y Técnicas Avanzadas con Linux sobre Windows (WSL)

Ruby on Rails en Azure App Service (sitios web) con Linux (y Ubuntu en Windows 10)