GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Uso de HAProxy para el equilibrio de carga en la nube E2E:configuración de la política Round-Robin

HAProxy es un equilibrador de carga de código abierto con un rendimiento impresionante. Se utiliza para aplicaciones web incluso a escala planetaria como Twitter. Puede equilibrar la carga de aplicaciones en red a través de TCP (Capa 3) y HTTP (Capa 7). También falla las solicitudes a instancias de servidor activo cuando es necesario y, por lo tanto, ofrece alta disponibilidad (HA).

E2E Networks ofrece nodos designados con potencia informática adecuada para ejecutar un equilibrador de carga de alto rendimiento como HAProxy. Estos nodos se denominan nodos Equilibrador de carga virtual (VLB). En este blog, explicaremos cómo configurar HAProxy en un nodo de Virtual Load Balancer en E2E Cloud. Usaremos HAProxy en la capa 7, para aplicaciones PHP frontend que se ejecutan en servidores web Apache. En la segunda y última parte de este blog, repasaremos algunos pasos adicionales que la mayoría de los administradores de sitios web deben realizar, además de la configuración básica. Estos pasos adicionales son:implementar la permanencia de la sesión y asegurar el acceso al sitio web mediante SSL. En gran medida, estos dos blogs son independientes y, juntos, deberían ayudar a los administradores de sistemas a configurar HAProxy sin problemas como el equilibrador de carga frontal para las aplicaciones web implementadas en E2E Cloud.

Instalación y configuración básica

Aunque nuestro enfoque está en HAProxy, comenzaremos con la instalación de dos servidores web, a los que se pueden enrutar las solicitudes HTTP. Después de iniciar sesión en nuestro panel de E2E Networks, seguimos los enlaces para "Crear nodo" y elegimos una distribución Ubuntu 16.04 con 1 CPU y 2 GB de RAM . Deje que este nodo de cómputo virtual se llame 'websrv1 '. Luego mostramos otro nodo idéntico para instalar una segunda instancia de servidor web, llamada 'websrv2 '. En cada nodo del servidor web instalamos Apache 2.4 y PHP, ejecutando los siguientes comandos en la terminal (de cada nodo del servidor web):

  1. actualización de apt-get 
  2. apt-get install apache2 # instalar servidor web
  3. apt-get install php libapache2-mod-php php-mcrypt # php y paquetes relacionados
  4. systemctl habilitar apache2 # permitir que el servidor web se inicie al reiniciar el sistema
  5. systemctl reiniciar apache2 # reiniciar servidor web
  6. systemctl status apache2 # comprobar que el servidor web está funcionando 

Para probar que las instancias del servidor web pueden servir PHP, crearemos un archivo PHP simple en la raíz del documento (directorio /var/www/html) en cada servidor web usando el editor vi :


         
           
               

Greeter


                                echo “Hello World”;
                ?>
           
       

Ahora, si apuntamos nuestro navegador a http:///greet.php , debería mostrarse este saludo "Hello World". Podemos sustituir la dirección IP de cada uno de los nodos websrv1 y websrv2 a su vez.

Entonces, estamos listos para instalar HAProxy para la interfaz de los servidores web. Desde nuestro Panel de Redes E2E, nuevamente creamos un nodo, pero esta vez desde un 'Dispositivo'. Elegimos un dispositivo de tipo 'Load Balancing HAProxy'. Hay varias configuraciones disponibles, de las cuales elegimos VLB-B-1 (5 VCPU y 4 GB de RAM) para nuestra instancia de HAProxy.

Figura 1:Creación de un nodo de equilibrador de carga virtual

Los nodos VLB en E2E Cloud son poderosos nodos de cómputo que se ejecutan en CentOS 7. Para instalar HAProxy en cada uno de estos nodos, ejecutamos los siguientes comandos en la terminal:

  1. yum instalar haproxy # instalar HAProxy
  2. systemctl habilitar haproxy # habilitar HAProxy para iniciar en el reinicio del sistema
  3. systemctl reiniciar haproxy # reiniciar HAProxy
  4. systemctl status haproxy # comprobar que HAProxy está funcionando 

En nuestra implementación, necesitaremos dos paquetes adicionales para que HAProxy funcione:syslog y openssl. Dado que los nodos VLB (que se ejecutan en CentOS) vienen preinstalados con estos dos paquetes, no se requiere ningún paso de instalación adicional. Sin embargo, necesitamos algunos pasos de configuración para HAProxy incluso antes de que el equilibrio de carga comience a funcionar.

Configuración genérica de HAProxy

