Red de conocimiento informático - Material del sitio web - Cómo configurar un sistema de equilibrio de carga HTTP usando HAProxy en Linux

Cómo configurar un sistema de equilibrio de carga HTTP usando HAProxy en Linux

La creciente demanda actual de aplicaciones y servicios basados ​​en Internet ejerce una presión cada vez mayor sobre los administradores de TI. Sus aplicaciones de Internet deben permanecer disponibles ante aumentos repentinos de tráfico, aumentos en el tráfico autogenerado o desafíos internos como fallas de hardware y mantenimiento de emergencia. Incluso las prácticas modernas de desarrollo, operaciones y entrega continua pueden comprometer la confiabilidad y coherencia de los servicios de Internet.

La imprevisibilidad o la falta de rendimiento constante es algo que no puedes soportar. Entonces, ¿cómo se pueden eliminar estas deficiencias? En la mayoría de los casos, se espera que una solución de equilibrio de carga adecuada cumpla con este requisito. Hoy les presentaré cómo usar HAProxy para crear un sistema de equilibrio de carga HTTP.

Introducción al equilibrio de carga HTTP

El equilibrio de carga HTTP es una solución de red que se encarga de distribuir el tráfico HTTP o HTTPS entrante entre múltiples servidores que alojan el mismo contenido de la aplicación. Debido a que las solicitudes de aplicaciones se equilibran entre múltiples servidores disponibles, un sistema de equilibrio de carga evita que cualquier servidor de aplicaciones se convierta en un único punto de falla, mejorando así la disponibilidad y capacidad de respuesta general de las aplicaciones. También le permite reducir/escalar fácilmente el tamaño de su sistema de aplicaciones implementado con cargas de trabajo cambiantes agregando o eliminando servidores de aplicaciones adicionales.

¿Cuándo y dónde utilizar el equilibrio de carga?

Debido a que los sistemas de equilibrio de carga aumentan la utilización del servidor y maximizan la disponibilidad, debe usarlo siempre que sus servidores comiencen a enfrentar una carga pesada o esté planificando su arquitectura para un proyecto más grande. Es una buena práctica planificar con anticipación el uso de un sistema de equilibrio de carga. De esta manera, demostrará su utilidad cuando necesites aumentar el tamaño de tu entorno en el futuro.

¿Qué es HAProxy?

HAProxy es un popular sistema proxy y de equilibrio de carga de código abierto para servidores TCP/HTTP en plataformas GNU/Linux. HAProxy está diseñado con una arquitectura basada en eventos de un solo subproceso y puede hacer frente fácilmente a la velocidad de línea de las tarjetas de red 10G. Ahora se usa ampliamente en muchos entornos de producción. Sus características incluyen: controles de estado automáticos, algoritmos de equilibrio de carga personalizables, soporte para HTTPS/SSL y limitación de velocidad de sesión.

¿Qué queremos conseguir con este tutorial?

En este tutorial, recorreremos paso a paso el proceso de configuración de un sistema de equilibrio de carga basado en HAProxy para un servidor de sitio web HTTP.

Requisitos previos

Necesita al menos un servidor de sitio web (preferiblemente dos) para verificar la funcionalidad del sistema de equilibrio de carga. Suponemos que el servidor del sitio web HTTP backend ya está en funcionamiento.

Instalación de HAProxy en Linux

Para la mayoría de distribuciones, podemos instalar HAProxy usando el administrador de paquetes de su distribución.

Instalar HAProxy en Debian.

En Debian, necesitamos agregar funcionalidad de migración hacia atrás a Wheezy. Para hacer esto, cree un nuevo archivo llamado "backports.list" en /etc/apt/sources.list.d con el siguiente contenido:

Debbie/Debbie Ann jadea? Puerto maestro inverso

Actualice los datos de su repositorio e instale HAProxy.

¿# apto? Obtener actualizaciones #apt? Instale haproxy

Instalar HAProxy en Ubuntu

# apt? Instale haproxy

Instale HAProxy en Centos y RHEL.

# yum install haproxy

Configurar HAProxy

En este tutorial, asumimos que se han creado y ejecutado dos servidores de sitios web HTTP, y que sus direcciones IP son respectivamente Son 192.168.100.2 y 192.168.100.3. También asumimos que el sistema de equilibrio de carga se configurará en el servidor con la dirección IP 192.168.100.4.

Para que HAProxy funcione, necesita cambiar varios elementos en /etc /etc/haproxy/haproxy.cfg.

Estos cambios se describen en este capítulo. Si las configuraciones difieren entre distribuciones GNU/Linux, así se indicará en los párrafos correspondientes.

1. Configure la función de registro

Lo primero que debe hacer es establecer una función de registro adecuada para su HAProxy, que será muy útil para futuras depuraciones. El contenido de la configuración del registro se encuentra en la sección global de /etc /etc/haproxy/haproxy.cfg. Las siguientes son instrucciones específicas de la distribución para configurar el registro para haproxy.

CentOS o RHEL:

Para habilitar el inicio de sesión en CentOS/RHEL, ingrese:

log 127.0.0.1 local2

Reemplazar con:

log 127.0.0.1 local0

A continuación, cree un archivo de registro independiente para HAProxy en /var/log. Para hacer esto necesitamos cambiar la configuración actual de rsyslog. Para que la configuración sea simple y clara, crearemos un nuevo archivo llamado haproxy.conf en /etc/rsyslog.d/, con el siguiente contenido.

