Instalación del equilibrador de carga HAProxy en CentOS

La traducción del artículo se preparó la víspera del inicio del curso. Administrador de Linux. Virtualización y Clustering»

Instalación del equilibrador de carga HAProxy en CentOS

El balanceo de carga es una solución común para escalar aplicaciones web en múltiples hosts mientras brinda a los usuarios un único punto de acceso a un servicio. HAProxy es uno de los software de equilibrio de carga de código abierto más populares que también proporciona alta disponibilidad y funcionalidad de proxy.

HAProxy tiene como objetivo optimizar el uso de recursos, maximizar el rendimiento, minimizar el tiempo de respuesta y evitar la sobrecarga de un solo recurso. Se puede instalar en una variedad de distribuciones de Linux, como CentOS 8, en la que nos centraremos en esta guía, así como en sistemas Debian 8 и Ubuntu 16.

Instalación del equilibrador de carga HAProxy en CentOS

HAProxy es particularmente adecuado para sitios web de muy alto tráfico y, por lo tanto, a menudo se usa para mejorar la confiabilidad y el rendimiento de las configuraciones de servicios web de múltiples servidores. Esta guía describe los pasos para configurar HAProxy como equilibrador de carga en un host en la nube CentOS 8, que luego dirige el tráfico a sus servidores web.

Como requisito previo para obtener los mejores resultados, debe tener al menos dos servidores web y un servidor de equilibrio de carga. Los servidores web deben ejecutar al menos un servicio web básico como nginx o httpd para verificar el equilibrio de carga entre ellos.

Instalación de HAProxy en CentOS 8

Debido a que HAProxy es una aplicación de código abierto de rápido desarrollo, es posible que la distribución disponible en los repositorios estándar de CentOS no sea la última versión. Para conocer la última versión, ejecute el siguiente comando:

sudo yum info haproxy

HAProxy siempre ofrece tres versiones estables para elegir: las dos versiones compatibles más recientes y la tercera versión anterior que aún recibe actualizaciones críticas. Siempre puede consultar la última versión estable que figura en el sitio web de HAProxy y luego decidir con qué 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 en el momento de escribir este artículo. Deberá instalarlo desde la fuente original. Pero primero, comprueba si has cumplido las condiciones necesarias para descargar y compilar el programa.

sudo yum install gcc pcre-devel tar make -y

Descargue el código fuente usando el siguiente comando. Puedes comprobar si hay una versión más reciente disponible en 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 que se complete la descarga, extraiga los archivos usando el siguiente comando:

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

Cambie al directorio fuente descomprimido:

cd ~/haproxy-2.0.7

Luego compila el programa para tu sistema:

make TARGET=linux-glibc

Y finalmente instale HAProxy:

sudo make install

Ahora HAProxy está instalado, pero requiere algunas manipulaciones adicionales para que funcione. Sigamos configurando el software y los servicios a continuación.

Configurando HAProxy para su servidor

Ahora agregue los siguientes directorios y archivos 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

Cree un enlace simbólico para los archivos binarios para que pueda ejecutar comandos HAProxy como un usuario normal:

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

Si desea agregar el proxy a su sistema como un servicio, copie el archivo haproxy.init de los ejemplos a su directorio /etc/init.d. Edite los permisos del archivo para que se ejecute el script, luego vuelva a cargar 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 debe permitir que el servicio se reinicie automáticamente al iniciar el 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 eso, puedes verificar nuevamente el número de versión instalada con 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 resultado de muestra anterior.

Finalmente, el firewall predeterminado en CentOS 8 es bastante restrictivo para este proyecto. Utilice los siguientes comandos para habilitar los servicios necesarios y restablecer 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

Configurar un equilibrador de carga

Configurar HAProxy es un proceso bastante simple. Básicamente, todo lo que necesita hacer es decirle a HAProxy qué conexiones debe escuchar y dónde transmitirlas.

Esto se hace creando un archivo de configuración /etc/haproxy/haproxy.cfg con configuraciones de definición. Puede leer sobre las opciones de configuración de HAProxy en la página de documentaciónsi quieres saber más al respecto.

Equilibrio de carga en la capa de transporte (capa 4)

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

sudo vi /etc/haproxy/haproxy.cfg

Agregue las siguientes secciones al archivo. Reemplazar nombre del servidor el que debería llamar a sus servidores en la página de estadísticas, y ip_privada - direcciones IP privadas de los servidores a los que desea dirigir el tráfico web. Puedes comprobar direcciones IP privadas. en el panel de control de UpCloud y en la pestaña Red privada en el menú Nuestra 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 de la capa de transporte (capa 4) denominado externamente http_front escuchando en el puerto 80, que luego enruta el tráfico al backend predeterminado denominado http_back. Estadísticas adicionales /haproxy?stats conecta la página de estadísticas a la dirección especificada.

Varios algoritmos de equilibrio de carga.

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

