AWS Auto缩放组和非ELB运行状况检查

时间:2014-03-14 20:59:13

标签: amazon-web-services autoscaling

我们为其中一个云形成堆栈设置了自动扩展组,这些堆栈具有基于CPU的警报,用于确定何时扩展实例。

这很棒但我们最近将它从一个节点扩展到三个节点,其中一个节点无法通过cfn-init引导。一旦工作负载减少并且组缩小到一个节点,它就会杀死两个好的实例,并将部分自举节点作为唯一的剩余实例。这意味着我们停止处理工作,直到有人登录并重新启动引导过程。

显然这并不理想。当一个节点不在ELB后面时,通知自动扩展组节点不健康的最佳方法是什么?

由于这只是初始引导程序,我真正喜欢的是与自动扩展组通信,该节点发生故障并终止它并且新节点在其位置上旋转。

2 个答案:

答案 0 :(得分:7)

一位同事刚给我看了http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/as-configure-healthcheck.html,看起来很方便。

  

如果您有自己的运行状况检查系统,则可以使用运行状况检查系统中的信息来设置Auto Scaling组中实例的运行状况。

更新 - 我在启动期间设法使其正常工作。

以下是ASG的UserData部分:

#!/bin/bash -v
set -x
export AWS_DEFAULT_REGION=us-west-1
cfn-init --region us-west-1 --stack bapi-prod --resource LaunchConfiguration -v
if [[ $? -ne 0 ]]; then
    export INSTANCE=`curl http://169.254.169.254/latest/meta-data/instance-id`
    aws autoscaling set-instance-health \
         --instance-id $INSTANCE \
         --health-status Unhealthy
fi

答案 1 :(得分:0)

    cfn-init --region us-west-1 --stack bapi-prod --resource LaunchConfiguration -v
if [[ $? -ne 0 ]]; then
    export INSTANCE=`curl http://169.254.169.254/latest/meta-data/instance-id`
    aws autoscaling set-instance-health \
         --instance-id $INSTANCE \
         --health-status Unhealthy
fi

也可以作为单行完成。例如,我在Terraform中使用以下内容:

runcmd:
 - /tmp/runcmd-puppet.sh || { export INSTANCE=`curl http://169.254.169.254/latest/meta-data/instance-id`; aws autoscaling --region eu-west-1 set-instance-health --instance-id $INSTANCE --health-status Unhealthy; }