web-dev-qa-db-fra.com

Quelques 502 erreurs dans l'équilibrage de charge HTTP GCP

Notre équilibreur de charge renvoie 502 erreurs pour certaines demandes. Il ne s'agit que d'un très faible pourcentage du total des demandes, nous avons environ 36 000 demandes par heure et environ 40 erreurs par heure, donc seulement 0,01% des demandes renvoie une erreur.

Les instances sont saines lorsque l'erreur se produit et nous avons ajouté cette règle de transfert au pare-feu pour l'équilibreur de charge: 130.211.0.0/22 ​​tcp: 1-5000 Appliquer à toutes les cibles

Ce n'est pas un problème très grave car l'application tolère de telles erreurs, mais j'aimerais savoir pourquoi elles sont données.

Toute aide sera appréciée.

20
Jordi

Il semble qu'il n'y ait pas de solution facile à cela.

Comme l'explique Mike Fotinakis dans ce blog (merci pour cette info JasonG :)):

Il se trouve qu'il existe une condition de concurrence entre l'équilibreur de charge HTTP (S) de Google Cloud et le délai d'expiration par défaut de 65 secondes de NGINX. Le délai NGINX peut être atteint en même temps que l'équilibreur de charge tente de réutiliser la connexion pour une autre demande HTTP, ce qui interrompt la connexion et entraîne une réponse 502 Bad Gateway de l'équilibreur de charge.

Dans mon cas, j'utilise Apache avec le module mpm_prefork. La solution proposée consiste à augmenter le délai d'expiration de la connexion à 650 s, mais cela n'est pas possible car chaque connexion ouvre un nouveau processus (ce qui représenterait un grand gaspillage de ressources).

MISE À JOUR:
Il semble qu'il y ait une nouvelle documentation sur ce problème sur la page de documentation officielle de l'équilibreur de charge (recherchez "Timeouts and retries"): https://cloud.google.com/ compute/docs/load-balancing/http/

Ils recommandent de définir la valeur KeepAliveTimeout sur 620 dans les deux cas (Apache et Nginx).

10
Jordi

J'ai eu un problème avec 502 qui était inexplicable après avoir recréé un équilibreur de charge et une configuration backend. J'ai recréé mon groupe d'arrière-plan et d'instance pour les instances non gérées et cela a semblé résoudre le problème pour moi. Je n'ai pu identifier aucun problème dans ma configuration dans GCP :(

Mais j'ai eu beaucoup plus d'erreurs - 1/10. Il existe des journaux d'équilibrage de charge qui vous diront quelle est la cause et des documents expliquent les causes.

Par exemple, les miens étaient: jsonPayload: {statusDetails: "failed_to_pick_backend" @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBal‌ ancerLogEntry"}

Si vous utilisez nginx et qu'il est sur POSTS et que l'erreur est signalée comme "backend_connection_closed_before_data_sent_to_client", elle peut être corrigée en modifiant vos délais d'expiration nginx. Voir cet excellent article de blog:

https://blog.percy.io/tuning-nginx-behind-google-cloud-platform-http-s-load-balancer-305982ddb340#.btzyusgi6

9
JasonG

vérifier si votre pare-feu principal bloque ou non l'adresse IP cdn du cloud de google (pas seulement 130.211.0.0/22)), toutes ces adresses peuvent être trouvées ici: https://cloud.google.com/compute/docs/faq #find_ip_range

0
Harris Tailor