GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo configurar HAProxy como Load Balancer para Nginx en CentOS 7

Escrito en C por Willy Tarreau, HAProxy, también conocido como High Availability Proxy, es un equilibrador de carga HTTP y servidor proxy rápido y ligero. Tiene un bajo uso de CPU y es ocasionado por una pequeña huella de memoria. El balanceador de carga es utilizado por sitios web populares como StackOverflow, Twitter, Github y Tumblr, por mencionar solo algunos.

En esta guía, le mostraremos cómo configurar HAProxy como balanceador de carga para el servidor web Nginx en CentOS 7. El balanceador de carga se ubicará frente a 2 servidores web Nginx y distribuirá equitativamente las solicitudes HTTP a los servidores.

Algoritmo de equilibrio HAProxy

Este es el algoritmo que utiliza el equilibrador de carga para la selección de los servidores web al distribuir las cargas de trabajo.

1. turno rotativo

Este es el más simple de los algoritmos. Básicamente, cada nueva conexión será manejada por el siguiente servidor web. Por ejemplo, si tiene 4 servidores back-end, cada uno de ellos manejará las solicitudes en sucesión. Cuando se alcanza el último servidor web de la lista, el balanceador de carga comenzará desde arriba nuevamente con el primer servidor web.

2. Última conexión

Aquí, una nueva solicitud será manejada por el servidor con la menor cantidad de conexiones. Esto es útil cuando la carga y los tiempos de las solicitudes difieren con grandes variaciones.

Cómo empezar

Para comenzar, realice una lista de verificación previa al vuelo y asegúrese de tener lo siguiente.

1. Servidores CentOS 7

Nombre de host Dirección IP del servidor
equilibrador de carga 173.82.168.96
servidor-web-1 173.82.2.236
servidor-web-2 173.82.94.57

2. Acceso SSH a todos los servidores

A continuación se muestra una representación gráfica de la configuración.

Paso 1:Configure el archivo /etc/hosts en el balanceador de carga

Inicie sesión en el balanceador de carga mediante SSH y agregue las direcciones IP y los nombres de host de los servidores web Nginx como se muestra.

vim /etc/hosts


173.82.2.236    web-server-1

173.82.94.57    web-server-2

Guarde y salga del editor de texto vim.

A continuación, inicie sesión en cada uno de los servidores web (web-server-1 y web-server-2) y edite el /etc/hosts archivo para apuntar al equilibrador de carga.


173.82.168.96   load-balancer

Guarde y salga del editor de texto.

Paso 2:instalar y configurar HAProxy en el servidor del equilibrador de carga

El repositorio de HAProxy está disponible en el repositorio de CentOS. Para instalar y configurar HAProxy, primero inicie sesión y actualice los repositorios del sistema.

 yum update -y

Luego, instale HAProxy usando el comando:

yum -y install haproxy

Salida de muestra

Una vez que la instalación sea exitosa y esté completa, dirígete al directorio haproxy.

cd /etc/haproxy

Haga una copia de seguridad de haproxy.cfg renombrándolo a haproxy.cfg.bak

mv haproxy.cfg  haproxy.cfg.bak

A continuación, cree un nuevo archivo de configuración de HAproxy.

vim haproxy.cfg


#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    log         127.0.0.1 local2     #Log configuration

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy             #Haproxy running under user and group "haproxy"
    group       haproxy
    daemon

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

#---------------------------------------------------------------------
#HAProxy Monitoring Config
#---------------------------------------------------------------------
listen haproxy3-monitoring *:8080                #Haproxy Monitoring run on port 8080
    mode http
    option forwardfor
    option httpclose
    stats enable
    stats show-legends
    stats refresh 5s
    stats uri /stats                             #URL for HAProxy monitoring
    stats realm Haproxy\ Statistics
    stats auth Password123: Password123            #User and Password for login to the monitoring dashboard
    stats admin if TRUE
    default_backend app-main                    #This is optionally for monitoring backend

#---------------------------------------------------------------------
# FrontEnd Configuration
#---------------------------------------------------------------------
frontend main
    bind *:80
    option http-server-close
    option forwardfor
    default_backend app-main

#---------------------------------------------------------------------
# BackEnd round robin as balance algorithm
#---------------------------------------------------------------------
backend app-main
    balance roundrobin                                     #Balance algorithm
    option httpchk HEAD / HTTP/1.1\r\nHost:\ localhost    #Check the server application is up and healty - 200 status code
    server web-server-1 173.82.2.236:80 check                 #Nginx1
    server web-server-2 173.82.94.57:80 check                 #Nginx2