Los algoritmos de equilibrio se utilizan para determinar a qué servidor del backend se envía cada conexión. Estas son algunas de las opciones útiles:

  • Todos contra todos: cada servidor se utiliza por turnos según su peso. Este es el algoritmo más fluido y justo cuando el tiempo de procesamiento de los servidores permanece distribuido uniformemente. Este algoritmo es dinámico, lo que le permite ajustar el peso del servidor sobre la marcha.
  • Menos conexión: Se selecciona el servidor con la menor cantidad de conexiones. El round robin se realiza entre 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 de conexión disponibles recibe la conexión. Los servidores se seleccionan desde el ID numérico más bajo hasta el más alto, que de forma predeterminada 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 de origen se procesa mediante hash y se divide por el peso total de los servidores en ejecución para determinar qué servidor recibirá la solicitud. Por lo tanto, la misma dirección IP del cliente siempre irá al mismo servidor, mientras que los servidores permanecen sin cambios.

Configuración del equilibrio de carga en la capa de aplicación (capa 7)

Otra opción disponible es configurar el balanceador de carga para que funcione en la capa de la aplicación (capa 7), lo cual es útil cuando partes de su aplicación web están ubicadas en diferentes hosts. Esto se puede lograr limitando la transferencia de la conexión, por ejemplo mediante URL.

Abra 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 según 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

La interfaz declara una regla ACL llamada url_blog que se aplica a todas las conexiones con rutas que comienzan con /blog. Use_backend especifica que las conexiones que coincidan con la condición url_blog deben ser atendidas por el backend llamado blog_back y todas las demás solicitudes son manejadas por el backend predeterminado.

En el back-end, la configuración establece dos grupos de servidores: http_back, como antes, y uno nuevo llamado blog_back, que maneja las conexiones a example.com/blog.

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

sudo systemctl restart haproxy

Si recibe advertencias o errores al iniciar, verifique la configuración y asegúrese de haber creado todos los archivos y carpetas necesarios, y luego intente reiniciar nuevamente.

Probando la configuración

Una vez que HAProxy esté configurado y ejecutándose, abra la dirección IP pública del servidor del balanceador de carga en un navegador y verifique si se conectó al backend correctamente. 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 cargas la página de estadísticas, si todos tus servidores están en verde, ¡entonces la configuración fue exitosa!

Instalación del equilibrador de carga HAProxy en CentOS

La página de estadísticas contiene información útil para rastrear sus servidores web, incluido el tiempo de actividad/inactividad y el número de sesiones. Si el servidor está marcado en rojo, asegúrese de que esté activo y de que pueda hacer ping desde el equilibrador de carga.

Si su balanceador de carga no responde, asegúrese de que un firewall no esté bloqueando las conexiones HTTP. También asegúrese de que HAProxy esté funcionando con el siguiente comando:

sudo systemctl status haproxy

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

Sin embargo, si la página de estadísticas solo aparece en la interfaz, entonces está abierta al público, lo que puede no ser una buena idea. En su lugar, puede asignarle su propio número de puerto agregando el siguiente ejemplo al final de su archivo haproxy.cfg. Reemplazar nombre de usuario и la contraseña a algo seguro:

listen stats
   bind *:8181
   stats enable
   stats uri /
   stats realm Haproxy Statistics
   stats auth username:password

Después de agregar el nuevo grupo de oyentes, elimine la referencia de uri de estadísticas anterior del grupo de interfaz. Cuando termine, guarde el archivo y reinicie HAProxy.

sudo systemctl restart haproxy

Luego abra nuevamente 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 aún estén verdes y luego abra solo la IP del equilibrador de carga sin ningún número de puerto en su navegador.

http://load_balancer_public_ip/

Si tiene al menos alguna variedad de páginas de destino en sus servidores internos, notará que cada vez que recarga la página, obtiene una respuesta de un host diferente. Puedes probar diferentes algoritmos de equilibrio en la sección de configuración o ver documentación completa.

Conclusión: balanceador de carga HAProxy

¡Felicitaciones por configurar exitosamente su balanceador de carga HAProxy! Incluso con una configuración básica de equilibrio de carga, puede mejorar enormemente el rendimiento y la disponibilidad de su aplicación web. Esta guía es sólo una introducción al equilibrio de carga con HAProxy, que es capaz de hacer mucho más de lo que se puede describir en una guía de configuración rápida. Recomendamos experimentar con diferentes configuraciones usando documentación extensadisponible para HAProxy y luego comenzar a planificar el equilibrio de carga para su entorno de producción.

Al usar múltiples hosts para proteger su servicio web con espacio libre, el balanceador de carga en sí mismo aún puede representar un punto de falla. Puede mejorar aún más la alta disponibilidad configurando una IP flotante entre varios balanceadores de carga. Puedes encontrar más información sobre esto en nuestro artículo sobre direcciones IP flotantes en UpCloud.

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

Fuente: habr.com

Añadir un comentario