【发布时间】:2016-10-11 11:53:12
【问题描述】:
我会尽我所能提供一个 MCVE,而不会让你沉浸在细节中。
我最近启动了两个 EC2 实例来充当 Tomcat,它们是作为现有实例的克隆启动的。我还创建了一个弹性负载均衡器 (ELB) 来放置在这些 Tomcat 实例的前面,以管理对我的 Web 应用程序的请求。据我所知,这两个 EC2 实例基本相同。他们都共享一个安全组,监听 8080 端口等。
当我将实例添加到 ELB 时,一个成功,一个没有。显示的错误是:
Instance has failed at least the UnhealthyThreshold number of HealthChecks consecutively.
在 EC2 实例列表中,两个 Tomcat 的个人运行状况报告都很好,我可以通过 ssh 访问它们。我已经确认 Tomcat 服务正在两者上运行,并且 netstat -alnt 显示两者都在监听 8080 端口。重新启动问题实例并将其重新添加到 ELB 并没有帮助。
以下是适用于这两个实例的运行状况检查设置:
Ping Target HTTP:8080/
Timeout 5 seconds
Interval 30 seconds
Unhealthy threshold 5
Healthy threshold 10
延长超时时间似乎没有帮助。我确信一定有一些微妙的设置/差异阻止了 ELB 发现问题实例,但我已经用谷歌搜索过,对于我的具体案例的任何建议都没有成功。
如果有任何其他信息对诊断问题有用,请告诉我。
【问题讨论】:
-
是否有相同的安全grp?是否有任何实例级防火墙正在运行?您可以直接从另一个实例中访问 heathcheck 端点吗?
-
在 ELB 中将“Ping Target HTTP:8080/”更改为“Ping Target TCP:8080/”,或者简而言之,使用 TCP 协议而不是 HTTP 它将起作用
-
@error2007s 哇,成功了!我很好奇,为什么使用 HTTP 会导致一个被接受而不是另一个?根本原因是什么?无论如何,如果您发表评论作为答案,我很乐意接受!
标签: tomcat amazon-web-services amazon-ec2 load-balancing