ELB 运行状况检查在启动后不检查 Web 实例



我们在ELB后面有一个Web实例(nginx),我们在需要时手动打开电源。Web 应用启动速度很快,并在我们在本地运行 wget 时返回成功的 200 响应。

但是,网站不会加载,因为 ELB 不会向实例发送运行状况检查请求。我可以通过查看nginx访问日志来确认这一点。

我一直使用的解决方法是从 ELB 中删除 Web 实例并将其重新添加。这似乎再次激活了运行状况检查,并且它们在我们的访问日志中可见。

我已经编辑了我们的运行状况检查设置以允许更长的超时并将不正常阈值提高到 3,但这没有任何区别。

目前我们的健康检查配置是:Ping 目标:HTTPS:443/登录超时:10 秒间隔:12秒不正常:2健康: 2

听者:HTTPS 443 到 HTTPS 443 SSL 证书

ELB 和 Web 实例都位于同一个公有 VPC 安全组上,该安全组的 http/https 已打开到 0.0.0.0/0

谁能帮我弄清楚为什么 ELB 运行状况检查在 Web 实例启动后没有立即启动? 这是设计使然还是有办法自动启动检查?谢谢。

尼尔

您的实例是否在每次启动时都会提供不同的 IP 地址?

弹性负载均衡使用与您的实例关联的 IP 地址向 EC2 实例注册您的负载均衡器。当实例停止然后重新启动时,与您的实例关联的 IP 地址会发生变化。您的负载均衡器无法识别新的 IP 地址,这会阻止其将流量路由到您的实例。

— http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/TerminologyandKeyConcepts.html#registerinstance

重新

关联实例的适当方法是,当启动过程确定实例已准备好用于 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 重新注册。

最新更新