【问题标题】:No traffic from ELB to one of the Auto Scaling Instances没有从 ELB 到 Auto Scaling 实例之一的流量
【发布时间】:2012-03-06 10:03:40
【问题描述】:

我们使用 Auto Scaling,它对我们来说效果很好,但是今天早上它发生了一些事情。 由于某种原因,其中一个实例的 CPU 利用率约为 %0,这将 %100 的 CPU 利用率带到了同一可用区中的其余实例,并且它没有扩大,因为所有实例的平均 CPU 利用率约为 %70而触发器应该在 %80 被命中时启动新的实例。也使用 ELB 实例运行状况检查,但此 %0 实例运行状况良好。

是否可以配置 Auto Scaling 以删除此类实例? 我们不想为检查设置任何自定义 cronjobs。

【问题讨论】:

    标签: amazon-ec2 amazon-web-services amazon-elb


    【解决方案1】:

    更新 2

    是否可以配置 Auto Scaling 以删除此类实例?

    是的,见下文 - 根据您的 cmets,您已经正确完成了这项工作。

    我们不想为检查设置任何自定义 cronjobs。

    鉴于您的配置显然是正确的(暗示 Auto Scaling 和/或 ELB 各自存在问题),恐怕无法通过主动关闭未使用的实例来避免自定义解决方案或促进as-set-instance-health,正如我在下面的初始回答中已经建议的那样 - tribalcrossing 对ELB-Unhealthy instances taken OOS then removed from ELB automatically 的回答也建议了前者,这似乎解决了您的情况:

    我们运行一个每 5 分钟触发一次的 cronjob 来扫描所有 ELB 中的服务器以检查它是否已启动超过 5 个 分钟和是不健康的。当我们找到一个时,我们将其关闭。我们已经 hadd 的“死”实例卡在 ELB 中并抛出的问题 监控触发自动缩放操作的指标,以及 cronjob 为我们解决了问题。


    更新 1

    ELB 实例运行状况检查也被使用,但是这个 %0 实例是 健康。

    您指的是哪个健康指标以及您如何依次得出实例健康的结论?

    重要的是要意识到,Autoscaling 和 ELB 测量健康实例的方式不同,请参阅 alighafour 对 Autoscaling not reacting to unhealthy instances 的回复:

    ELB 在应用层进行检查,而在应用层进行自动缩放检查 机器层。

    AWS 团队对链接问题 ELB-Unhealthy instances taken OOS then removed from ELB automatically 的回复中进一步详细说明了这种差异(实际上解决了一个相反的问题):

    自动缩放正在查看实例运行状况 - 他们将采用实例 如果数据显示实例不健康,则关闭。他们会采取 在那个时候把它从ELB中取出,然后关闭实例。

    另一方面,ELB 正在通过以下方式进行应用程序运行状况检查 读取文件或连接到端口。如果申请 未能通过一定数量的这些检查,实例继续运行, 但 ELB 不会向其发送任何新流量。 ELB 继续 执行健康检查 - 如果应用程序实例变得健康 再次,它将开始将流量路由到它。 ELB 不会删除 ELB 注册中的实例 - 它只是停止发送它 交通,直到它再次健康。 [强调我的]

    结论

    看起来上述场景可能确实适用于您的体验:ELB 停止向您的实例发送流量,因为 ELB 健康检查失败,而 Auto Scaling 健康检查没有发现实例存在问题;例如,如果 ELB 运行状况检查探测 Apache 提供的网页,该网页由于任何原因(例如 Apache 崩溃或其他)未能响应,则可能会发生这种情况。

    解决方案

    您需要配置 Auto Scaling 策略,使其健康决策基于 EC2 健康状态 ELB 健康状态,如 部分所述为 Elastic Load Balancing 创建运行状况检查 within Maintaining Current Scaling Level

    默认情况下,Auto Scaling 使用 Amazon EC2 的所有运行状况 Auto-Scaling 托管实例。同时使用弹性负载 Balancer的健康检查,设置组的HealthCheckType属性 到 ELB:

    % as-update-autoscaling-group myGroup –-health-check-type ELB

    有了这个配置,一旦 ELB 健康检查失败,实例就会被认为是不健康的,并且会被相应地替换。


    初步回答

    一个 Auto Scaling 组是否可以有多个触发器?

    很遗憾,没有,参见例如AWS 团队回复How to set Multiple Triggers in Template

    很遗憾,Auto Scaling 服务每个 Auto 仅允许 1 个触发器 缩放组,因此我们不支持有多个触发器 此时模板中的同一组。

    另一种方法是通过 as-set-instance-health 实施自定义解决方案,如Maintaining Current Scaling Level 中的自定义健康检查部分所述:

    如果您有自己的健康检查系统,您可以将其与 自动缩放。使用 SetInstanceHealth 发送实例的运行状况 信息直接从您的系统传输到 Auto Scaling。

    【讨论】:

    • 但是我已经成功地添加了一个缩小策略并为其分配了指标。我不确定这是否有帮助,因为 Auto Scaling 将终止最旧的实例,并且没有保证 %0 一个被删除。您能检查一下为什么我们的实例 ID 没有流量吗?
    • @RomanNewaza:查看我的更新答案,了解可能发生的情况以及相应的配置调整。
    • "ELB 实例运行状况检查也已使用,但此 %0 实例运行状况良好。" - 这意味着我们也使用 ELB 健康检查:HEALTH-CHECK:ELB
    猜你喜欢
    • 2014-06-08
    • 2018-07-11
    • 2013-12-02
    • 2017-07-05
    • 2021-08-25
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 2017-04-23
    相关资源
    最近更新 更多