我在EC2实例上运行微服务(使用不同的编程语言)。 在生产时,当这些服务尝试相互交互时,我注意到一些502 Bad Gateway Errors。 此外,在所请求服务的日志中,它没有显示任何api调用正在被点击
示例服务A呼叫服务B,但在服务B日志中没有任何内容表明呼叫来自服务A.
是否可能是AWS负载均衡器问题?任何帮助,将不胜感激。提前谢谢。
尝试解决方案: 我们尝试在每个服务中创建http / https连接代理,但我们仍然遇到此问题。
更新: 在lb日志中,会记录api,但目标响应代码显示“ - ”,而lb响应代码显示502或504.这是否意味着lb无法处理流量或我的应用程序?
还有什么可能的解决方案?
答案 0 :(得分:16)
我们遇到了同样的问题。
在我们的设置中,AWS Application ELB具有4个EC2实例的目标组。在每个EC2实例上,都有一个Apache2转发到Tomcat。
ELB的默认连接KeepAlive为60秒。 Apache2的默认连接KeepAlive为5秒。如果5秒结束,Apache2将关闭其连接并重置与ELB的连接。但是,如果请求恰好在恰当的时间进入,ELB将接受它,决定将其转发到哪个主机,并在那一刻,Apache关闭连接。这将导致所述502错误代码。
解决方案是:当你有级联代理/ LB时,要么调整他们的KeepAlive超时,要么 - 最好 - 甚至让它们更长一点,你得到的更远。
我们将ELB超时设置为60秒,将Apache2超时设置为120秒。问题消失了。