Instalando el balanceador de carga HAProxy en CentOS

La traducción del artículo ha sido preparada en la víspera del inicio del curso «Administrador de Linux. Virtualización y Clustering»

Instalando el balanceador de carga HAProxy en CentOS

La balanceo de carga es una solución común para escalar horizontalmente aplicaciones web a través de múltiples hosts, proporcionando a los usuarios un único punto de acceso al servicio. HAProxy es uno de los programas de balanceo de carga más populares de código abierto, que también ofrece alta disponibilidad y funcionalidad de proxy.

HAProxy busca optimizar el uso de recursos, maximizar el ancho de banda, minimizar el tiempo de respuesta y evitar la sobrecarga de cada recurso individual. Puede ser instalado en múltiples distribuciones de Linux, como CentOS 8, que es donde nos centraremos en esta guía, así como en sistemas Debian 8 y Ubuntu 16.

Instalando el balanceador de carga HAProxy en CentOS

HAProxy es particularmente adecuado para sitios web con tráfico muy elevado y, por lo tanto, se utiliza con frecuencia para mejorar la fiabilidad y el rendimiento de configuraciones de servicios web con múltiples servidores. En esta guía, se describen los pasos para configurar HAProxy como un balanceador de carga en un host en la nube CentOS 8, que luego dirige el tráfico a sus servidores web.

Como requisito necesario para alcanzar los mejores resultados, debe tener al menos dos servidores web y un servidor para el balanceo de carga. En los servidores web debe estar en funcionamiento al menos un servicio web básico, como nginx o httpd, para poder verificar el balanceo de carga entre ellos.

Instalación de HAProxy en CentOS 8

Dado que HAProxy es una aplicación de código abierto en rápido desarrollo, la distribución disponible para usted en los repositorios estándar de CentOS puede no ser la versión más reciente. Para comprobar la versión actual, ejecute el siguiente comando:

sudo yum info haproxy

HAProxy siempre ofrece a elección tres versiones estables: las dos últimas versiones soportadas y una tercera, más antigua, que todavía recibe actualizaciones críticas. Siempre puede verificar la última versión estable indicada en el sitio web de HAProxy y luego decidir con cuál versión desea trabajar.

En esta guía, instalaremos la última versión estable 2.0, que aún no estaba disponible en los repositorios estándar al momento de escribir la guía. Necesitarás instalarla desde la fuente original. Pero primero, verifica si cumples con los requisitos necesarios para descargar y compilar el programa.

sudo yum install gcc pcre-devel tar make -y

Descarga el código fuente usando el siguiente comando. Puedes verificar si hay una versión más reciente disponible en la página de descarga de HAProxy.

wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz

Una vez completada la descarga, descomprime los archivos usando el siguiente comando:

tar xzvf ~/haproxy.tar.gz -C ~/

Navega al directorio descomprimido con los archivos fuente:

cd ~/haproxy-2.0.7

Luego, compila el programa para tu sistema:

make TARGET=linux-glibc

Y, finalmente, instala HAProxy:

sudo make install

Ahora HAProxy está instalada, pero se requieren algunos pasos adicionales para que funcione. Continuemos con la configuración del software y los servicios a continuación.

Configuración de HAProxy para tu servidor

Ahora añade los siguientes directorios y archivo de estadísticas para las entradas de HAProxy:

sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy 
sudo touch /var/lib/haproxy/stats

Crea un enlace simbólico para los archivos binarios, para que puedas ejecutar los comandos de HAProxy como un usuario normal:

sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy

Si deseas agregar el proxy a la sistema como un servicio, copia el archivo haproxy.init de examples a tu directorio /etc/init.d. Edita los permisos del archivo para que el script se ejecute, y luego recarga el demonio systemd:

sudo cp ~/haproxy-2.0.7/examples/haproxy.init /etc/init.d/haproxy
sudo chmod 755 /etc/init.d/haproxy
sudo systemctl daemon-reload

También necesitas permitir que el servicio se reinicie automáticamente al inicio del sistema:

sudo chkconfig haproxy on

Por conveniencia, también se recomienda agregar un nuevo usuario para ejecutar HAProxy:

sudo useradd -r haproxy

Después de esto, puedes volver a verificar el número de versión instalada usando el siguiente comando:

