Tutorial para principiantes de HAProxy

Tutorial Para Principiantes De Haproxy



A medida que su aplicación crece, surge la necesidad de agregar más servidores para manejar más tráfico. Cuanto más tráfico reciba su aplicación, mayores serán las posibilidades de sufrir un tiempo de inactividad cuando el servidor se sobrecargue. Sin embargo, existen herramientas como HAProxy que le permiten definir cómo se maneja el tráfico para equilibrar la carga en su servidor. La idea es garantizar que ningún servidor se sobrecargue. High Availability Proxy es un software de código abierto que está diseñado para ofrecer un equilibrio de carga confiable mientras actúa como un proxy inverso para aplicaciones TCP/HTTP.

HAProxy trabaja para reducir la sobrecarga de cualquier servidor y lo logra distribuyendo el tráfico para garantizar que no se sobrecargue el servidor, pero que haya otros servidores disponibles. Una plataforma como Instagram tiene un tráfico masivo debido a las solicitudes enviadas por segundo, de ahí la necesidad de utilizar HAProxy para definir el frontend, el backend y los oyentes de los servidores para evitar la sobrecarga.

Por qué utilizar HAProxy

Antes de aprender sobre la instalación y configuración de HAProxy, debes entender por qué lo necesitamos, gracias a las funciones que ofrece. Las siguientes son las características principales de HAProxy:







  1. Balanceo de carga - Con HAProxy, puedes distribuir cómodamente el tráfico entre diferentes servidores para evitar sobrecargar un solo servidor. De esa manera, su aplicación no enfrentará ningún problema de tiempo de inactividad y habrá logrado una capacidad de respuesta, confiabilidad y disponibilidad más rápidas.
  2. Registro y monitoreo – Obtendrá registros de monitoreo detallados para sus servidores para ayudarlo a solucionar problemas. Además, HAProxy tiene una página de estadísticas donde puede obtener análisis de rendimiento en tiempo real para su balanceador de carga.
  3. Controles de salud – Incluso sus servidores requieren una verificación de estado para determinar su estado. HAProxy ejecuta con frecuencia comprobaciones de estado para conocer el estado de su servidor y mejorar su confiabilidad. Si se detecta un servidor en mal estado, redirige el tráfico a otro servidor.
  4. Proxy inverso – Una forma de mejorar la seguridad es ocultando la estructura interna. Afortunadamente, HAProxy te permite recibir el tráfico de los clientes y enrutarlos a los servidores adecuados. De esa manera, su estructura interna queda oculta al ojo del hacker.
  5. ACL (listas de control de acceso) – Con HAProxy, puede definir cómo debe realizarse el enrutamiento del tráfico utilizando varios criterios, como rutas, encabezados y direcciones IP. Por lo tanto, resulta más fácil definir una lógica de enrutamiento personalizada para su tráfico.
  6. Terminación SSL – De forma predeterminada, los servidores backend descargan SSL/TLS, lo que provoca un rendimiento reducido. Sin embargo, con HAProxy, la terminación SSL/TLS se produce en el equilibrador de carga, descargando la tarea en los servidores backend.

Instalación de HAProxy

Hasta ahora, definimos qué es HAProxy y analizamos las características que ofrece para ayudarlo a comprender por qué lo necesita para su aplicación. El siguiente paso es comprender cómo comenzar instalándolo en su sistema.



Si está ejecutando los sistemas Ubuntu o Debian, HAProxy se puede instalar desde el administrador de paquetes APT. Ejecute el siguiente comando:



$ sudo actualización apta
$ sudo apto instalar haproxy

De manera similar, si está utilizando sistemas basados ​​en RHEL o CentOS, HAProxy está disponible en el administrador de paquetes 'yum'. Ejecute los siguientes comandos:





$ sudo yum actualización
$ sudo yum instalar haproxy

En nuestro caso, estamos usando Ubuntu. Así, tenemos nuestro comando de la siguiente manera:



Luego podemos verificar su versión para asegurarnos de que logramos instalar HAProxy exitosamente.

$ haproxy --versión

Cómo configurar HAProxy

Con HAProxy instalado, ahora puede abrir su archivo de configuración ( / etc/haproxy/haproxy.cfg) y defina la configuración que desea utilizar para su balanceador de carga.

