【发布时间】:2014-02-16 00:58:00
【问题描述】:
场景
我正在创建一个脚本,它将在 AutoScaling 组中启动新实例,然后删除旧实例。目的是将新创建(或更新)的 AMI 引入 AutoScaling 组。这是通过将Desired 容量增加一倍当前实例数来实现的。然后,在新实例为Running 之后,将Desired 容量减少相同的数量。
问题
当我运行脚本时,我看到组容量增加了一倍,新实例上线,它们达到Running 状态,然后组容量减少。奇迹般有效。问题是有时因减少而终止的实例实际上是新实例而不是旧实例。
问题
如何确保 AutoScaling 组始终终止最旧的实例?
设置
- AutoScaling 组具有以下
Termination Polices:OldestInstance、OldestLaunchConfiguration。Default政策已被移除。 -
Default Cooldown设置为 0 秒。 - 集团只有一个可用区。
疑难解答
- 我使用了
Cooldown设置。最后只是把它放在 0 上。 - 我等待了不同的时间长度,以查看现有服务器是否需要运行一定时间才能终止。似乎如果它们不到 5 分钟,它们就不太可能被终止,但并非总是如此。我有 20 分钟前没有终止的服务器,而不是新的服务器。也许新启动的实例有一些终止保护宽限期?
让步
我知道在大多数情况下,我要替换的服务器已经运行了很长时间。在生产中,这可能不是问题。尽管如此,在 AutoScaling 的正常过程中,旧服务器可能会继续运行,而不是新服务器。这不是可接受的操作方式。
我可以强制终止特定实例,但这会违背OldestInstance 终止政策的要点。
更新:2014 年 2 月 12 日 我继续在生产中看到这一点。已运行数周且具有较旧启动配置的实例将继续运行,而较新的实例将被终止。在这一点上,我认为这是一个错误。几年前为这个话题打开了thread at Amazon,显然没有解决方案。
更新:2014 年 2 月 21 日 我一直在与 AWS 支持人员合作,此时他们已经初步确认这可能是一个错误。他们正在研究这个问题。
【问题讨论】:
-
到底是什么问题?
标签: amazon-web-services autoscaling