【问题标题】:Stop Sidekiq gracefully while terminating Autoscale EC2 instance在终止 Autoscale EC2 实例时优雅地停止 Sidekiq
【发布时间】:2016-03-02 09:06:03
【问题描述】:

我正面临 aws 自动缩放 + sidekiq 繁忙工作的问题。我有 4 个实例在自动缩放组中运行,并且多个 Sidekiq 进程正在这些实例上运行。所有实例都使用相同的 redis

如果我的一个实例当时正在终止,那么他忙碌队列中的作业就会进入失败状态。它应该将这些作业排入队列。

我在 /etc/rc0.d 文件夹中添加了一个脚本,该脚本将在实例终止时终止 sidekiq 进程,但我的工作仍然处于失败状态。 我尝试使用 TERM 和 USR1 信号来终止 sidkeiq 进程,但这个信号也发生了同样的事情。

我用过 sidkeiq pro 也启用了可靠的获取。

有谁知道,在手动或优雅地 killig sidekiq 进程时,如何实现繁忙队列中的作业应该进入 enqueued 而不是 faliure 状态?

【问题讨论】:

    标签: ruby-on-rails-4 amazon-web-services sidekiq autoscaling


    【解决方案1】:

    我自己也遇到了同样的问题,不得不通过将它完全引入守护进程管理来修复它,在我的例子中是 chkconfig。我不确定您的 EC2 设置是什么样的,但我发现只有 chkconfig 知道的脚本正在执行。

    如果您还没有,您可能还需要在脚本中添加睡眠,以确保 Sidekiq 有足够的时间完全退出。

    【讨论】:

    • 请发布一个示例脚本以及您如何使用 chkconfig 深入了解守护进程管理。我正在使用弹性 beanstalk 和 sidekiq,但别担心,你的脚本和守护进程 plumbig 只会作为我的指南。谢谢
    • 我不允许共享代码,但我写的基本结构是Sidekiq启动时服务启动,然后在检测到主机系统关闭时执行Sidekiq的优雅关闭,重新启动等。
    • 如果您的系统使用 chkconfig 或类似的东西,您需要在 /etc/init.d/ 中创建脚本。您可以在此处阅读如何编写脚本:link
    • 在“开始”中,我最终只是为服务创建了锁定文件。
    • 如果 Sidekiq 存在 pid 文件,则在“停止”中,我的代码将执行 kill -TERM [pid]。如果成功,它会删除 pid 文件并暂停 10 秒以允许任何仍在运行的工作人员完成或被推回队列。
    猜你喜欢
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 2018-09-27
    相关资源
    最近更新 更多