Abra el archivo de configuración usando un editor como nano o vim.

$ sudo nano /etc/haproxy/haproxy.cfg

Obtendrá un archivo de configuración como el que se muestra a continuación:

Desde el archivo de configuración, notarás que viene con dos secciones principales:

  1. global - Es la primera sección del archivo y sus valores no deben modificarse. Contiene la configuración del proceso que define cómo funciona HAProxy. Por ejemplo, define los detalles de registro y los grupos o usuarios que pueden ejecutar las funciones de HAProxy. Tenga en cuenta que en este archivo de configuración solo puede tener una sección global y sus valores deben permanecer inalterados.
  1. valores predeterminados – Esta sección contiene los valores predeterminados para los nodos. Por ejemplo, puede agregar los tiempos de espera o el modo operativo para su HAProxy en esta sección. Además, es posible tener numerosas secciones predeterminadas en su archivo de configuración de HAProxy.

A continuación se muestra un ejemplo de una sección 'Valores predeterminados':

En la imagen dada, el modo define cómo su HAProxy manejará las solicitudes entrantes. Puede configurar el modo en HTTP o TCP. En cuanto al tiempo de espera, especifica cuánto tiempo debe esperar HAProxy. Por ejemplo, el tiempo de espera de conexión es el tiempo que se debe esperar antes de que se realice una conexión de backend. El tiempo de espera del cliente es cuánto tiempo debe esperar HAProxy para que un cliente envíe los datos. El tiempo de espera del servidor es el tiempo que se espera a que el servidor apropiado envíe los datos que se reenviarán al cliente. La forma en que define los valores predeterminados es muy importante para mejorar el tiempo de respuesta de su aplicación.

Hay tres secciones más que debes definir para que tu balanceador de carga funcione como se espera.

  1. Interfaz - Esta sección contiene las direcciones IP que desea que sus clientes utilicen para establecer la conexión.
  2. back-end – Muestra los grupos de servidores que manejan las solicitudes como se define en la sección de interfaz.
  3. escuchar - Se utiliza sucesivamente cuando desea enrutar un grupo de servidores específico. Esta sección combina las tareas del frontend y backend.

Tengamos un ejemplo

Para este ejemplo, definimos la interfaz para usar localhost con un puerto específico. A continuación, lo vinculamos con el backend que ejecuta el host local y luego ejecutamos un servidor Python para probar si todo funciona como se esperaba para el equilibrio de carga. Siga los pasos indicados.

Paso 1: configurar la sección de valores predeterminados

En la sección 'Valores predeterminados', configuramos los valores que se compartirán entre los nodos. Para nuestro caso, configuramos el modo en HTTP y configuramos los tiempos de espera para el cliente y el servidor. Puedes ajustar el tiempo según tus necesidades.

Recuerde que todas estas ediciones están en la configuración de HAProxy ubicada en “/etc/haproxy/haproxy.cfg”. Una vez configurada la sección de valores predeterminados, definamos la interfaz.

Paso 2: Configurar la sección Frontend

En la sección de interfaz, definimos cómo queremos que los clientes en línea accedan a la aplicación o al sitio web. Damos las direcciones IP de la aplicación. Pero para este caso trabajamos con localhost. Por lo tanto, nuestra dirección IP es la dirección alternativa 127.0.0.1 y queremos aceptar las conexiones a través del puerto 80.

Debe agregar la palabra clave 'bind' que actúa como escucha de la dirección IP en el puerto especificado. La dirección IP y el puerto que usted define son los que utiliza el balanceador de carga para aceptar las solicitudes entrantes.

Después de agregar las líneas anteriores en su archivo de configuración, debemos reiniciar “haproxy.service” con el siguiente comando:

$ sudo systemctl reiniciar haproxy

En este punto, podemos intentar enviar las solicitudes a nuestro sitio web usando el comando 'curl'. Ejecute el comando y agregue la dirección IP de destino.

$ curl

Como todavía tenemos que definir cómo será el backend de nuestro HAProxy, obtenemos un error 503 como se muestra a continuación. Aunque el equilibrador de carga logró recibir las solicitudes, actualmente no hay ningún servidor disponible para manejarlas, de ahí el error.

