在不暂停服务的情况下将新代码部署到生产芹菜集群的可靠方法

Bac*_*con 7 python django celery

我有几个芹菜节点在使用rabbitmq生产中运行,我一直在处理服务中断的部署.我必须取下整个网站,以便将新代码部署到芹菜中.我将每个子项的最大任务设置为1,所以理论上,如果我对现有任务进行更改,它们应该在下次运行时生效,但是注册新任务呢?我知道重新启动守护进程不会杀死正在运行的工作程序,而是让它们自己死掉,但它仍然看起来很危险.这个问题有优雅的解决方案吗?

ale*_*otc 4

这里具有挑战性的部分似乎是确定哪些 celery 任务是新的还是旧的。我建议在rabbitmq中创建另一个虚拟主机并执行以下步骤:

  1. 使用新代码更新 django Web 服务器并重新配置以指向新的虚拟主机。
  2. 当任务在新虚拟主机中排队时,等待 celery 完成旧虚拟主机中的任务。
  3. 当工作人员完成后,将代码和配置更新到新的虚拟主机

我实际上没有尝试过这个,但我不明白为什么这不起作用。一个烦人的方面是每次部署时都必须在虚拟主机之间交替。