Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comprendre les statistiques HAProxy pour MySQL et PostgreSQL

Avoir un équilibreur de charge est toujours une bonne option pour améliorer votre environnement de base de données. Il peut vous aider à rediriger les applications vers les nœuds de base de données disponibles, à répartir le trafic sur plusieurs serveurs pour améliorer les performances ou même à basculer si nécessaire. Afin de savoir ce qui se passe avec votre trafic/système, vous devez disposer d'un bon système de surveillance pour surveiller non seulement vos nœuds de base de données, mais également vos équilibreurs de charge, afin de prendre des mesures proactives ou réactives pour atténuer tout problème actuel ou futur. Pour pouvoir trouver un problème, vous devez comprendre la signification de chaque valeur que vous voyez.

Dans ce blog, nous expliquerons ce que signifient les statistiques HAProxy et comment les surveiller de manière conviviale à l'aide de graphiques et de ClusterControl.

Qu'est-ce que HAProxy ?

HAProxy est un proxy open source qui peut être utilisé pour mettre en œuvre la haute disponibilité, l'équilibrage de charge et le proxy pour les applications basées sur TCP et HTTP.

En tant qu'équilibreur de charge, HAProxy distribue le trafic d'une origine vers une ou plusieurs destinations et peut définir des règles et/ou des protocoles spécifiques pour cette tâche. Si l'une des destinations cesse de répondre, elle est marquée comme étant hors ligne et le trafic est envoyé vers le reste des destinations disponibles.

Types de nœuds HAProxy

Lorsque vous configurez votre équilibreur de charge HAProxy, il existe différents types de nœuds à configurer en fonction de la fonctionnalité souhaitée. Les options sont Frontend, Backend et Listen.

Nœuds frontaux

Lorsque vous placez HAProxy en tant que proxy inverse devant vos serveurs principaux, une section frontale du fichier de configuration définit les adresses IP et les ports auxquels les clients peuvent se connecter. Les demandes entrent dans l'équilibreur de charge et les réponses sont renvoyées au client. Ils passent par le frontend.

frontend site1.com

     bind 10.10.10.150:80

     use_backend api_servers if { path_beg /api/ }

     default_backend web_servers

Nœuds principaux

Il définit un groupe de serveurs qui seront équilibrés en charge et affectés au traitement des requêtes, en fonction de la politique sélectionnée. HAProxy envoie des requêtes à un backend puis reçoit une réponse de l'un des serveurs actifs.

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

Écouter les nœuds

Il combine les deux types de nœuds HAProxy que nous avons mentionnés ci-dessus. Vous préférerez peut-être la lisibilité obtenue en ayant des sections frontend et backend séparées, ou peut-être souhaitez-vous avoir une configuration plus concise, en utilisant l'approche d'écoute.

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

Page de statistiques HAProxy

HAProxy vous permet d'activer une page de statistiques avec des informations en temps réel pour voir ce qui se passe dans votre équilibreur de charge. Pour activer la page de statistiques, il vous suffit d'utiliser la directive « stats enable » dans votre fichier de configuration HAProxy (/etc/haproxy/haproxy.cfg). Voyons un exemple :

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 ligne de liaison définit l'adresse IP et le port que vous utiliserez pour accéder à la page de statistiques. Vous pouvez également configurer l'authentification et une période d'actualisation. Si vous accédez à votre nœud HAProxy en utilisant le port spécifié (9600 dans l'exemple), les informations d'identification admin/admin, vous verrez quelque chose comme ceci :

Vous trouverez ici différentes métriques utiles pour surveiller votre nœud HAProxy.

Statistiques HAProxy

Maintenant, voyons quelles sont ces mesures. Comme la signification dépend du contexte, nous allons la diviser en Frontend et Backend.

File d'attente

Backend

Cette section s'applique uniquement aux backends et montre combien de temps les clients attendent qu'un serveur soit disponible. HAProxy est capable de mettre les connexions en file d'attente lorsque vous utilisez le paramètre maxconn.

La colonne "Cur" indique le nombre de connexions client actuellement en file d'attente et non encore affectées à un serveur. La colonne "Max" affiche le plus grand nombre de connexions qui ont déjà été mises en file d'attente à la fois. La colonne "Limite" indique le nombre maximum de connexions autorisées à être mises en file d'attente, tel que défini par le paramètre maxqueue sur chaque ligne de serveur dans le fichier de configuration.

Taux de session

Interface

Décrit la vitesse à laquelle les clients se connectent à HAProxy.

La colonne "Cur" indique la vitesse actuelle à laquelle les sessions client, ou les connexions entièrement établies entre le client et le serveur, sont créées. Si vous passez votre souris sur ce champ, la page affiche les statistiques suivantes :

  • Taux de connexion actuel :le taux auquel les clients se connectent à HAProxy.
  • Taux de session actuel : le taux auquel les sessions, qui sont des entités qui détiennent l'état d'une connexion de bout en bout, sont créées.
  • Taux de requêtes actuel :taux auquel les requêtes HTTP sont reçues sur les connexions établies.

La colonne "Max" affiche le plus grand nombre de sessions qui ont été utilisées simultanément. Si vous passez votre souris sur ce champ, la page affiche les statistiques suivantes :

  • Taux de connexion maximum :le taux le plus élevé auquel les clients se sont connectés à HAProxy.
  • Taux de session maximal :le taux le plus élevé auquel les clients ont établi des sessions, qui sont des entités qui détiennent l'état d'une connexion de bout en bout.
  • Taux de requêtes maximum :le taux le plus élevé auquel les requêtes HTTP ont été reçues via des connexions établies.

La colonne « Limite » indique le nombre maximal de sessions par seconde que l'interface acceptera, tel que défini par le paramètre de limite de sessions. Si cette limite est dépassée, des connexions supplémentaires sont maintenues en attente dans le backlog du socket.

Backend

Ces statistiques montrent la vitesse à laquelle les connexions sont établies avec un serveur.

La colonne "Cur" indique le taux actuel, par seconde, auquel les connexions sont établies avec le serveur. La colonne "Max" indique le taux le plus élevé auquel des connexions ont jamais été établies avec le serveur donné. La colonne "Limite" n'est pas utilisée ici.

Séances

Interface

Cette section compte le nombre de sessions, ou de connexions client-serveur complètes, utilisées sur l'équilibreur de charge.

La colonne "Cur" affiche le nombre actuel de sessions établies. La colonne "Max" affiche le plus grand nombre de sessions qui ont été établies simultanément. La colonne "Limite" affiche le plus grand nombre de sessions simultanées autorisées, telles que définies par le paramètre maxconn dans l'interface. Cette interface particulière cessera d'accepter de nouvelles connexions lorsque cette limite sera atteinte. Si maxconn n'est pas défini, alors "Limit" est identique à la valeur maxconn dans la section globale de votre configuration. Si ce n'est pas défini, la valeur est basée sur votre système. Lorsque vous survolez la colonne "Total", la page affiche les statistiques suivantes :

  • Jouez. connexions :nombre cumulé de connexions établies depuis le dernier rechargement de HAProxy.
  • Jouez. sessions :nombre cumulé de sessions (connexions de bout en bout) établies depuis le dernier rechargement.
  • Jouez. Requêtes HTTP :nombre cumulé de requêtes HTTP depuis le dernier rechargement.
  • Réponses HTTP xxx :nombre total de requêtes HTTP ayant reçu une réponse xxx.
  • Compressed 2xx :nombre total de réponses 2xx qui ont été compressées, si la compression a été activée. Il indique également le pourcentage de requêtes compressées.
  • Autres réponses :nombre total de requêtes HTTP ayant reçu une réponse non couverte par les autres métriques.
  • Requêtes interceptées :nombre total de requêtes interceptées et redirigées vers la page de statistiques HAProxy.

Les colonnes "LbTot" et "Last" ne sont pas utilisées dans cette section.

Backend

Cette section affiche le nombre de connexions actuelles à l'un des serveurs actifs.

La colonne "Cur" répertorie le nombre de connexions actives à un serveur. La colonne "Max" affiche le plus grand nombre de connexions qui ont été établies simultanément sur le serveur donné. La colonne "Limite" indique le nombre maximum de connexions autorisées pour un serveur, tel que défini par le paramètre maxconn sur une ligne de serveur.

La ligne du backend affiche la valeur de fullconn pour « Limit » ou, si elle n'est pas définie, elle utilise la formule suivante :somme des valeurs de limite de sessions pour les frontends qui acheminent vers ce backend, divisée par 10. La colonne "Total" affiche le nombre cumulé de connexions qui ont utilisé le serveur donné. Lorsque vous survolez ce champ, la page affiche les statistiques suivantes :

  • Jouez. sessions :nombre cumulé de connexions établies avec ce serveur.
  • Jouez. Réponses HTTP :nombre cumulé de réponses HTTP reçues de ce serveur.
  • Réponses HTTP xxx :nombre total de réponses HTTP xxx de ce serveur.
  • Autres réponses :nombre total de réponses HTTP non couvertes par les autres statistiques.
  • Temps d'attente :temps en millisecondes pendant lequel une connexion est restée en file d'attente en attendant un créneau de connexion au serveur, en moyenne sur les 1 024 dernières connexions réussies.
  • Temps de connexion :temps en millisecondes nécessaire pour se connecter avec succès au serveur, en moyenne sur les 1 024 dernières connexions réussies.
  • Temps de réponse :temps de réponse du serveur en millisecondes, moyenné sur les 1 024 dernières connexions réussies.
  • Durée totale :durée totale de la session en millisecondes, moyenne calculée sur les 1 024 dernières connexions réussies.

La colonne "LbTot" indique le nombre total de fois que le serveur donné a été sélectionné pour répondre à une requête. Cela peut être dû à un équilibrage de charge normal ou à une redistribution à partir d'un serveur défaillant. La colonne "Dernière" indique le temps écoulé depuis la dernière connexion.

Octets

Interface

Cette section affiche la quantité cumulée de données envoyées et reçues entre HAProxy et les clients. La colonne "In" indique le nombre total d'octets reçus et la colonne "Out" indique le nombre total d'octets envoyés.

Backend

Cette section affiche la quantité de données envoyées et reçues entre HAProxy et le serveur. La colonne "In" indique le nombre d'octets envoyés au serveur. La colonne "Sortie" indique le nombre d'octets reçus en retour.

Refusé

Il montre le nombre de requêtes et de réponses qui ont été rejetées en raison de problèmes de sécurité dans les sections Frontend et Backend.

Interface

La colonne "Req" indique le nombre de requêtes qui ont été refusées en raison de directives de configuration (http-request deny, http-request rejet, etc.) placées dans la section Frontend ou Listen.

La colonne "Resp" indique le nombre de réponses qui ont été refusées par une directive http-response deny placée dans un frontend ou listen.

Backend

La colonne "Req" s'applique uniquement au backend dans son ensemble. Il montre le nombre de requêtes qui ont été rejetées par les directives de configuration (http-request deny, http-request rejet, etc.) dans un backend.

La colonne "Resp" indique le nombre de réponses qui ont été rejetées pour un serveur donné en raison des directives de configuration http-response deny ou tcp-response content rejet dans un backend.

Erreurs

Interface

Seule la colonne "Req" est utilisée ici. Il indique le nombre de requêtes ayant rencontré une erreur.

Les causes possibles incluent :

  • Résiliation anticipée du client
  • Une erreur de lecture du client
  • Le client a expiré
  • Le client a fermé la connexion
  • Le client a envoyé une requête malformée
  • La demande a été ignorée

Backend

Il affiche le nombre d'erreurs liées à la communication avec un serveur principal.

La colonne "Req" n'est pas utilisée. La colonne "Conn" indique le nombre de requêtes ayant rencontré une erreur lors de la tentative de connexion au serveur. La colonne "Resp" affiche les erreurs rencontrées lors de l'obtention de la réponse.

Avertissements

Backend

Uniquement pour les backends. Cette section affiche le nombre de tentatives et de réexpéditions. Si vous avez ajouté une directive retries à votre backend, la colonne "Retr" indique le nombre total de tentatives de connexion. La colonne "Redis" indique le nombre de fois où HAProxy n'a pas réussi à établir une connexion à un serveur et l'a redistribué à un autre serveur. Cela nécessite que vous ayez ajouté une directive d'option de réexpédition.

Serveur

Interface

Le seul champ de cette section qui s'applique à une interface est le champ Statut. Lorsque Status est OPEN, le frontend fonctionne normalement et est prêt à recevoir du trafic.

Backend

Cette section affiche des détails sur l'état, la santé et le poids de chaque serveur. La colonne "Statut" indique si le serveur est actuellement opérationnel et pour combien de temps. Il peut afficher n'importe lequel des statuts suivants :

  • UP :le serveur est signalé comme sain.
  • DOWN :le serveur est signalé comme défectueux et incapable de recevoir des requêtes.
  • NOLB :vous avez ajouté http-check disable-on-404 au backend et l'URL vérifiée a renvoyé une réponse HTTP 404.
  • MAINT :le serveur a été désactivé ou mis en mode maintenance.
  • DRAIN :le serveur a été mis en mode drain.
  • pas de vérification :les vérifications de l'état ne sont pas activées pour ce serveur.

La colonne "LastChk" affiche une valeur comme L7OK/200 dans Xms. Cette valeur signifie qu'une vérification de l'état de la couche 7 a été effectuée ; il a renvoyé une réponse HTTP 200 OK et il l'a fait en X millisecondes.

La colonne « Wght » indique la proportion de trafic qu'elle acceptera, telle que définie par le paramètre de poids sur la ligne du serveur. La colonne "Act" indique si le serveur est actif (marqué d'un Y) ou une sauvegarde (marqué d'un -). La colonne "Back" indique si le serveur est une sauvegarde (marqué d'un Y) ou actif (marqué d'un -).

La colonne "Chk" indique le nombre de vérifications d'état ayant échoué. La colonne "Dwn" indique le nombre de transitions de UP à DOWN. La colonne "Dwntme" indique depuis combien de temps le serveur est indisponible.

Si vous avez ajouté un paramètre de démarrage lent à une ligne de serveur, lorsque vous désactivez puis activez ce serveur, la colonne "Thrtle" indique le pourcentage de trafic que le serveur acceptera. Le pourcentage augmentera progressivement jusqu'à 100 % sur la période que vous avez définie.

Ces informations sont basées sur un article de blog HAProxy auquel vous pouvez vous référer pour des informations plus détaillées.

HAproxy sur ClusterControl

Outre le déploiement et la gestion, ClusterControl fournit également un aperçu des statistiques HAProxy et des tableaux de bord en temps réel à partir de l'interface utilisateur. Depuis ClusterControl, vous pouvez accéder à la page de statistiques sur ClusterControl -> Sélectionner un cluster -> Nœuds -> choisissez le nœud HAProxy similaire à la capture d'écran ci-dessous :

Vous pouvez activer/désactiver un serveur depuis l'équilibrage de charge en cochant/décochant le bouton de la case à cocher sous la colonne "Activé". Ceci est très utile lorsque vous souhaitez que votre application ignore intentionnellement la connexion à un serveur, par exemple pour la maintenance ou pour tester et valider de nouveaux paramètres de configuration ou des requêtes optimisées.

Vous pouvez également surveiller vos serveurs HAProxy à partir de ClusterControl en consultant la section Tableau de bord.

Pour l'activer, il vous suffit d'aller dans ClusterControl -> Select Cluster -> Tableaux de bord -> Activer la surveillance basée sur l'agent. Cela va déployer un agent sur chaque nœud pour obtenir toutes les informations pour générer les graphiques correspondants.

Ici, vous ne verrez pas seulement toutes les métriques nécessaires pour surveiller le nœud HAProxy, mais aussi pour surveiller tout l'environnement à l'aide des différents tableaux de bord.

Conclusion

HAProxy est un bon et puissant outil pour améliorer les performances de votre base de données et de vos applications. Il est également utile d'ajouter la haute disponibilité et le basculement à votre environnement. Pour savoir ce qui se passe dans votre nœud HAProxy, vous devez comprendre les métriques qui sont surveillées dans la page de statistiques, voire améliorer cette surveillance en ajoutant un tableau de bord pour la rendre plus conviviale.

Dans ce blog, nous avons expliqué chaque métrique mentionnée dans la page de statistiques HAProxy, et nous avons également montré à quoi cela ressemble sur ClusterControl, où vous pouvez accéder à la fois aux statistiques et aux tableaux de bord des sections HAProxy à partir du même système.