实例连续未通过健康检查的次数至少达到“不健康阈值”

实例连续未通过健康检查的次数至少达到“不健康阈值”

我正在尝试自动扩展我当前的实例,我现在正在运行一个中型实例,并使用小型实例进行自动扩展。我使用命令行工具来配置设置,这是我用于扩展的配置,除了常规实例外,我还运行至少一个实例,这意味着还有一个实例,并且我已将其连接到负载平衡器。

s-create-auto-scaling-group 组名 --launch-configuration launchconfig --availability-zones ap-southeast-1a --min-size 1 --max-size 5 --load-balancers prod

但是当我检查负载均衡器时,它显示“停止服务”原因“实例连续未通过健康检查,次数至少达到不健康阈值”。我该如何解决这个问题呢?使用其公共 DNS,我无法从实例获得任何响应,也无法通过 ssh 连接到它,因为键值对未附加到新创建的实例。

有什么问题?我该如何解决这个问题?

请帮帮我,这有点紧急,因为我已经在这个问题上困扰了将近两天。

as-describe-launch-configs --show-long --headers



testLC,ami-e8c4bdba,t1.micro,(nil),(nil),(nil),(nil),default,2012-02-03T07:14:54.461Z,true,arn:aws:autoscaling:ap-southeast-1:346266270015:launchConfiguration:175a16db-1f6a-4514-9233-ac7cb34bca90:launchConfigurationName/testLC

as-describe-auto-scaling-groups --show-long --headers

testASG,testLC,ap-southeast-1a,2012-02-03T07:19:10.706Z,prod,EC2,1,5,1,300,0,(nil),(nil),arn:aws:autoscaling:ap-southeast-1:346266270015:autoScalingGroup:c4b584d0-bac4-4507-b972-4fc2b1bc53ac:autoScalingGroupName/testASG,(nil)

as-describe-auto-scaling-instances
i-43796716  testASG  ap-southeast-1a  InService  HEALTHY  testLC

elb-describe-lbs --headers --show-long

prod,prod-11719395.ap-southeast-1.elb.amazonaws.com,prod-11719395.ap-southeast-1.elb.amazonaws.com,Z1WI8VXHPB1R38,"{interval=120,target=HTTP:80/user/sign_in/,timeout=30,healthy-threshold=5,unhealthy-threshold=3}",ap-southeast-1a,(nil),(nil),"i-495dda1c, i-43796716","{protocol=HTTP,lb-port=80,instance-protocol=HTTP,instance-port=80,policies=AWSConsolePolicy-1}",(nil),"{policy-name=AWSConsolePolicy-1,expiration-period=180}","{owner-alias=amazon-elb,group-name=amazon-elb-sg}",(nil),2012-02-01T10:36:08.810Z

elb-describe-instance-health loadbalancername --headers --show-long

INSTANCE_ID,i-495dda1c,InService,N/A,N/A
INSTANCE_ID,i-43796716,OutOfService,Instance has failed at least the UnhealthyThreshold number of health checks consecutively.,Instance

答案1

这里有许多需要考虑的事项。首先,解决最受限制的问题——缺乏 SSH 访问权限。

由于您之前的启动配置未指定密钥对,因此您将没有有效的凭据来访问实例。遗憾的是,启动实例后无法添加初始密钥对。

为了解决这个问题,您必须创建一个新的启动配置,除了之前传递的所有参数之外,还要传递--key和参数。采用您要使用的密钥对的名称,而采用安全组名称(如果不在 VPC 中)或 ID。--group--key--group

如果您无法访问实例,控制台日志可以帮助您验证实例是否确实已成功启动。一个常见问题是由于缺少卷而导致启动失败(尤其是在启动较小的实例类型时尝试挂载仅存在于较大实例类型上的临时卷)。

需要注意的一点是,如果您更改正在运行的实例,AMI 不会更新。您必须明确创建新映像。因此,如果您尝试使用当前在自定义实例上使用的相同 AMI 启动新实例,则很有可能您只是启动了默认 AMI 之一,而不是带有自定义项的 AMI。

用于ec2-describe-images确定您的映像的块设备映射 - 以及卷所基于的快照 - 这将验证您将安装内置有您的自定义的 EBS 卷。

如果您没有用于自动扩展的最新 AMI:

  • 创建 EBS 卷的快照
  • 使用以下方式创建 AMIec2-register -n IMAGE_NAME -s SNAPSHOT_ID
    • 如果您需要附加其他 EBS 卷,请通过添加--block-device-mapping( -b) 参数来指定这些卷(例如-b /dev/xvdf=SNAP_ID
  • 使用以下命令验证块设备映射是否正确:ec2-describe-images

拥有最新的 AMI 后,您需要创建一个使用此 AMI 的新启动配置。如果需要,您可以将其他块设备映射传递给命令。使用as-create-launch-config,向其传递您的新 AMI 和您之前使用的所有参数。

最后,您必须更新自动缩放组。此组与特定启动配置相关联 - 新的启动配置不会被自动检测到,并且不会对自动缩放组产生任何影响,除非您明确关联它。用于as-update-auto-scaling-group GROUP_NAME --launch-configuration CONFIG_NAME进行此更改。

一旦完成更改,您就可以使用 as-execute-policy 命令模拟自动扩展事件。

请记住给您的实例几分钟时间来启动 - 如果您的 ELB 显示实例不健康,您可能需要增加--grace-period自动缩放组。

相关内容