我们在ELB后面有一个Web实例(nginx),我们在需要时手动启动。 当我们在本地运行wget时,Web应用程序会快速启动并返回成功的200响应。
但是,由于ELB未向实例发送运行状况检查请求,因此无法加载网站。我可以通过查看nginx访问日志来确认这一点。
我一直在使用的解决方法是从ELB中删除Web实例并将其重新添加。 这似乎再次激活了健康检查,并且可以从我们的访问日志中看到它们。
我已经编辑了我们的Healthcheck设置以允许更长的超时并将不健康阈值提高到3但这没有任何区别。
目前我们的健康检查配置是: Ping目标:HTTPS:443 /登录 超时:10秒 间隔:12秒 不健康:2 健康:2
监听器: HTTPS 443到HTTPS 443 SSL证书
ELB和Web实例都在同一个公共VPC安全组上,http / https打开到0.0.0.0/0
任何人都可以帮我弄清楚为什么在网络实例启动后ELB运行状况检查没有开始?这是设计还是有办法自动启动检查?谢谢。
尼尔
答案 0 :(得分:0)
每次启动时,您的实例是否会提供不同的IP地址?
Elastic Load Balancing使用与您的实例关联的IP地址向您的EC2实例注册负载均衡器。当实例停止然后重新启动时,与您的实例关联的IP地址会更改。您的负载均衡器无法识别新的IP地址,从而阻止其将流量路由到您的实例。
当启动过程确定实例已准备好进行Web时,似乎将实例重新关联的适当方法是在Web服务器实例上运行的代码以编程方式通过API以负载均衡器注册自身流量。
更新
Luke @ AWS:“你应该在停止/开始时从你的ELB取消注册。”
- https://forums.aws.amazon.com/thread.jspa?messageID=463835
我很好奇控制台显示实例在ELB中不活动的原因。 ELB和EC2之间似乎存在某种形式的相互作用,其中ELB对实例的EC2状态(例如“停止”)具有某种意识,这超出了健康检查的范围。这没有详细记录,但我推测ELB基于这种意识,决定不值得为健康检查而烦恼,并且控制台可能提供一些有用的东西,至少可以证实这一点。
如果有足够的时间,ELB可能会意识到实例再次运行并开始发送运行状况检查,但实例也可能有一个与 i-xxxxxx分开的隐藏的全局元标识符从这个标识符的角度来看,停止并重新启动的实例是一个不同的实例。
...但答案似乎是停止实例并重新启动它需要重新注册ELB。