El archivo de configuración de HAProxy se encuentra en /etc/haproxy/haproxy.cfg y viene con algunas configuraciones listas para usar, algunas de las cuales pueden tener que modificarse. Se espera que este archivo de configuración tenga al menos un 'frontend' y al menos un 'backend' definidos. Cada carga de frontend se equilibra con uno o más backends. Un backend consta de varios servidores web que sirven la misma aplicación web, para escalabilidad y redundancia. Pero también hay una sección en este archivo etiquetada como 'genérica' que pertenece a la instalación general de HAProxy y una sección 'predeterminada' que especifica los valores de los parámetros aplicables a todos frontend y backends definidos aquí.

Conexiones máximas :En la sección 'global', configuramos el parámetro 'maxconn' (la cantidad máxima de conexiones de clientes que este equilibrador de carga puede manejar en todos backends a los que atiende). Este parámetro se puede establecer utilizando las directrices de tamaño de HAProxy , o por el contrario, podemos elegir un nodo VLB de E2E Cloud, en función de la carga máxima esperada que nuestro sitio web pueda encontrar. Con nuestro VLB-B-1 elegido nodo, 4096 es un valor razonable para 'maxconn' a nivel global.

Figura 2:Parámetros de configuración predeterminados y globales para HAProxy

Protocolo: En nuestra implementación, HAProxy interceptará y equilibrará la carga del tráfico HTTP. Esto se configura configurando el modo en la sección predeterminada anterior.

  1. modo http

Registro :Se recomienda que HAProxy use syslog . En CentOS, esto significa configurar el parámetro 'registro' en 'local2' como se muestra en la captura de pantalla anterior. Además, la configuración de syslog en el nodo HAProxy (/etc/rsyslog.conf) también debe modificarse para que escuche en el puerto UDP 514.

Figura 3:configuración de Syslog en el nodo HAProxy

Para asegurarnos de que todos los mensajes de registro en 'local2' estén en un archivo separado exclusivo para HAProxy (/var/log/haproxy.log), debemos crear un archivo haproxy.conf en el directorio / etc/rsyslog.d y escriba la siguiente línea:

  1. local2.* /var/log/haproxy.log

Para la trazabilidad de las solicitudes de extremo a extremo, también debemos modificar el formato de registro del servidor web Apache en el archivo de configuración del servidor web (/etc/apache2/apache2.conf). En cada nodo del servidor web, modificamos LogFormat para incluir la dirección real del cliente (X-Forwarded-For) desde la que se originó la solicitud HTTP (en lugar de mostrar la dirección IP del nodo HAProxy).

Figura 4:formato de registro del servidor web Apache

Estadísticas de HAProxy :HAProxy se puede configurar para mostrar estadísticas de solicitudes en una interfaz de usuario basada en web. Podemos establecer una URL para mostrar estadísticas de HAProxy (/lb-stats) protegidas mediante autenticación básica.

Otros valores predeterminados :La sección 'predeterminados' tiene un montón de parámetros de tiempo de espera que dejamos sin cambios. Pero en producción, cada administrador del sitio puede querer ajustar los tiempos de espera en función de factores como la latencia de la red, el tiempo de procesamiento en el extremo del servidor, etc. Introducimos la opción 'httpclose' para que las conexiones del cliente HTTP se cierren tan pronto como sea posible. a medida que se devuelve la respuesta, sin consumir recursos innecesariamente (a menos que haya una configuración Keep-Alive para las conexiones HTTP). Y nos aseguramos de que la dirección IP real del cliente se reenvíe hasta el servidor web para su trazabilidad (usando el parámetro de opción 'opción reenviar'). Para obtener definiciones detalladas de los parámetros de configuración de HAProxy, consulte la documentación de HAProxy. debe ser consultado.

Equilibrio de carga simple por turnos

Inicialmente, configuramos un solo sitio web (que consta de la aplicación PHP Greeter simple mencionada anteriormente), para que nuestra instalación de HAProxy equilibre la carga. Ya hemos configurado dos servidores web y un equilibrador de carga (HAProxy) como se indica en el panel de E2E Cloud.

Figura 5:Servidor web y nodos de equilibrador de carga

Primero vinculamos HAProxy a una dirección IP y un puerto adecuados (generalmente el puerto 80 para el modo http) en nuestro nodo VLB . La dirección IP debe ser externa para aceptar solicitudes de clientes. Esto nos lleva a definir un 'frontend', llamado 'httptraffic', como el siguiente (en /etc/haproxy/haproxy.cfg). Aquí, de forma predeterminada, este frontend equilibra la carga de cualquier solicitud de cliente al backend llamado 'sitio'.