haproxy -v
HA-Proxy version 2.0.7 2019/09/27 - https://haproxy.org/

En nuestro caso, la versión debería ser 2.0.7, como se muestra en el ejemplo de salida anterior.

Por último, el firewall en CentOS 8 es bastante restrictivo por defecto para este proyecto. Usa los siguientes comandos para permitir los servicios necesarios y reiniciar el firewall:

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reload

Configuración del equilibrador de carga

La configuración de HAProxy es un proceso bastante sencillo. Básicamente, lo único que necesitas hacer es indicar a HAProxy qué conexiones debe escuchar y a dónde debe retransmitirlas.

Esto se realiza creando un archivo de configuración /etc/haproxy/haproxy.cfg con las configuraciones definitorias. Puedes leer sobre los parámetros de configuración de HAProxy en la página de documentación, si deseas saber más al respecto.

Equilibrio de carga en el nivel de transporte (capa 4)

Comencemos con la configuración básica. Crea un nuevo archivo de configuración, usando por ejemplo vi con el siguiente comando:

sudo vi /etc/haproxy/haproxy.cfg

Agrega las siguientes secciones al archivo. Reemplaza server_name por lo que debe llamar a tus servidores en la página de estadísticas, y private_ip — las direcciones IP privadas de los servidores a los que deseas dirigir el tráfico web. Puedes verificar las direcciones IP privadas en el panel de control de UpCloud y en la pestaña Red privada en el menú Red.

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 http_front
   bind *:80
   stats uri /haproxy?stats
   default_backend http_back

backend http_back
   balance roundrobin
   server server_name1 private_ip1:80 check
   server server_name2 private_ip2:80 check

Esto define un equilibrador de carga en el nivel de transporte (capa 4) con el nombre externo http_front, que escucha en el puerto 80, y luego dirige el tráfico al backend por defecto llamado http_back. La estadística adicional /haproxy?stats conecta la página de estadísticas en la dirección especificada.

Diferentes algoritmos de balanceo de carga.

Especificar servidores en la sección del backend permite a HAProxy usar estos servidores para equilibrar la carga de acuerdo con el algoritmo de round-robin cuando es posible.

Los algoritmos de balanceo se utilizan para determinar a qué servidor del backend se transmite cada conexión. Aquí hay algunas opciones útiles:

  • Roundrobin: cada servidor se utiliza por turnos según su peso. Este es el algoritmo más suave y justo, cuando el tiempo de procesamiento de los servidores permanece distribuido uniformemente. Este algoritmo es dinámico, lo que permite ajustar el peso del servidor sobre la marcha.
  • Leastconn: se elige el servidor con la menor cantidad de conexiones. Se realiza un recorrido cíclico entre los servidores con la misma carga. Se recomienda el uso de este algoritmo para sesiones largas, como LDAP, SQL, TSE, etc., pero no es muy adecuado para sesiones cortas como HTTP.
  • Primero: el primer servidor con ranuras disponibles para conexión recibe la conexión. Los servidores se seleccionan desde el identificador numérico más bajo hasta el más alto, que por defecto corresponde a la posición del servidor en la granja. Una vez que el servidor alcanza el valor maxconn, se utiliza el siguiente servidor.
  • Fuente: La dirección IP del origen se hash y se divide por el peso total de los servidores en ejecución para determinar qué servidor recibirá la solicitud. Así, la misma dirección IP del cliente siempre será asignada al mismo servidor, mientras que los servidores permanecen inalterados.

Configuración de balanceo de carga a nivel de aplicación (capa 7)

Otra opción disponible es configurar el balanceador de carga para operar a nivel de aplicación (capa 7), lo que es útil cuando partes de su aplicación web están distribuidas en diferentes hosts. Esto se puede lograr mediante la regulación de la transmisión de conexiones, por ejemplo, por URL.

Abre el archivo de configuración de HAProxy con un editor de texto:

sudo vi /etc/haproxy/haproxy.cfg

Luego, configure los segmentos frontend y backend de acuerdo con el siguiente ejemplo:

frontend http_front
   bind *:80
   stats uri /haproxy?stats
   acl url_blog path_beg /blog
   use_backend blog_back if url_blog
   default_backend http_back

backend http_back
   balance roundrobin
   server server_name1 private_ip1:80 check
   server server_name2 private_ip2:80 check

