web-dev-qa-db-fra.com

AWS Load Balancer 502

J'ai des microservices (dans différents langages de programmation) fonctionnant sur une instance EC2. En production, je remarque quelques 502 erreurs de mauvaise passerelle lorsque ces services tentent d'interagir les uns avec les autres. Également dans les journaux du service demandé, il ne montre aucun appel d'API en cours

exemple, le service A appelle le service B, mais dans les journaux du service B, rien n'indique qu'un appel provenait du service A.

Peut-il s'agir d'un problème d'équilibrage de charge AWS? Toute aide serait appréciée. Merci d'avance.

Solution essayée: nous avons essayé de créer des agents de connexion http/https dans chaque service, mais nous obtenons toujours ce problème.

Mise à jour: dans les journaux lb, l'API est enregistrée, mais le code de réponse cible affiche "-" tandis que le code de réponse lb affiche 502 ou 504. Cela signifie-t-il que lb n'est pas en mesure de gérer le trafic ou mon application?

Quelle peut également être la solution possible?

20
Root

Nous avons eu le même problème.

Dans notre configuration, un ELB d'application AWS a un groupe cible de 4 instances EC2. Sur chacune des instances EC2, il y a un Apache2 qui transmet à un Tomcat.

L'ELB dispose d'une connexion par défaut KeepAlive de 60 secondes. Apache2 a une connexion par défaut KeepAlive de 5 secondes. Si les 5 secondes sont écoulées, l'Apache2 ferme sa connexion et réinitialise la connexion avec l'ELB. Cependant, si une demande arrive précisément au bon moment, l'ELB l'acceptera, décidera à quel hôte la transmettre, et à ce moment, Apache ferme la connexion. Cela se traduira par ledit code d'erreur 502.

La solution est la suivante: lorsque vous avez des proxys/LB en cascade, alignez leurs délais d'expiration KeepAlive ou, de préférence, allongez-les un peu plus à mesure que vous descendez.

Nous avons défini le délai d'attente ELB à 60 secondes et le délai d'attente Apache2 à 120 secondes. Le problème a disparu.

17
Jan Doerrenhaus