Figura 6:Configuración de interfaz para HAProxy

Entonces, obviamente, debemos definir un 'backend' llamado 'sitio'. Debe consistir en las direcciones IP de los servidores web para enrutar las solicitudes (aunque debemos usar direcciones internas/privadas para este propósito). Y especificamos que la política de equilibrio de carga sea 'round-robin'. HAProxy también nos permite habilitar comprobaciones de salud periódicas de los nodos backend, usando el parámetro 'verificar'.

Figura 7:Configuración de back-end para HAProxy

En este punto, debemos reiniciar syslog y HAProxy en el nodo del balanceador de carga:

  1. systemctl reiniciar rsyslog
  2. systemctl reiniciar haproxy

Configuración del cortafuegos

Antes de acceder a la aplicación web a través de HAProxy, debemos abrir el puerto 80 (para HAProxy configurado para el modo http) en el nodo del balanceador de carga virtual y el puerto UDP 514 para syslog. En CentOS, esto requiere configurar iptables apropiadamente:

  1. iptables -A INPUT -m estado –estado ESTABLECIDO, RELACIONADO -j ACEPTAR
  2. iptables -A INPUT -i eth0 -p udp –dport 514 -j ACEPTAR
  3. iptables -A INPUT -i eth0 -p tcp –dport 80 -m state –state NUEVO, ESTABLECIDO -j ACEPTAR
  4. systemctl reiniciar iptables

Pruebas

En esta etapa, podemos probar la funcionalidad de equilibrio de carga y algunos de los ajustes de configuración (incluidos el registro y la recopilación de estadísticas) mencionados en la sección anterior.

Para detectar solicitudes que llegan a HAProxy, ejecutamos el siguiente comando en el nodo del balanceador de carga:

  1. cola -f /var/log/haproxy.log

Para HAProxy, este archivo de registro (/var/log/haproxy.log) se actualiza a través de syslog.

Del mismo modo, podemos consultar los registros de acceso en cada nodo del servidor web para rastrear la solicitud de principio a fin.

  1. cola -f /var/log/apache2/access.log

Ahora, accedemos a la sencilla aplicación PHP Greeter desde dos máquinas diferentes . En cada máquina cliente podemos apuntar un navegador a la URL:

http:///greet.php

Deberíamos encontrar actualizaciones en los registros de HAProxy. (Esto también verifica que nuestra configuración de syslog esté funcionando).

Figura 8:Registros de HAProxy (equilibrio de carga por turnos)

Una de las solicitudes la atiende el nodo websrv1 mientras que la otra la atiende el nodo websrv2. Esto es evidente a partir de los registros de acceso en cada servidor web y al coincidir estrechamente con las marcas de tiempo. Las direcciones IP de los clientes también se registran en HAProxy y en los registros del servidor web.

Figura 9:Registros de acceso desde el nodo:websrv1

Figura 10:Registros de acceso desde el nodo:websrv2

Los siguientes saludos se mostrarán en el navegador en cada uno máquina cliente:

Figura 11:Pantalla del navegador

Estadísticas del equilibrador de carga :Finalmente podemos revisar las estadísticas de HAProxy dirigiendo nuestro navegador a la siguiente URL (configurada en la sección 'predeterminados'):

http:///lb-stats

Figura 12:Estadísticas del balanceador de carga

Conclusión y próximos pasos

Hasta ahora hemos configurado con éxito el balanceo de carga en la nube E2E usando HAProxy. En la siguiente (y última) parte de este blog, llevaremos esta configuración al siguiente nivel al habilitar sesiones pegajosas y acceso seguro al sitio web, y también configuraremos un sitio web más grande con múltiples aplicaciones. Estos pasos nos acercarán a una implementación de producción.

Por favor, siga el enlace a continuación para ver el paso 2:

Uso de HAProxy para el equilibrio de carga en la nube E2E:permanencia y seguridad de la sesión


Ubuntu
  1. Preguntas frecuentes sobre Mi cuenta de E2E

  2. Preguntas frecuentes sobre Mi cuenta de E2E

  3. Configuración de redes en Ubuntu 18.04 para Xen Hypervisor

  4. Configuración del balanceador de carga HAproxy en Ubuntu 14.04

  5. configuración de sysctl para alta carga y prevención de DDoS

Consejos para usar la pantalla

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

Configurar el equilibrio de carga con HAProxy, Nginx y Keepalived en Linux

Equilibrio de carga con HAProxy, Nginx y Keepalived en Linux

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

Cómo configurar Load Balancing con NGINX en Jelastic Cloud