$ ModLoad IMU DP $ El servidor UDP ejecuta 514 $ plantilla ha proxy, " %msg%\n" local0. =Información? /var/log/ha registro de proxy; /var/log/haproxy? status.logHaproxy local0. * ~

Esta configuración aislará todos los mensajes de HAProxy basados ​​en la plantilla $TERM$ en un archivo de registro en /var/log. Ahora reinicie rsyslog para que los cambios surtan efecto.

#Service rsyslog restart

Debian o Ubuntu:

Para habilitar el registro de HAProxy en Debian o Ubuntu, ingrese:

Log/ dev/log local 0 log/dev/log local 1 notificación

Reemplazar con:

Registro 127.0.0.1 local 0

Lo siguiente es HAProxy configura un registro separado archivo editando un archivo llamado haproxy.conf en /etc/rsyslog.d/ (o 49-haproxy.conf en Debian). Su contenido es el siguiente.

$ ModLoad IMU DP $ El servidor UDP ejecuta 514 $ plantilla ha proxy, " %msg%\n" local0. =Información? /var/log/ha registro de proxy; /var/log/haproxy? status.logHaproxy local0. * ~

Esta configuración aislará todos los mensajes de HAProxy basados ​​en la plantilla $TERM$ en un archivo de registro en /var/log. Ahora reinicie rsyslog para que los cambios surtan efecto.

#Service rsyslog restart

2. Establecer valores predeterminados

El siguiente paso es establecer variables predeterminadas para HAProxy. Busque la sección de valores predeterminados en /etc/haproxy/haproxy.cfg y cámbiela a la siguiente configuración.

log global mode opciones http opción httplog dontlognull retry 3 opción reprogramación maxconn 20000 contimeout 5000 clitime out 50000 srvtimeout 50000

Se recomienda que el balanceador de carga HTTP utilice la configuración anterior, pero Puede que no sea la mejor solución para su entorno. En este caso, consulte la página de manual de referencia de HAProxy y realice los cambios y ajustes apropiados.

3. Configuración del clúster de servidores web

La configuración de Webfarm define los clústeres de servidores HTTP disponibles.

La mayoría de las configuraciones para el sistema de equilibrio de carga que creamos se colocarán aquí. Ahora crearemos una configuración básica donde se definirán nuestros nodos. Reemplace toda la configuración desde la sección de interfaz hasta el final del archivo con el siguiente código:

escuche webfarm *:80 modo http stats enable stats uri/ha proxy? estadísticas reino de estadísticas ha proxy \ estadísticas estadísticas autenticación ha proxy: balance de estadísticas cookie round robin LBN insertar opción de nocache indirecta httpcerrar opción f reenviar para servidor web 0192.168.100.2:80 nodo de cookie 1 verificar servidor web 02 192.168.100.3:80

La línea "listen webfarm *:80" define en qué interfaces escuchará nuestro sistema de equilibrio de carga. Para los fines de este tutorial, establecí este valor en "*", lo que hace que el sistema de equilibrio de carga escuche en todas nuestras interfaces. En un escenario real, esto puede no ser ideal y debería reemplazarse con una interfaz accesible desde Internet.

¿Las estadísticas habilitan las estadísticas uri /haproxy? stats stats domain ha proxy \ Statistics stats auth ha proxy:stats

La declaración de configuración anterior se puede encontrar en http://

El siguiente es un ejemplo de estadísticas de HAProxy.

La línea "balance roundrobin" define el tipo de equilibrio de carga que utilizaremos. En este tutorial, utilizaremos un algoritmo de programación por turnos simple, que es más que suficiente para el equilibrio de carga HTTP. HAProxy también proporciona otros tipos de equilibrio de carga:

Leastconn: el servidor con la menor cantidad de conexiones recibe las conexiones primero.

Fuente: aplica un hash a la dirección IP de origen y divide el peso total de los servidores en ejecución por el valor hash para determinar qué servidor recibirá la solicitud.

uri: la parte izquierda del uri (antes del signo de interrogación) tiene un hash y el peso total del servidor en ejecución se divide por el valor hash. El resultado determina qué servidor recibirá la solicitud.

Url_param: El parámetro Url especificado en la variable se consultará en la cadena de consulta de cada solicitud HTTP GET. Básicamente, puede bloquear solicitudes utilizando una URL (una URL especialmente diseñada para un nodo de equilibrio de carga específico).

Hdr(name):http header

La línea "cookie LBN insert indirect nocache" permite que nuestro sistema de equilibrio de carga almacene cookies persistentes, lo que nos permite identificar qué nodo se utiliza para la sesión. Estas cookies de nodo se almacenarán con el nombre especificado. En nuestro ejemplo, utilicé "LBN", pero puedes especificar el nombre que quieras. Node almacenará la cadena como el valor de la cookie.

Servidor web 01 192.168.100.2:80 verificación del nodo de cookie 1 servidor web 02 192.168.100.3:80 verificación del nodo de cookie 2

La parte anterior define el grupo de nodos del servidor del sitio web. Cada servidor está representado por un nombre interno (como web01 y web02), una dirección IP y una cadena de cookies única. La cadena de cookies se puede definir con cualquier nombre que necesite. Utilicé nodo1,nodo2...nodo(n) simple.

Iniciar HAProxy

Después de completar la configuración, puede iniciar HAProxy para verificar que todo esté funcionando como se esperaba.