Tome nota de los servidores web que se han especificado en las últimas 2 líneas como se muestra en el resultado.

Guarde y salga del editor de texto.

A continuación, vamos a configurar el rsyslog daemon para registrar las estadísticas de HAProxy.

Edite el rsyslog.conf para permitir que rsyslog utilice el puerto UDP 514.

vim /etc/rsyslog.conf

Para permitir la conexión UDP a través del puerto 154, descomente las siguientes líneas.


$ModLoad imudp
$UDPServerRun 514

Guarde y salga del editor de texto.

A continuación, cree un nuevo archivo de configuración de HAProxy para syslog.

vim  /etc/rsyslog.d/haproxy.conf

Pegue la siguiente configuración


local2.=info     /var/log/haproxy-access.log    #For Access Log
local2.notice    /var/log/haproxy-info.log      #For Service Info - Backend, loadbalancer

Guarde y salga del editor de texto.

Continúe y reinicie rsyslog.

systemctl restart rsyslog

A continuación, inicie y habilite Haproxy para que se inicie en el arranque.


systemctl start haproxy
systemctl enable haproxy

Para confirmar que HaProxy está funcionando, ejecute:

systemctl status haproxy

En el siguiente paso, instalaremos Nginx en nuestros servidores web.

Paso 3:Instalación y configuración de Nginx

El único paso crucial que queda es la instalación de Nginx en cada uno de nuestros servidores web.

Pero primero, instale el repositorio EPEL como se muestra

yum install epel-release

A continuación, instale Nginx

yum install nginx -y

Salida de muestra

Con Nginx instalado en ambos servidores, vamos a modificar el index.html archivos en cada uno de los servidores web Nginx para crear una distinción entre cada servidor al simular con el balanceador de carga HAproxy.

Vaya al directorio html como se muestra:

cd /usr/share/nginx/html/

Copia de seguridad del archivo index.html

mv index.html index.html.bak

A continuación, cree un nuevo archivo index.html y pegue contenido de muestra.

Para el servidor web 1

echo "web-server-1. Hey ! This is your first web server" > index.html 

Para servidor web 2

echo "web-server-2. Hey ! This is your second web server" > index.html 

A continuación, inicie Nginx en ambos servidores web y confirme si el servicio se está ejecutando


systemctl start  nginx
systemctl status nginx

Pruebas de equilibrio de carga

Para verificar que todo salió bien, ejecute el siguiente comando repetidamente.

curl 173.82.168.96

Tu salida debería ser similar a esta.

Como puede observar con atención, con cada ejecución subsiguiente del comando curl, la salida alterna entre el primer y el segundo contenido del servidor web ¡Perfecto!

Ahora, intentemos probar usando el navegador web.

https://load-balancer-IP-address

Esto mostrará el contenido en cualquiera de los servidores web, en este caso, web-server-2.

Ahora, intente actualizar una o dos veces y la salida apuntará al otro servidor web, en este caso, web-server-1.

¡Impresionante! Esto confirma que nuestro balanceador de carga puede distribuir equitativamente las solicitudes HTTP entre nuestros servidores web.

PARA recopilar más estadísticas del navegador del balanceador de carga, la siguiente URL

https://load-balancer-IP:8080/stats

Use Password123 como nombre de usuario y Password como definimos en haproxy.cfg archivo de configuración.

Esto resume este tutorial sobre cómo configurar el balanceador de carga HAProxy para Nginx en CentOS 7. No dude en probarlo y compartir esta guía en sus redes sociales. Como siempre, agradeceremos sus comentarios.


Linux
  1. Cómo configurar NGINX como equilibrador de carga TCP/UDP en Linux

  2. Cómo configurar HAProxy en Ubuntu 16.04

  3. Cómo configurar el balanceador de carga HAProxy

  4. ¿Cómo configurar el servidor NTP en CentOS?

  5. ¿Cómo configurar VSFTPD en CentOS 7.x?

Cómo configurar Nginx como proxy inverso para Apache en Ubuntu 18.04 VPS

Cómo configurar HAProxy en CentOS 8

¿Cómo instalar Nginx en CentOS 7?

Cómo configurar un servidor NGINX RTMP para transmisión

Cómo instalar Nginx en CentOS 8

Cómo configurar el balanceador de carga Traefik con Docker en Ubuntu 20.04