sql >> Base de Datos >  >> RDS >> Mysql

Comprender las estadísticas de HAProxy para MySQL y PostgreSQL

Tener un Load Balancer siempre es una buena opción para mejorar el entorno de su base de datos. Puede ayudarlo a redirigir las aplicaciones a los nodos de la base de datos disponibles, distribuir el tráfico entre varios servidores para mejorar el rendimiento o incluso realizar la conmutación por error cuando sea necesario. Para saber qué está pasando con su tráfico/sistema, necesita tener un buen sistema de monitoreo para monitorear no solo los nodos de su base de datos sino también sus Load Balancers, para tomar acciones proactivas o reactivas para mitigar cualquier problema actual o futuro. Para poder encontrar un problema, debe comprender qué significa cada valor que está viendo.

En este blog, explicaremos qué significan las estadísticas de HAProxy y cómo monitorearlas de manera amigable usando gráficos y ClusterControl.

¿Qué es HAProxy?

HAProxy es un proxy de código abierto que se puede utilizar para implementar alta disponibilidad, equilibrio de carga y proxy para aplicaciones basadas en TCP y HTTP.

Como equilibrador de carga, HAProxy distribuye el tráfico desde un origen a uno o más destinos y puede definir reglas y/o protocolos específicos para esta tarea. Si alguno de los destinos deja de responder, se marca como desconectado y el tráfico se envía al resto de destinos disponibles.

Tipos de nodos HAProxy

Cuando configura su HAProxy Load Balancer, hay diferentes tipos de nodos para configurar según la funcionalidad que desee. Las opciones son Frontend, Backend y Listen.

Nodos frontales

Cuando coloca HAProxy como un proxy inverso frente a sus servidores backend, una sección frontend en el archivo de configuración define las direcciones IP y los puertos a los que los clientes pueden conectarse. Las solicitudes ingresan al balanceador de carga y las respuestas se devuelven al cliente. Pasan por el frontend.

frontend site1.com

     bind 10.10.10.150:80

     use_backend api_servers if { path_beg /api/ }

     default_backend web_servers

Nodos de back-end

Define un grupo de servidores cuya carga se equilibrará y se asignará para manejar las solicitudes, según la política seleccionada. HAProxy envía solicitudes a un backend y luego recibe una respuesta de uno de los servidores activos.

backend web_servers

     balance roundrobin

     cookie SERVERUSED insert indirect nocache

     option httpchk HEAD /

     default-server check maxconn 20

     server server1 10.10.10.151:80 cookie server1

     server server2 10.10.10.152:80 cookie server2

Nodos de escucha

Combina los dos tipos de nodos HAProxy que mencionamos anteriormente. Es posible que prefiera la legibilidad obtenida al tener secciones de frontend y backend separadas, o tal vez desee tener una configuración más concisa, utilizando el enfoque de escucha.

listen  haproxy_10.10.10.143_3307_rw

        bind *:3307

        mode tcp

        tcp-check connect port 9200

        timeout client  10800s

        timeout server  10800s

        balance leastconn

        option httpchk

        default-server port 9200 inter 2s downinter 5s rise 3 fall 2 slowstart 60s maxconn 64 maxqueue 128 weight 100

        server 10.10.10.139 10.10.10.139:3306 check

        server 10.10.10.140 10.10.10.140:3306 check backup

        server 10.10.10.141 10.10.10.141:3306 check backup

Página de estadísticas de HAProxy

HAProxy le permite habilitar una página de estadísticas con información en tiempo real para ver lo que sucede en su Load Balancer. Para habilitar la página de estadísticas, solo necesita usar la directiva "habilitar estadísticas" en su archivo de configuración de HAProxy (/etc/haproxy/haproxy.cfg). Veamos un ejemplo:

userlist STATSUSERS

        group admin users admin

        user admin insecure-password admin

        user stats insecure-password admin



listen admin_page

        bind *:9600

        mode http

        stats enable

        stats refresh 60s

        stats uri /

        acl AuthOkay_ReadOnly http_auth(STATSUSERS)

        acl AuthOkay_Admin http_auth_group(STATSUSERS) admin

        stats http-request auth realm admin_page unless AuthOkay_ReadOnly

La línea de vinculación establece qué dirección IP y puerto usará para acceder a la página de estadísticas. También puede configurar la autenticación y un período de actualización. Si accede a su nodo HAProxy usando el puerto especificado (9600 en el ejemplo), admin/credenciales de administrador, verá algo como esto:

