停止 Redis 后如何继续执行 celery 队列,然后再启动它?
Posted
技术标签:
【中文标题】停止 Redis 后如何继续执行 celery 队列,然后再启动它?【英文标题】:How to continue executing celery queue after stopping Redis and then starting it later? 【发布时间】:2020-08-26 16:26:14 【问题描述】:我正在运行一个 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
当整个基础架构再次备份时,它应该从中断的地方继续。也就是说,如果队列中有任何任务,它应该继续执行它们。
我该怎么做呢?有没有办法保存队列并稍后继续?
【问题讨论】:
查看这个答案***.com/a/56978911/6340775 【参考方案1】:有没有办法保存队列并稍后继续?
是的。您的所有任务都保存在 Redis 中。如果您可以保持其运行,或导出/导入其数据,您将不会丢失任何任务。
如此广泛的 2 个选项。
选项 1:
-
停止 Django 网络服务
停止芹菜
使用 RDB 将 redis 数据导出到快照
关闭 Redis 守护进程
在服务器中进行一些更改或移动到另一台机器
启动 Redis 守护进程
从快照中导入 redis 数据
开始芹菜
启动 Django 网络服务
更多关于 RDB:https://redis.io/topics/persistence
选项 2:
-
停止 Django 网络服务
停止芹菜
在服务器中进行一些更改或移动到另一台机器
开始芹菜
启动 Django 网络服务
一直保持 redis 运行。
【讨论】:
“导出 redis 数据”是指转储 .rdb 文件的 redis SAVE 或 BGSAVE 之类的东西吧? RDB 看起来是一个更好的选择:redis.io/topics/persistence,我已据此更新了我的答案 谢谢。如果可行,我会尝试并将其标记为“已回答”。干杯!以上是关于停止 Redis 后如何继续执行 celery 队列,然后再启动它?的主要内容,如果未能解决你的问题,请参考以下文章