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

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

Para garantizar la máxima disponibilidad, escalabilidad y alto rendimiento de las aplicaciones web, ahora es común implementar tecnologías que introducen redundancia, como la agrupación en clústeres de servidores y el equilibrio de carga. Por ejemplo, configurar un clúster de servidores que ejecuten las mismas aplicaciones y luego implementar balanceadores de carga frente a ellos para distribuir el tráfico.

HAProxy. es un equilibrador de carga TCP/HTTP. de alta disponibilidad, de código abierto, potente, de alto rendimiento, confiable, seguro y ampliamente utilizado, con un servidor proxy y un terminador SSL/TLS creado para sitios web con mucho tráfico. Funciona correctamente en Linux. Solaris. FreeBSD. OpenBSD. y en sistemas operativos AIX.

Esta guía muestra cómo configurar un balanceador de carga de alta disponibilidad dedicado con HAProxy. en CentOS 8. para controlar el tráfico en un clúster de NGINX. servidores web. También demuestra cómo configurar la terminación SSL/TLS. en HAProxy.

Requisitos previos:

Un total de 4 servidores con una instalación mínima de CentOS 8.

Configuración del entorno de prueba ———–Configuración del servidor HAProxy———– HA Proxy Server-nombre de host: haproxy-server.tecmint.lan; IP: 10.42.0.247 Dominio del sitio de prueba: www.tecmint.lan ———–Configuración de servidores web cliente———– Servidor web # 1-nombre de host: websrv1.tecmint.lan; IP: 10.42.0.200 Web Server # 2-nombre de host: websrv2.tecmint.lan; IP: 10.42.0.21 Web Server # 3-nombre de host: websrv3.tecmint.lan; IP: 10.42.0.34

Paso 1: Configuración del servidor HTTP Nginx en las máquinas cliente

1.. Inicie sesión en todos sus clientes CentOS 8. máquinas e instale el servidor web Nginx. usando el administrador de paquetes dnf como se muestra.

# dnf instale Nginx freestar.config.enabled_slots.push (LocationName: “tecmint_incontent”, slotId: “tecmint_incontent” );

2.. A continuación, inicie el servicio Nginx. por ahora, habilítelo para que se inicie automáticamente al arrancar el sistema y confirme que está en funcionamiento marcando su estado, usando los comandos systemctl (haga esto en todas las máquinas cliente).

# systemctl start nginx # systemctl enable nginx # systemctl status nginx

3.. Además, si el firewalld El servicio se está ejecutando en todas las máquinas cliente (lo cual puede verificar ejecutando systemctl start firewalld), debe agregar los servicios HTTP. y HTTPS. en la configuración del firewall para permitir que requ Los ests del balanceador de carga pasan a través del firewall a los servidores web Nginx. Luego, vuelva a cargar el servicio firewalld. para efectuar los nuevos cambios (haga esto en todas las máquinas cliente).

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

4.. A continuación, abra un navegador web en sus máquinas locales y pruebe si la instalación de Nginx. funciona bien. Utilice la IP del cliente para navegar, una vez que vea la página de prueba de Nginx. significa que el servidor web instalado en la máquina cliente está funcionando correctamente.

 Probar la instalación de Nginx en todas las máquinas cliente de CentOS 8  Probar la instalación de Nginx en todas las máquinas cliente de CentOS 8 Prueba Nginx Instalación en todas las máquinas cliente de CentOS 8

5.. A continuación, necesitamos crear páginas de prueba en las máquinas cliente que usaremos más adelante para probar la configuración de HAProxy. .

———–Servidor web # 1———– # cp/usr/share/nginx/html/index. html/usr/share/nginx/html/index.html.orig # echo “Mostrando el sitio de websrv1.tecmint.lan”>/usr/share/nginx/html/index.html ———–Servidor web n. ° 2———– # cp/usr/share/nginx/html/index.html/usr/share/nginx/html/index.html. orig # echo “Mostrando el sitio de websrv2.tecmint.lan”>/usr/share/nginx/html/index.html ———–Servidor web n. ° 3———– # cp/usr/share/nginx/html/index.html/usr/share/nginx/html/index.html.orig # echo “Mostrando el sitio de websrv3.tecmint.lan”>/usr/share/nginx/html/index.html

Paso 2: Instalar y configurar el servidor HAProxy en CentOS 8

6.. Ahora instale HAProxy. en el servidor HAProxy. ejecutando el siguiente comando.

# dnf install haproxy

7.. A continuación, inicie HAProxy. habilítelo para iniciar automáticamente un t arranque del sistema y verifique su estado.

# systemctl start haproxy # systemctl enable haproxy # systemctl status haproxy  Verificar el estado de HAProxy en CentOS 8  Verifique el estado de HAProxy en CentOS 8 Verificar el estado de HAProxy en CentOS 8

