没有来自ELB的流量到其中一个Auto Scaling实例

时间:2012-02-15 02:13:40

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

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

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

Auto Scaling Issue

1 个答案:

答案 0 :(得分:5)

更新2

  

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

是的,请参阅下文 - 根据您的评论,您已经正确地完成了这项工作。

  

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

鉴于您的配置显然是正确的(暗示 Auto Scaling 和/或ELB的相应问题),我担心无法通过主动关闭未使用的实例来避免自定义解决方案或者促进 as-set-instance-health ,正如我在下面的初步答案中所建议的那样 - 前者是由tribalcrossing对ELB-Unhealthy instances taken OOS then removed from ELB automatically的答案所建议的,这似乎可以解决你的情况:< / p>

  

我们运行一个每5分钟发射一次的cronjob来扫描所有的   ELB中的服务器检查它是否已超过5   分钟和不健康。当我们找到一个时,我们将其关闭。我们已经   在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的回复(实际上解决了反向问题)中进一步详细说明了这种差异:

  

Autoscaling正在研究实例健康状况 - 他们将采用实例   如果数据显示实例不健康,则关闭。他们会采取   它当时不在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健康状况   自动扩展管理的实例。还要使用Elastic Load   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自定义运行状况检查部分所述:

  

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