关于Amazon EC2:ELB运行状况检查在启动后不检查Web实例

ELB Health Check not checking web instance after booting up

我们在ELB后面有一个Web实例(nginx),可以在需要时手动将其打开。
当我们在本地运行wget时,该Web应用程序快速启动,并成功返回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

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

尼尔


每次启动时,您的实例是否使用不同的IP地址?

Elastic Load Balancing registers your load balancer with your EC2 instances using the IP addresses that are associated with your instances. When an instance is stopped and then restarted, the IP address associated with your instance changes. Your load balancer cannot recognize the new IP address, which prevents it from routing traffic to your instances.

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

重新启动实例的合适方法似乎是,当启动过程确定实例已准备好进行网络流量时,在Web服务器实例上运行的代码通过API以编程方式向负载均衡器注册其自身。


更新:

Luke@AWS:"You should be de-registering from your ELB during a stop/start."

— https://forums.aws.amazon.com/thread.jspa?messageID=463835

我很好奇控制台显示的是实例在ELB中处于非活动状态的原因。 ELB和EC2之间确实存在某种交互,其中ELB对实例的EC2状态(例如"已停止")有某种了解,而不仅仅是运行状况检查。这没有充分的文档记录,但是我推测基于这种认识,ELB认为不应该为运行状况检查而烦恼,并且控制台可能会提供一些有用的信息,至少可以证实这一点。

如果有足够的时间,ELB可能会意识到实例再次运行并开始发送运行状况检查,但是实例也可能具有与i-xxxxxx分开的隐藏的全局元标识符,并且停止并重新启动的实例是,从此标识符的角度来看,它是一个不同的实例。

...但是答案似乎是,停止实例并重新启动实例需要向ELB重新注册。