如何在停止 Redis 后再启动后继续执行 celery queue?

How to continue executing celery queue after stopping Redis and then starting it later?

我是 运行 一个 Django 应用程序,它使用 Celery 运行异步任务并使用 Redis 服务器作为工作者。

我需要能够在不中断任务执行的情况下停止整个基础架构并将其恢复。 所以我需要这样做:

1) Stop the Django webservice
2) Stop celery
3) Shut down Redis daemon
4) Make a few changes in the server or move to a different machine
5) Start Redis daemon
6) Start Celery
7) Start the Django webservice

当整个基础架构再次备份时,它应该从中断处继续。即如果队列中有任何任务,它应该继续执行它们。

我该怎么做?有没有办法保存队列稍后继续?

Is there a way to save the queue and continue later?

是的。您的所有任务都保存在 Redis 中。如果您可以保留它 运行 或 export/import 它的数据,您将不会丢失任何任务。

大致有 2 个选项。

选项 1:

  1. 停止 Django 网络服务
  2. 停止芹菜
  3. 使用RDB导出redis数据到快照
  4. 关闭 Redis 守护进程
  5. 在服务器中进行一些更改或移动到不同的机器
  6. 启动 Redis 守护进程
  7. 从快照导入redis数据
  8. 启动芹菜
  9. 启动 Django 网络服务

关于 RDB 的更多信息:https://redis.io/topics/persistence

选项 2:

  1. 停止 Django 网络服务
  2. 停止芹菜
  3. 在服务器中进行一些更改或移动到不同的机器
  4. 启动芹菜
  5. 启动 Django 网络服务

一直保持redis 运行。