我正在运行一个Django应用程序,该应用程序使用Celery运行异步任务,并使用Redis服务器作为worker。
我需要能够停止整个基础结构并将其恢复,而不会导致任务执行中断。 所以我需要这样做:
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
当整个基础架构再次备份时,它应该从中断的地方继续,即如果队列中有任何任务,它应该继续执行它们。
我该怎么做?有没有办法保存队列并稍后继续?
有没有办法保存队列并稍后继续?
是的。您的所有任务都保存在 Redis 中。如果您可以保持其运行或导出/导入其数据,则不会丢失任何任务。
如此广泛的 2 个选项。
选项 1:
- 停止 Django 网络服务
- 停止芹菜
- 使用 RDB 将 redis 数据导出到快照
- 关闭 Redis 守护进程
- 在服务器中进行一些更改或移动到其他计算机
- 启动 Redis 守护进程
- 从快照导入 Redis 数据
- 开始芹菜
- 启动 Django Web 服务
有关 RDB 的更多信息:https://redis.io/topics/persistence
选项 2:
- 停止 Django 网络服务
- 停止芹菜
- 在服务器中进行一些更改或移动到其他计算机
- 开始芹菜
- 启动 Django Web 服务
同时保持 redis 运行。