人们如何通过亚马逊自动缩放组缩减来处理连接丢失?

时间:2012-12-11 22:53:40

标签: amazon-web-services

据我了解,当亚马逊自动缩放组缩减时,任何打开终止实例的连接都会丢失 - 没有优雅的终止。

我想知道其他人是如何处理的。

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

有什么想法吗?

谢谢,

皮特

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

您通常在自动缩放的实例前使用Elastic Load Balancer(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 docs

  

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

答案 2 :(得分:1)

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

它被设计为在您的工作完成后恢复,但超时工作会导致连接耗尽。

  

您可以选择向Auto Scaling组添加挂钩   处于此状态的实例进入Terminating:Wait状态。这个状态   允许您在终止之前访问这些实例。

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

con:通过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": "*"
    }
  ]
}
祝你好运!

答案 3 :(得分:0)

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

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