Aquí encontrará diferentes métricas útiles para monitorear su nodo HAProxy.

Estadísticas HAProxy

Ahora, veamos cuáles son estas métricas. Como el significado depende del contexto, lo dividiremos en Frontend y Backend.

Cola

Back-end

Esta sección se aplica solo a backends y muestra cuánto tiempo esperan los clientes a que un servidor esté disponible. HAProxy puede poner en cola las conexiones cuando usa la configuración maxconn.

La columna "Cur" muestra la cantidad de conexiones de clientes que están actualmente en cola y aún no asignadas a un servidor. La columna "Máx." muestra la mayor cantidad de conexiones que se han puesto en cola a la vez. La columna "Límite" muestra el número máximo de conexiones que se pueden poner en cola, según lo definido por la configuración maxqueue en cada línea del servidor en el archivo de configuración.

Tasa de sesión

Frontend

Describe la velocidad a la que los clientes se conectan a HAProxy.

La columna "Cur" muestra la velocidad actual a la que se crean las sesiones de cliente o las conexiones completamente establecidas entre el cliente y el servidor. Si pasa el mouse sobre este campo, la página muestra las siguientes métricas:

  • Velocidad de conexión actual:la velocidad a la que los clientes se conectan a HAProxy.
  • Velocidad de sesión actual: la velocidad a la que se crean las sesiones, que son entidades que mantienen el estado de una conexión de extremo a extremo.
  • Tasa de solicitud actual:la tasa a la que se reciben solicitudes HTTP a través de conexiones establecidas.

La columna "Máx." muestra la mayor cantidad de sesiones que se han utilizado simultáneamente. Si pasa el mouse sobre este campo, la página muestra las siguientes métricas:

  • Velocidad máxima de conexión:la tasa más alta a la que los clientes se han conectado a HAProxy.
  • Velocidad máxima de sesión:la tasa más alta a la que los clientes han establecido sesiones, que son entidades que mantienen el estado de una conexión de extremo a extremo.
  • Tasa máxima de solicitudes:la tasa más alta a la que se han recibido solicitudes HTTP a través de conexiones establecidas.

La columna "Límite" muestra la cantidad máxima de sesiones por segundo que aceptará la interfaz, según lo establecido por la configuración de sesiones de límite de velocidad. Si se supera este límite, las conexiones adicionales se mantienen pendientes en la acumulación del socket.

Back-end

Estas estadísticas muestran la velocidad a la que se realizan las conexiones a un servidor.

La columna "Cur" muestra la velocidad actual, por segundo, a la que se establecen las conexiones con el servidor. La columna "Máx." muestra la tasa más alta a la que se han establecido conexiones con el servidor dado. La columna "Límite" no se usa aquí.

Sesiones

Frontend

Esta sección cuenta el número de sesiones, o conexiones completas de cliente a servidor, en uso en el balanceador de carga.

La columna "Cur" muestra el número actual de sesiones establecidas. La columna "Max" muestra la mayor cantidad de sesiones que se han establecido simultáneamente. La columna "Límite" muestra la mayor cantidad de sesiones simultáneas permitidas, según lo definido por la configuración de maxconn en la interfaz. Esa interfaz en particular dejará de aceptar nuevas conexiones cuando se alcance este límite. Si maxconn no está configurado, entonces "Límite" es el mismo que el valor de maxconn en la sección global de su configuración. Si eso no está configurado, el valor se basa en su sistema. Cuando pasa el cursor sobre la columna "Total", la página muestra las siguientes métricas:

  • Semen. conexiones:número acumulado de conexiones establecidas desde la última vez que se recargó HAProxy.
  • Semen. sesiones:número acumulado de sesiones (conexiones de extremo a extremo) establecidas desde la última recarga.
  • Semen. Solicitudes HTTP:número acumulado de solicitudes HTTP desde la última recarga.
  • Respuestas HTTP xxx:número total de solicitudes HTTP que recibieron una respuesta xxx.
  • 2xx comprimido:número total de respuestas 2xx que se comprimieron, si se ha habilitado la compresión. También muestra el porcentaje de solicitudes que fueron comprimidas.
  • Otras respuestas:Número total de solicitudes HTTP que recibieron una respuesta no cubierta por las otras métricas.
  • Solicitudes interceptadas:número total de solicitudes interceptadas y redirigidas a la página de estadísticas de HAProxy.

