9

据我了解,当 Amazon Auto Scaling 组缩减规模时,任何打开到已终止实例的连接都会丢失 - 没有正常终止。

我想知道其他人是如何处理这个问题的。

我的想法是连接的发起者应该处理失败,因为它应该能够处理实例失败而不是被故意终止的情况。

有什么想法吗?

谢谢,

皮特

4

4 回答 4

4

如果您使用的是负载均衡器,您可以在“实例”选项卡上打开连接耗尽选项。它允许您设置在终止实例之前等待连接关闭的时间。最大值为 3600 秒。请参阅https://aws.amazon.com/blogs/aws/elb-connection-draining-remove-instances-from-service-with-care/

于 2016-08-23T15:11:51.063 回答
1

您通常在自动扩展的实例前使用弹性负载均衡器 (ELB)。负载均衡器将停止向即将终止的实例发送请求。例如,如果您使用以下格式:

as-put-scaling-policy MyScaleDownPolicy --auto-scaling-group MyAutoScalingGroup  --adjustment=-1 --type ChangeInCapacity  --cooldown 300

您将有足够的时间让您的实例在终止之前完成对它的请求的处理。

在此处查看更多详细信息:http: //docs.amazonwebservices.com/AutoScaling/latest/DeveloperGuide/US_SetUpASLBApp.html

请注意,您应该对这些实例有一个 ELB 组。来自AWS Auto-scaling 文档

在 Auto Scaling 确定要终止哪个特定实例后,它会检查该实例是否属于 Elastic Load Balancing 组。如果是这样,Auto Scaling 会指示负载均衡器从负载均衡组中删除实例并等待删除完成。如果 Auto Scaling 确定实例不属于 Elastic Load Balancing 组,则 Auto Scaling 会尝试通过运行系统关闭脚本来终止实例。

于 2012-12-12T19:17:33.573 回答
1

我这样做的方式是使用生命周期挂钩。这可以在一定时间内中断终止过程(默认为 1 小时)。

它旨在在您的工作完成后恢复,但超时适用于 hacky 连接耗尽。

您可以选择将处于此状态的 Auto Scaling 组实例添加到 Terminating:Wait 状态。此状态允许您在这些实例终止之前访问它们。

来源:http ://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/AutoScalingGroupLifecycle.html

缺点:通过 CLI 设置,但还不错。

如何做到这一点: http ://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/adding-lifecycle-hooks.html

创建 IAM 时,您将需要此策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "autoscaling:PutLifecycleHook",
        "autoscaling:DeleteLifecycleHook",
        "autoscaling:RecordLifecycleActionHeartbeat",
        "autoscaling:CompleteLifecycleAction",
        "autoscaling:DescribeAutoscalingGroups",
        "autoscaling:DescribeLifecycleHooks",
        "autoscaling:PutInstanceInStandby",
        "autoscaling:PutInstanceInService",
        "iam:AddRoleToInstanceProfile",
        "iam:CreateInstanceProfile",
        "iam:CreateRole",
        "iam:PassRole",
        "iam:ListInstanceProfiles",
        "ec2:Describe*"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}

祝你好运!

于 2015-02-28T06:45:44.623 回答
0

EC2/AutoscalingGroups 的搜索空间没有解决方案。我不认为等待从 ELB 中删除完成意味着等待现有连接关闭。ELB 确实强制执行自己的不可配置超时,但即使假设当 ELB 报告任何打开的连接时该组将等待该超时也是乐观的。

一个可能的答案是扩展到其他 AWS 产品,例如 SQS 和 SNS。这两个可以代表大部分终止策略,因为它们也可以由 CloudWatch 警报触发。缺少的部分是工人选择、冷却时间和重置警报。

于 2013-04-30T01:23:24.610 回答