我们有一个自动标度组,它生成工作服务器。每个工作服务器运行芹菜进程。我们使用cloudwatch监视芹菜队列长度,根据队列长度,我们生成/杀死自动缩放服务器。你在这个答案中看到的是我们是如何做到的:是否有一种方法可以使用芹菜使用的RabbitMQ队列长度来启动自动规模组中的实例?
我们的终止策略是先杀死最老的服务器。当队列长度连续300秒为零时,就会发生这种情况。
正常设置有3台始终可用的服务器。只有当队列长度超过某个数目时,自动标度组才会进入。假设有10个作业在队列中持续30秒。
我还没有在我的芹菜配置中设置任何路由或优先级。
这就是问题所在。当规模缩小时,我不完全确定被杀害的宿主是否是免费的,因为所有的工人都受到平等对待。任务有时需要5-10分钟,如果服务器处于执行任务的过程中,我不希望服务器被杀死。
到目前为止,我还没有遇到任何问题。但我担心我们的一些客户会因此而面临一个问题。
发布于 2019-01-28 21:44:13
当实例处于“终止:等待”状态时,可以使用生命周期事件执行自定义操作。

按照此页上的步骤创建一个生命周期挂钩,如下所示。在这种状态下,脚本或Lambda可以将实例保持为打开状态,直到完成所有作业为止。我链接到的页面有关于冷却时间的其他信息。
自动缩放组通过启动实例来响应扩展事件,并通过终止实例来扩展事件。生命周期钩子将实例置于等待状态(挂起:等待或终止:等待)。实例将暂停,直到您继续或超时期间结束。您可以使用以下一个或多个选项执行自定义操作:定义一个CloudWatch事件目标,以便在发生生命周期操作时调用Lambda函数。当Amazon自动缩放向EC2事件提交生命周期操作的事件时,将调用Lambda函数。该事件包含有关正在启动或终止的实例的信息,以及可用于控制生命周期操作的令牌。为生命周期挂钩定义通知目标。亚马逊EC2自动缩放会向通知目标发送消息。该消息包含有关正在启动或终止的实例的信息,以及可用于控制生命周期操作的令牌。创建在实例启动时在实例上运行的脚本。脚本可以使用运行它的实例的ID来控制生命周期操作。默认情况下,实例处于等待状态一个小时,然后自动缩放组继续启动或终止进程(待定:继续或终止:继续)。如果需要更多的时间,可以通过记录心跳来重新启动超时时间。如果在超时期间结束之前完成,则可以完成生命周期操作,该操作将继续启动或终止过程。
https://serverfault.com/questions/951118
复制相似问题