Las columnas "LbTot" y "Último" no se utilizan en esta sección.

Back-end

Esta sección muestra el número de conexiones actuales a cualquiera de los servidores activos.

La columna "Cur" enumera el número de conexiones activas a un servidor. La columna "Máx." muestra la mayor cantidad de conexiones que se han establecido simultáneamente con el servidor dado. La columna "Límite" muestra el número máximo de conexiones permitidas para un servidor, según lo establecido por el parámetro maxconn en una línea de servidor.

La fila del backend muestra el valor de fullconn para "Límite" o, si no se establece, usa la siguiente fórmula:Suma de los valores de límite de sesiones para frontends que enrutan a este backend, dividida por 10. La columna "Total" muestra el número acumulado de conexiones que han utilizado el servidor dado. Cuando pasa el cursor sobre este campo, la página muestra las siguientes métricas:

  • Semen. sesiones:Número acumulado de conexiones establecidas a este servidor.
  • Semen. Respuestas HTTP:número acumulado de respuestas HTTP recibidas de este servidor.
  • Respuestas HTTP xxx:número total de respuestas HTTP xxx de este servidor.
  • Otras respuestas:Número total de respuestas HTTP no cubiertas por las otras métricas.
  • Tiempo en cola:la cantidad de tiempo en milisegundos que una conexión permaneció en cola mientras esperaba una ranura de conexión al servidor, promediado durante las últimas 1024 conexiones exitosas.
  • Tiempo de conexión:la cantidad de tiempo en milisegundos que se tardó en conectarse con éxito al servidor, promediado durante las últimas 1024 conexiones exitosas.
  • Tiempo de respuesta:el tiempo de respuesta del servidor en milisegundos, promediado durante las últimas 1024 conexiones exitosas.
  • Tiempo total:el tiempo total de la sesión en milisegundos, promediado durante las últimas 1024 conexiones exitosas.

La columna "LbTot" muestra el número total de veces que se seleccionó el servidor dado para atender una solicitud. Esto puede deberse al equilibrio de carga normal o a un reenvío desde un servidor fallido. La columna "Última" muestra el tiempo transcurrido desde que se recibió la última conexión.

Bytes

Frontend

Esta sección muestra la cantidad acumulada de datos enviados y recibidos entre HAProxy y los clientes. La columna "Entrada" muestra el número total de bytes recibidos y la columna "Salida" muestra el número total de bytes enviados.

Back-end

Esta sección muestra la cantidad de datos enviados y recibidos entre HAProxy y el servidor. La columna "In" muestra el número de bytes enviados al servidor. La columna "Salida" muestra el número de bytes recibidos.

Denegado

Muestra la cantidad de solicitudes y respuestas que fueron rechazadas debido a problemas de seguridad en las secciones Frontend y Backend.

Frontend

La columna "Req" muestra el número de solicitudes que fueron denegadas debido a directivas de configuración (denegación de solicitud http, rechazo de solicitud http, etc.) colocadas en la sección Frontend o Listen.

La columna "Resp" muestra la cantidad de respuestas que fueron denegadas por una directiva de denegación de respuesta http que se colocó en una interfaz o escucha.

Back-end

La columna "Requerido" solo se aplica al backend como un todo. Muestra la cantidad de solicitudes que fueron rechazadas por las directivas de configuración (rechazo de solicitud http, rechazo de solicitud http, etc.) en un backend.

La columna "Resp" muestra el número de respuestas que fueron rechazadas para un servidor determinado debido a las directivas de configuración de rechazo de respuesta http o rechazo de contenido tcp-response en un servidor.

Errores

Frontend

Aquí solo se usa la columna "Req". Muestra el número de solicitudes que encontraron un error.

Las posibles causas incluyen:

  • Terminación anticipada del cliente
  • Un error de lectura del cliente
  • El cliente agotó el tiempo de espera
  • El cliente cerró la conexión
  • El cliente envió una solicitud con formato incorrecto
  • La solicitud fue tarpited

Back-end

Muestra la cantidad de errores relacionados con la comunicación con un servidor backend.

La columna "Requerido" no se utiliza. La columna "Conn" muestra la cantidad de solicitudes que encontraron un error al intentar conectarse al servidor. La columna "Resp" muestra los errores encontrados al obtener la respuesta.

Advertencias

Back-end