8.. Ahora configuraremos HAProxy usando el siguiente archivo de configuración.

# vi/etc/haproxy/haproxy.cfg

El archivo de configuración está dividido en cuatro secciones principales.

  • configuración global. establece los parámetros de todo el proceso.
  • valores predeterminados. esta sección establece los parámetros predeterminados para todas las demás secciones después de su declaración.
  • Interfaz. esta sección describe un conjunto de sockets de escucha que aceptan conexiones de cliente.
  • Backend. esta sección describe un conjunto de servidores a los que el proxy conectarse para reenviar las conexiones entrantes.

Para comprender las opciones de configuración global. y valores predeterminados. lea la documentación de HAProxy (enlace proporcionado al final del artículo). Para esta guía, usaremos los valores predeterminados.

Configurar el registro de HAProxy

9.. HAProxy. una vez implementado jugará un papel importante en su infraestructura de TI, por lo que configurar el registro es un requisito básico; esto le permite obtener información sobre cada conexión a sus servidores web backend.

El parámetro de registro. (resaltado en la siguiente captura de pantalla) declara un Syslog. global servidor (como rsyslog, el predeterminado en CentOS) que recibirá mensajes de registro. Aquí se puede declarar más de un servidor.

La configuración predeterminada apunta a localhost. ( 127.0.0.1. y local2. es el código de instalación predeterminado que se utiliza para identificar los mensajes de registro de HAProxy en rsyslog.

 Parámetro de registro predeterminado de HAProxy  Parámetro de registro predeterminado de HAProxy Parámetro de registro predeterminado de HAProxy

10.. A continuación, tu n Es necesario decirle al servidor rsyslog. cómo recibir y procesar los mensajes de registro de HAProxy. Abra el archivo de configuración rsyslog en /etc/rsyslog.conf. o cree un nuevo archivo dentro del directorio /etc/rsyslog.d. por ejemplo /etc/rsyslog .d/haproxy.conf.

# vi/etc/rsyslog.d/haproxy.conf

Copie y pegue la siguiente configuración para recopilar el registro con UDP. en el puerto predeterminado 514.

$ ModLoad imudp $ UDPServerAddress 127.0.0.1 $ UDPServerRun 514

También agregue estas líneas para indicar a rsyslog. que escriba en dos archivos de registro separados según la gravedad, donde local2. es el código de instalación definido en la configuración de HAProxy anterior.

local2. */var/log/haproxy-traffic.log local2.notice/var/log/haproxy-admin.log

11.. Guarde el archivo y ciérrelo. Luego reinicie el servicio rsyslog. para aplicar los cambios recientes.

# systemctl restart rsyslog Configurando HAProxy Front-end y Back-ends

12.. En esta sección, demostraremos cómo configurar los proxies de front-end y back-end. Vuelva al archivo de configuración de HAProxy. y modifique las secciones predeterminadas de front-end y back-end de la siguiente manera. No entraremos en una explicación detallada de cada parámetro, siempre puede consultar la documentación oficial.

La siguiente configuración define una sección de escucha. que se utiliza para servir el Página de estadísticas de HAProxy. El parámetro bind. asigna un oyente a una dirección IP determinada (* para todos en este caso) y puerto. ( 9000. .

La configuración habilitar. de estadísticas habilita la página de estadísticas a la que se accederá mediante URI/stats. (es decir, http://server_ip: 9000/stats).

La configuración auth. de las estadísticas se usa para agregar una autenticación básica al acceder a la página (reemplace haproxy. y [email protected]. con un nombre de usuario y contraseña de su elección).

listen stats bind *: 9000 stats enable stats hide-version stats uri/stats stats admin if LOCALHOST stats auth haproxy: [email protected]

13. La siguiente configuración define una sección de interfaz llamada TL. (puede dar un nombre de su agrado). El parámetro modo. define el modo en el que opera HAProxy.

El parámetro acl. (Lista de control de acceso) se usa para tomar una decisión basada en el contenido extraído de la solicitud. En este ejemplo, la solicitud se considera HTTP. simple si no se realiza a través de SSL.

Luego, el http-request set-header se usa para agregar un encabezado HTTP a la solicitud. Esto ayuda a informar a Nginx. que la solicitud inicial se realizó a través de HTTP. (o mediante el puerto 80. .

El default_backend. o la directiva use_backend. define los servidores backend, en este caso, referenciados por TL_web_servers.

Tenga en cuenta que HAProxy. devolverá un “ Error 503 Servicio no disponible. si una solicitud no es enrutada por una directiva use_backend. o default_backend.

frontend TL bind *: modo 80 http acl http ssl_fc, no http-request set-header X-Forward-Protocol http si http default_backend TL_web_servers

14.. Entonces necesitamos definir una sección de backend donde la configuración balance. define cómo HAProxy. selecciona los servidores back-end para procesar una solicitud si ningún método de persistencia anula esa selección.

La directiva cookie. habilita la persistencia basada en cookies. le indica a HAProxy. que envíe una cookie llamada SERVERID. al cliente y asociarlo con el ID. del servidor que dio la respuesta inicial.

La directiva servidor. se usa para definir los servidores ascendentes en el formato nombre_servidor. (por ejemplo, websrv1. , IP_servidor: puerto. y opciones.

Una opción clave es comprobar. que le dice a HAProxy. que siga comprobando la disponibilidad de un servidor e informe en la página de estadísticas.

backend TL_web_servers modo http balance opción roundrobin httpchk HEAD/cookie SERVERUID insertar servidor indirecto nocache websrv1 10.42.0.200:80 cookie websrv1 comprobar servidor websrv2 10.42.0.21:80 cookie websrv2 comprobar servidor websrv3 10.42.0.34:80 cookie websrv3 comprobar

Comentario cualquier otra sección de frontend y backend como se muestra en la captura de pantalla que sigue. Guarde el archivo y ciérrelo.

Configuración de front-end y back-end de HAProxy  Configuración de HAProxy Front-end y Back-ends Configuración de HAProxy Front-end y Back-ends

15.. Ahora reinicie HAProxy. para aplicar los nuevos cambios.

# systemctl restart haproxy

16.. Luego, asegúrese de que el HTTP. (puerto 80. y los servicios HTTPS. (puerto 433. se abren en el firewall para aceptar las solicitudes de los clientes de la siguiente manera. Además, abra el puerto 9000. en el firewall para acceder a la página de estadísticas y vuelva a cargar la configuración del firewall.

# firewall-cmd–zone = public–permanent–add-service = http # firewall-cmd–zone = public–permanent –add-service = https # firewall-cmd–zone = public–permanent–add-port = 9000/tcp # firewall-cmd–reload

Paso 3 : Prueba de la configuración de HAProxy y visualización de estadísticas

17.. Ahora es el momento de probar la configuración de HAPrxoy. En la máquina de escritorio local desde la que está accediendo a todos los servidores, agregue la siguiente línea en el archivo /etc/hosts. para permitirnos usar el dominio del sitio ficticio.

10.42.0.247 www.tecmint.lan

18.. A continuación, abra un navegador y navegue utilizando la dirección del servidor o el dominio del sitio.

http://10.42.0.247/O http://www.tecmint.lan/ Comprobar la configuración de HAProxy Verifique la configuración de HAProxy p> 19.. Para acceder a la página de estadísticas de HAProxy. use la siguiente dirección.

http://10.42.0.247:9000/stats

Luego use el nombre de usuario y la contraseña que definió en el archivo de configuración de HAProxy (consulte el parámetro de autenticación de estadísticas).

Frontend TL bind *: 80 bind *: 443 ssl crt/etc/ssl/tecmint.lan/tecmint.pem esquema de redireccionamiento https if! ssl_fc modo http acl http ssl_fc, no acl https ssl_fc http-request set-header Protocolo-reenviado-X http si http http-solicitud-conjunto-encabezado-Protocolo-reenviado-X https si https default_backend TL_web_servers  Configurar HAProxy Front-end con SSL  Configurar HAProxy Front-end con SSL Configurar HAProxy Front-end con SSL

Guarde el archivo y ciérrelo.

22.. Luego reinicie el servidor HAProxy vice para aplicar los nuevos cambios.

# systemctl restart haproxy.service

23.. A continuación, abra un navegador web e intente acceder al sitio una vez más. El navegador mostrará un error debido al certificado autofirmado, haga clic en Avanzado. para continuar.

 Error de conexión HAProxy SSL  Error de conexión HAProxy SSL Error de conexión HAProxy SSL  Continúe con la conexión Continuar con la conexión Continuar con conexión  Acceder al sitio mediante HTTPS  Acceder al sitio mediante HTTPS Acceder al sitio mediante HTTPS

¡Eso es todo por ahora! Cada aplicación web tiene su propio conjunto de requisitos, debe diseñar y configurar el equilibrio de carga para que se adapte a su infraestructura de TI y a los requisitos de la aplicación.

Para obtener más información sobre algunas de las opciones de configuración utilizadas en esta guía, y en general, cómo utilizar HAProxy. consulte la documentación oficial de la edición comunitaria de HAProxy o la documentación de la versión empresarial de HAProxy. Puede publicar cualquier pregunta o comentario a través del formulario de comentarios a continuación.