Celery 如何让一个 worker 运行 只有当其他 worker 坏了?

Celery How to make a worker run only when other workers are broken?

我有两台服务器,每台服务器上有一个celery worker。我使用 Redis 作为代理与工人协作。

我的问题是如何才能让大部分时间只做一个worker运行,而一旦这个worker坏掉了,另一个worker会开启作为backup worker?

基本上带一个工人做后备就可以了

我知道如何通过worker上的队列分别指定一个任务给某个worker,看了文档[http://docs.celeryproject.org/en/latest/userguide/routing.html#redis-message-priorities]

以我的拙见,这完全违背了让分布式系统处理 off-load CPU 繁重任务或 long-running 任务,或者有成千上万的小任务的观点不能 运行 别处...

- 无论如何,您正在 运行 连接两台服务器,为什么要让另一台闲置?更多的工作人员意味着您将能够同时处理更多的任务。

如果您不服气,并且仍然想这样做,您需要在有空闲 Celery worker 的机器上编写一个微型服务。该服务将定期检查活动工作人员的健康状况,如果检查失败,您将 运行 备份服务器上的 Celery 工作人员。

这里有一个问题要问您 - 为什么此服务根本不重启活动服务器上的 Celery worker? - 这样做是很有可能的,所以我再次认为没有理由让一台完全闲置的机器什么都不做。如果你在云平台上,你可以很容易地从你的 Celery worker 的现有图像中启动一个新实例。这是我在生产中使用的场景。