Solo para backends. Esta sección muestra el número de reintentos y reenvíos. Si agregó una directiva de reintentos a su backend, la columna "Retr" muestra la cantidad total de veces que se reintentó una conexión. La columna "Redis" muestra la cantidad de veces que HAProxy no pudo establecer una conexión con un servidor y la volvió a enviar a otro servidor. Esto requiere que haya agregado una directiva de reenvío de opciones.

Servidor

Frontend

El único campo de esta sección que se aplica a una interfaz es el campo Estado. Cuando Estado está ABIERTO, la interfaz funciona normalmente y está lista para recibir tráfico.

Back-end

Esta sección muestra detalles sobre el estado, la salud y el peso de cada servidor. La columna "Estado" muestra si el servidor está actualmente activo y por cuánto tiempo. Puede mostrar cualquiera de los siguientes estados:

  • ARRIBA:El servidor informa que está en buen estado.
  • DOWN:El servidor informa que no está en buen estado y no puede recibir solicitudes.
  • NOLB:Ha agregado http-check disabled-on-404 al backend y la URL verificada ha devuelto una respuesta HTTP 404.
  • MAINT:El servidor ha sido deshabilitado o puesto en modo de mantenimiento.
  • DRENAJE:el servidor se puso en modo de drenaje.
  • sin comprobación:las comprobaciones de estado no están habilitadas para este servidor.

La columna "LastChk" muestra un valor como L7OK/200 en Xms. Ese valor significa que se realizó una verificación de estado de Capa 7; devolvió una respuesta HTTP 200 OK y lo hizo en X milisegundos.

La columna "Peso" muestra la proporción de tráfico que aceptará, según lo establecido por el parámetro de peso en la línea del servidor. La columna "Act" muestra si el servidor está activo (marcado con una Y) o una copia de seguridad (marcado con un -). La columna "Bck" muestra si el servidor es una copia de seguridad (marcado con una Y) o activo (marcado con un -).

La columna "Chk" muestra el número de comprobaciones de estado fallidas. La columna "Abajo" muestra el número de transiciones de ARRIBA a ABAJO. La columna "Dwntme" muestra cuánto tiempo ha estado inactivo el servidor.

Si agregó un parámetro de inicio lento a una línea de servidor, cuando deshabilite y luego habilite ese servidor, la columna "Thrtle" muestra el porcentaje de tráfico que aceptará el servidor. El porcentaje aumentará gradualmente hasta el 100 % durante el período que hayas establecido.

Esta información se basa en una publicación de blog de HAProxy que puede consultar para obtener información más detallada.

HAProxy en ClusterControl

Además de la implementación y la administración, ClusterControl también brinda información sobre las estadísticas de HAProxy y los paneles en tiempo real desde la interfaz de usuario. Desde ClusterControl, puede acceder a la página de estadísticas en ClusterControl -> Seleccionar clúster -> Nodos -> elegir el nodo HAProxy similar a la captura de pantalla a continuación:

Puede activar/desactivar un servidor desde el equilibrio de carga marcando/desmarcando el botón de la casilla de verificación en la columna "Habilitado". Esto es muy útil cuando desea que su aplicación omita intencionalmente la conexión a un servidor, por ejemplo, para mantenimiento o para probar y validar nuevos parámetros de configuración o consultas optimizadas.

También puede monitorear sus servidores HAProxy desde ClusterControl consultando la sección Tablero.

Para habilitarlo, solo necesita ir a ClusterControl -> Seleccionar clúster -> Tableros -> Habilitar monitoreo basado en agentes. Esto desplegará un agente en cada nodo para obtener toda la información para generar los gráficos correspondientes.

Aquí, no solo verá todas las métricas necesarias para monitorear el nodo HAProxy, sino también para monitorear todo el entorno usando los diferentes Dashboards.

Conclusión

HAProxy es una buena y poderosa herramienta para mejorar el rendimiento de su base de datos y aplicaciones. También es útil agregar alta disponibilidad y conmutación por error a su entorno. Para saber qué sucede en su nodo HAProxy, debe comprender las métricas que se monitorean en la página de estadísticas, o incluso mejorar este monitoreo agregando un tablero para que sea más amigable.

En este blog, hemos explicado cada métrica mencionada en la página de estadísticas de HAProxy, y también mostramos cómo se ve en ClusterControl, donde puede acceder a las secciones de HAProxy de estadísticas y tableros desde el mismo sistema.