Paso 3: Configurar el backend

La sección backend es donde definimos los servidores que manejarán cualquier solicitud entrante. El equilibrador de carga consulta esta sección para saber cómo debe distribuir las solicitudes entrantes para garantizar que ningún servidor se sobrecargue.

El error 503 que recibimos anteriormente se debió a que no teníamos ningún backend para manejar las solicitudes. Comencemos definiendo el 'default_backend' para manejar las solicitudes. Lo defines en la sección frontend. Lo llamamos 'linux_backend' para este caso.

A continuación, cree una sección de backend que tenga el mismo nombre que la definida en la sección de frontend. Luego debe utilizar la palabra clave 'servidor' seguida del nombre de su servidor y su dirección IP. La siguiente imagen muestra que definimos el servidor “linuxhint1” usando IP 127.0.0.1 y puerto 8001:

Puede tener un grupo de servidores backend, pero solo definimos uno para este caso. Asegúrese de guardar el archivo. Debemos reiniciar nuevamente el servicio HAProxy.

Para probar el balanceador de carga HAProxy creado, creamos un servidor web usando Python3 para vincular los puertos backend usando la dirección IP que especificamos. Ejecutamos el comando de la siguiente manera:

$ python3 -m http.servidor 8001 --bind 127.0.0.1

Asegúrese de reemplazar los valores para que coincidan con su dirección IP y el puerto que desea vincular. Observe cómo se crea el servidor web y escucha cualquier solicitud entrante.

En otra terminal, usemos el comando 'curl' para enviar una solicitud al servidor.

$ curl

A diferencia de cómo obtuvimos el error 503 anteriormente que muestra que no hay ningún servidor disponible para manejar la solicitud, esta vez obtenemos un resultado que confirma que nuestro balanceador de carga HAProxy está funcionando.

Si regresa a la terminal anterior donde creamos el servidor web, verá que obtenemos un resultado exitoso 200 que confirma que HAProxy recibió la solicitud y la manejó enviándola al servidor definido en nuestra sección backend.

Así es como puedes configurar un HAProxy simple para tu sitio web o aplicación.

Trabajar con reglas

Antes de terminar con este tutorial de HAProxy para principiantes, hablemos rápidamente sobre cómo puede definir las reglas para guiar cómo el balanceador de carga manejará las solicitudes.

Siguiendo los mismos pasos que antes, dejemos nuestra sección predeterminada intacta y definamos diferentes direcciones IP en la sección de interfaz. Vinculamos la misma dirección IP pero aceptamos las conexiones desde diferentes puertos.

Además, tenemos nuestro “default_backend” y otro “use_backend” que es un grupo diferente de servidores que usaremos dependiendo del puerto de donde provienen las solicitudes. En la siguiente configuración, todas las solicitudes a través del puerto 81 son manejadas por los servidores en “Linux2_backend”. Cualquier otra solicitud es manejada por 'default_backend'.

Luego creamos las secciones del backend tal como se definen en el frontend. Tenga en cuenta que para cada backend, tenemos un servidor diferente que especificamos para manejar las solicitudes.

Reinicie rápidamente el servicio HAProxy.

Creemos el servidor web usando Python3 y vinculemos las solicitudes en el puerto 8002, que es el servidor backend alternativo.

Al enviarle solicitudes, especificamos el puerto como 81 para activar el equilibrador de carga para enviar las solicitudes al servidor alternativo que no es el predeterminado.

Al volver a verificar nuestro servidor web, podemos ver que logra recibir y manejar las solicitudes y da una respuesta 200 (éxito).

Así es como puede definir las reglas que guiarán cómo su balanceador de carga recibirá y manejará las solicitudes.

Conclusión

HAProxy es una solución ideal para el equilibrio de carga para aplicaciones TCP/HTTP. Una vez instalado, puede editar cómodamente el archivo de configuración para definir las secciones predeterminadas, frontend y backend para guiar cómo funcionará su balanceador de carga. Esta publicación es una guía para principiantes sobre HAProxy. Comenzó definiendo HAProxy y sus características. A continuación, profundizó en cómo configurar HAProxy y concluyó dando un ejemplo sobre cómo usar HAProxy como equilibrador de carga.