1

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

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

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

我已经编辑了我们的 Healthcheck 设置以允许更长的超时时间并将 Unhealthy Threshold 提高到 3 但这并没有什么区别。

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

侦听器:HTTPS 443 到 HTTPS 443 SSL 证书

ELB 和 Web 实例都在同一个公共 VPC 安全组上,该安全组已将 http/https 开放到 0.0.0.0/0

谁能帮我弄清楚为什么 ELB 健康检查没有在 Web 实例启动后立即启动?这是设计使然还是有自动启动检查的方法?谢谢你。

尼尔

4

1 回答 1

0

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

Elastic Load Balancing 使用与您的实例关联的 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。

于 2013-09-22T22:52:44.363 回答