【问题标题】:ELB Health Check not checking web instance after booting upELB 健康检查在启动后不检查 Web 实例
【发布时间】:2013-09-25 13:56:48
【问题描述】:

我们在 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

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

尼尔

【问题讨论】:

    标签: amazon-ec2 connectivity amazon-elb vpc amazon-vpc


    【解决方案1】:

    您的实例每次启动时是否提供不同的 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 分开的隐藏全局元标识符 em> 并且从这个标识符的角度来看,一个停止和重新启动的实例是一个不同的实例。

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

    【讨论】:

    • 嗨,Michael,我的环境是在 VPC 中设置的,因此私有 IP 在关闭后不会更改。您是否知道我的 ELB 是否按预期运行,或者是否应该不断检查实例的运行状况?
    • 谢谢迈克尔,是的,我们也发现了什么,大约 20 分钟后,ELB 将再次开始检查实例的运行状况。
    猜你喜欢
    • 2014-10-02
    • 2017-07-16
    • 2020-12-18
    • 2021-05-30
    • 2019-10-25
    • 1970-01-01
    • 2018-05-29
    • 2016-03-28
    • 1970-01-01
    相关资源
    最近更新 更多