什么会导致 EC2 实例无法添加到 Elastic Load Balancer/fail 健康检查?
What could cause an EC2 instance to fail to be added to an Elastic Load Balancer/fail the Health Check?
我会尽最大努力提供 MCVE,而不会让您陷入细节。
我最近启动了两个 EC2 实例作为 Tomcat 作为现有实例的克隆启动的实例。我还创建了一个 Elastic Load Balancer (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
增加超时似乎没有帮助。我确信一定有一些微妙的 setting/difference 阻止了 ELB 发现问题实例,但我用谷歌搜索了一下,没有找到针对我的具体案例的任何建议。
如果任何其他信息对诊断问题有用,请告诉我。
在 ELB 中将 "Ping Target HTTP:8080/"
更改为 "Ping Target TCP:8080/"
或简而言之使用 TCP 协议而不是 HTTP 它将起作用。
如果您使用 HTTP 方法,请始终确保您提到的是“/test.html”之类的测试文件,而不仅仅是“/”。
在此处为我的问题添加更多信息。
运行状况检查的工作原理是在 ping 端口和 ping 路径 [1] 上向实例发出 HTTP 或 HTTPS GET 请求。如果负载均衡器在响应超时时间内收到除“200 OK”之外的任何响应,则认为该实例不健康。对于仅包含路径 '/' 的请求,将留给您的网络服务器来处理所谓的 "trailing slash" 重定向。例如,Apache 会将尾部斜杠重定向到由其 DirectoryIndex 指令指定的资源 [2]。
文件:
[1] http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elb-healthchecks.html
[2] https://httpd.apache.org/docs/2.4/mod/mod_dir.html#directoryindex
我会尽最大努力提供 MCVE,而不会让您陷入细节。
我最近启动了两个 EC2 实例作为 Tomcat 作为现有实例的克隆启动的实例。我还创建了一个 Elastic Load Balancer (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
增加超时似乎没有帮助。我确信一定有一些微妙的 setting/difference 阻止了 ELB 发现问题实例,但我用谷歌搜索了一下,没有找到针对我的具体案例的任何建议。
如果任何其他信息对诊断问题有用,请告诉我。
在 ELB 中将 "Ping Target HTTP:8080/"
更改为 "Ping Target TCP:8080/"
或简而言之使用 TCP 协议而不是 HTTP 它将起作用。
如果您使用 HTTP 方法,请始终确保您提到的是“/test.html”之类的测试文件,而不仅仅是“/”。
在此处为我的问题添加更多信息。
运行状况检查的工作原理是在 ping 端口和 ping 路径 [1] 上向实例发出 HTTP 或 HTTPS GET 请求。如果负载均衡器在响应超时时间内收到除“200 OK”之外的任何响应,则认为该实例不健康。对于仅包含路径 '/' 的请求,将留给您的网络服务器来处理所谓的 "trailing slash" 重定向。例如,Apache 会将尾部斜杠重定向到由其 DirectoryIndex 指令指定的资源 [2]。
文件: [1] http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elb-healthchecks.html [2] https://httpd.apache.org/docs/2.4/mod/mod_dir.html#directoryindex