backend blog_back
   server server_name3 private_ip3:80 check

El frontend declara una regla ACL llamada url_blog, que se aplica a todas las conexiones con rutas que comienzan con /blog. Use_backend determina que las conexiones que coincidan con la condición url_blog deben ser atendidas por el backend llamado blog_back, mientras que todas las demás solicitudes son manejadas por el backend por defecto.

En el lado del backend, la configuración establece dos grupos de servidores: http_back, como antes, y uno nuevo llamado blog_back, que atiende conexiones a example.com/blog.

Después de cambiar la configuración, guarda el archivo y reinicia HAProxy con el siguiente comando:

sudo systemctl restart haproxy

Si al iniciar recibió advertencias o mensajes de error, verifique la configuración para ver si están presentes y asegúrese de haber creado todos los archivos y carpetas necesarios, luego intente reiniciar de nuevo.

Prueba de configuración

Cuando HAProxy esté configurado y en funcionamiento, abra la dirección IP pública del servidor balanceador de carga en su navegador y verifique si se ha conectado correctamente al backend. El parámetro stats uri en la configuración crea una página de estadísticas en la dirección especificada.

http://load_balancer_public_ip/haproxy?stats

Cuando cargue la página de estadísticas, si todos sus servidores se muestran en verde, ¡la configuración fue exitosa!

Instalando el balanceador de carga HAProxy en CentOS

La página de estadísticas contiene información útil para rastrear sus hosts web, incluyendo tiempo de actividad/inactividad y el número de sesiones. Si el servidor está marcado en rojo, asegúrese de que el servidor esté encendido y que pueda hacer ping desde la máquina del balanceador de carga.

Si su balanceador de carga no responde, asegúrese de que las conexiones HTTP no estén bloqueadas por el firewall. También asegúrese de que HAProxy esté en funcionamiento usando el siguiente comando:

sudo systemctl status haproxy

Proteger la página de estadísticas con contraseña

Sin embargo, si la página de estadísticas está simplemente expuesta en el frontend, está abierta al público, lo cual puede no ser una buena idea. En su lugar, puede asignarle un puerto propio, agregando el siguiente ejemplo al final de su archivo haproxy.cfg. Reemplace username y password por algo seguro:

listen stats
   bind *:8181
   stats enable
   stats uri /
   stats realm Estadísticas de Haproxy
   stats auth usuario:contraseña

Después de agregar el nuevo grupo de oyentes, elimine el antiguo enlace a stats uri del grupo del frontend. Cuando termine, guarde el archivo y reinicie HAProxy.

sudo systemctl restart haproxy

Luego vuelva a abrir el balanceador de carga con el nuevo número de puerto e inicie sesión con el nombre de usuario y la contraseña que especificó en el archivo de configuración.

http://load_balancer_public_ip:8181

Asegúrese de que todos sus servidores todavía se muestran en verde, luego abra solo la IP del balanceador de carga sin ningún número de puerto en su navegador.

http://load_balancer_public_ip/

Si en sus servidores internos hay al menos algún tipo de diversidad en las páginas de destino, notará que cada vez que recarga la página recibe una respuesta de un host diferente. Puede probar varios algoritmos de balanceo en la sección de configuración o consultar la documentación completa.

Conclusión: balanceador de carga HAProxy

¡Felicitaciones por configurar exitosamente el balanceador de carga HAProxy! Incluso con una configuración básica de balanceo de carga, puede mejorar significativamente el rendimiento y la disponibilidad de su aplicación web. Esta guía es solo una introducción al balanceo de carga con HAProxy, que puede hacer mucho más de lo que se puede describir en una breve guía de configuración. Le recomendamos que experimente con diferentes configuraciones utilizando la amplia documentación, disponible para HAProxy, y luego comience a planificar el balanceo de carga para su entorno de producción.

Al utilizar varios hosts para proteger su servicio web con capacidad adicional, el mismo balanceador de carga todavía puede representar un punto único de falla. Puede aumentar aún más la alta disponibilidad configurando una IP flotante entre varios balanceadores de carga. Puede aprender más sobre esto en nuestro artículo sobre IP flotantes en UpCloud.

Más sobre el curso «Administrador de Linux. Virtualización y Clustering»***

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster