7 votes

HAProxy ne répartit pas équitablement la charge des serveurs

HAProxy ne semble pas garder les connexions aux serveurs équilibrées.

Gardez ceci à l'esprit:

  • utilisation de HAProxy v1.3.26
  • 5 spécifications de serveurs équilibrées
  • algorithme est round robin, mais aucune pondération n'est appliquée pour chaque serveur
  • nombre maximal de connexions globales défini dans haproxy à 80 000

Comme le montre l'image, les serveurs C et D semblent recevoir beaucoup plus de connexions que les autres. En raison de cette charge supplémentaire, ils continuent de tomber en panne et de redémarrer automatiquement.

statconfig

J'ai essayé de lire la documentation officielle de HAproxy et j'ai fait quelques recherches sur Google mais je n'ai rien trouvé d'utile. Espérons que quelqu'un ici pourra aider.

Quelques questions:

  1. Pourquoi cela se produit-il lorsque la configuration indique d'utiliser roundrobin, que les spécifications des serveurs sont les mêmes et qu'aucune pondération n'est appliquée?

  2. Qu'est-ce qui détermine la sous-colonne "max" dans la colonne "Sessions" (celle qui dit 1970, 1444, etc.). Les serveurs C, D, E sont dans la plage des 3K et les 2 autres sont légèrement en dessous de 2K. Pourquoi cette différence?

  3. Comment tout garder équilibré?

  4. Quelqu'un peut-il expliquer chaque colonne? Je suis surpris que la documentation officielle de HAproxy n'explique pas vraiment cela.

1voto

morgana Points 63

Que se passe-t-il si vous retirez C et D. Comment le comportement change-t-il?

À quoi ressemble votre configuration?

Avis: Ce qui suit est mes observations du comportement de HAProxy plutôt que ce qu'il pourrait réellement être.

HAProxy utilise toujours des poids d'après ce que je comprends. Si vous regardez vos poids sur la capture d'écran, il indique qu'ils ont tous un poids de 1. En exécutant roundrobin, nous avons 4 serveurs de poids 50 et un de poids 1. Les quatre de poids 50 sont presque parfaits en ce qui concerne le nombre de sessions (2 à 3 de différence). Le serveur avec le poids 1 a le bon nombre de sessions proportionnellement parlant.

Essayez de définir explicitement les poids à une valeur plus élevée. Cela devrait aider à affiner un peu plus le calcul de poids, ce qui devrait permettre d'atteindre une plus grande précision. Si le poids est de un pour tous, alors il se base sur 20% ce qui n'est pas très précis. Maintenant, si vous définissez tous les 5 à un poids de 20 alors il peut se baser sur 1%.

  1. Je ne suis pas sûr. J'ai besoin de voir la configuration d'abord.
  2. Je suis assez sûr que la colonne "max" représente le nombre maximum de connexions qu'il a eu à un moment donné plutôt que le maximum autorisé réel.
  3. Nous utilisons round robin et ça fonctionne très bien donc encore une fois, nous devons voir la config et essayer quelques choses.
  4. La plupart des colonnes je pense sont assez claires. Ce qui m'aide est de regarder la colonne étendue ci-dessus (par exemple, Queue, Taux de Session, etc.)

J'espère que cela vous donne quelques pistes à explorer.

1voto

BraveNewCurrency Points 403

Vous devriez utiliser la méthode "leastconn" au lieu de round robin. Cela utilise légèrement plus de CPU, mais assure un meilleur équilibrage de charge si vos sessions ne sont pas très courtes.

Si vous regardez, vos serveurs A, B et E ont environ 250 sessions ouvertes actuellement (Sessions Cur). Mais C+D en ont beaucoup plus. Mais parce que vous avez spécifié "round robin", ces serveurs surchargés reçoivent une répartition égale de tout le nouveau trafic.

"leastconn" permet aux serveurs de récupérer s'ils sont submergés. "roundrobin" continue d'envoyer du trafic à tout le monde de manière égale (cumulant plus de connexions à un serveur lent) jusqu'à ce qu'ils tombent en panne.

Les significations de toutes les variables de session sont documentées vers la fin de la documentation très complète. (Recherchez "statistics and monitoring")

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X