Lors de la configuration du proxy HA, comment décidez-vous des valeurs à affecter aux délais d'expiration? J'ai lu une demi-douzaine d'échantillons dans divers blogs, et tout le monde utilise des délais d'attente différents et personne ne discute pourquoi.
HAProxy semble particulièrement préoccupé par le client, la connexion et le serveur, problème pour lequel HAPRoxy envoie un avertissement si vous laissez complètement non défini:
While not properly invalid, you will certainly encounter various problems
with such a configuration. To fix this, please ensure that all following
timeouts are set to a non-zero value: 'client', 'connect', 'server'.
La documentation est inutile à cet égard: elle suggère "un peu au-dessus de multiples de 3 secondes" mais ne permet pas de choisir un multiple de 1 contre 100 ou 42.
Le RPM que j'utilise (référentiel Amazon Linux) définit les valeurs par défaut suivantes:
timeout connect 10s
timeout client 1m
timeout server 1m
Deux de celles-ci sont des multiples exacts de 3 secondes, en violation du seul conseil officiel que j'ai vu.
Si vous n'avez pas de conseil de réglage spécifique, une question plus simple est peut-être celle-ci: à quoi dois-je m'attendre en cas d'erreur avec des délais très courts ou très longs?
Avant-propos
Cela fait un moment que je peaufine HAProxy et que j'ai effectué de nombreux tests de performance. De 100 requêtes HTTP / s à 50 000 requêtes HTTP / s.
Le premier conseil est d’ activer la page de statistiques sur HAProxy . Vous avez besoin de surveillance, sans exception. Vous aurez également besoin d'une mise au point si vous souhaitez dépasser 10 000 requêtes / s.
Les délais d'attente sont une bête déroutante car ils ont un très grand nombre de valeurs possibles, la plupart d'entre elles n'ayant aucune différence observable. Je n'ai pas encore vu quelque chose échouer à cause d'un nombre inférieur de 5% ou supérieur de 5%. 10000 vs 11000 millisecondes, qui s'en soucie? Probablement pas votre système.
Configuration
Je ne peux pas, en toute conscience, donner quelques chiffres comme étant les «meilleurs délais d'expiration de tous les temps».
Ce que je peux dire à la place, ce sont les délais les plus agressifs, qui sont toujours acceptables pour l’équilibrage de charge HTTP (S). Si vous rencontrez des valeurs inférieures, il est temps de reconfigurer votre équilibreur de charge.
client timeout:
Lecture : c'est le délai maximum pour recevoir les en- têtes de requête HTTP du client.
3G / 4G / 56k / satellite peut être lent parfois. Néanmoins, ils devraient pouvoir envoyer des en-têtes HTTP en quelques secondes, PAS 30.
Si quelqu'un a une connexion si mauvaise qu'il lui faut plus de 30 secondes pour demander une page (plus de 10 * 30 secondes pour demander les 10 images intégrées / CSS / JS), je pense qu'il est acceptable de le rejeter.
serveur timeout:
Lecture : il s'agit du délai maximal de réception des en- têtes de réponse HTTP du serveur (après réception de la demande complète du client). En gros, il s’agit du temps de traitement de vos serveurs, avant qu’il ne commence à envoyer la réponse.
Si votre serveur est si lent qu'il faut plus de 30 secondes pour commencer à donner une réponse, je pense qu'il est acceptable de le considérer comme mort.
Cas particulier : Certains services RARE effectuant un traitement très lourd peuvent prendre une minute ou plus avant de donner une réponse. Il peut être nécessaire d’augmenter considérablement ce délai pour cet usage spécifique. (Remarque: il s'agit probablement d'un problème de conception, utilisez une communication de style asynchrone ou n'utilisez pas du tout le protocole HTTP.)
timeout connect:
Lecture : durée maximale pendant laquelle un serveur doit accepter une connexion TCP.
Les serveurs sont dans le même réseau local que HAProxy, il devrait donc être rapide. Donnez-lui au moins 5 secondes, car le temps requis peut être long en cas d'imprévu (perte d'un paquet TCP à retransmettre, serveur demandant à un nouveau processus de prendre les nouvelles demandes, augmentation du trafic).
Cas spécial : lorsque les serveurs se trouvent sur un autre réseau local ou sur un lien peu fiable. Ce délai peut devoir être considérablement augmenté. (Remarque: il s'agit probablement d'une mauvaise architecture.)
vérification du délai d'attente:
Lire : lors d'une vérification de santé, le serveur doit
timeout connect
accepter la connexion, puistimeout check
donner la réponse.Tous les serveurs DOIVENT avoir un contrôle d'intégrité HTTP (S) configuré. C'est la seule façon pour l'équilibreur de charge de savoir si un serveur est disponible. Le bilan de santé est une simple
/isalive
page qui répond toujoursOK
.Donnez à ce délai au moins 5 secondes, car le temps requis peut être long en cas d'imprévu (perte d'un paquet TCP à retransmettre, serveur forçant un nouveau processus de traitement des nouvelles demandes, augmentation du trafic).
Histoire de guerre : Beaucoup de gens croient à tort que le serveur peut toujours répondre à cette simple page en 3 ms. Ils ont défini un délai d'expiration agressif (<2000 ms) avec un basculement intensif (2 échecs de vérification = serveur mort). J'ai vu des sites Web entiers en panne à cause de cela. En règle générale, il y a une légère augmentation du trafic, les serveurs back-end ralentissent, les contrôles de santé sont retardés ... jusqu'à ce qu'ils cessent tous ensemble, HAProxy pense que TOUS les serveurs sont morts en même temps et que le site entier tombe en panne.
la source