smu*_*tic 4 amazon-web-services amazon-ecs celery celerybeat
我正在使用 Amazon Web Services ECS(弹性容器服务)。我的任务定义包含 Application + Redis + Celery,这些容器在任务定义中定义。设置了自动扩展,因此目前有三个具有相同镜像基础架构的实例。然而,计划任务需要一个 Celery Beat 实例,所以 Celery Beat 将是一个很好的工具,因为 Celery 已经在我的基础设施中。
但问题是:如果我将 Celery Beat 容器与其他容器一起添加(将其添加到任务定义中),它将被镜像,多个实例将同时执行相同的计划任务。这个基础设施问题的解决方案是什么?我应该创建一个单独的服务吗?
您可以使用 ECS 任务放置策略来放置您的 Celery Beat 任务并选择“每个主机一个任务”。确保将 Desire state 选择为“1”。这样,您的 celery beat 任务将仅在集群中的 1 个容器中运行。
参考:https : //docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_run_task.html
所需的任务是您要在集群中运行的任务数。您可以在配置服务时或在运行任务部分设置“任务数”。您可以参考以下链接作为参考。
配置服务:
参考:https : //docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service.html
运行任务:
参考:https : //docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_run_task.html
如果您发现任何问题,请告诉我。
我们用它single-beat来解决这个问题,它的作用就像一个魅力:
Single-beat 是一个很好的小应用程序,它确保您的进程只有一个实例在您的服务器上运行。
例如 celerybeat (或某种每日邮件发送器、孤立文件清理器等)只需要在一台服务器上运行,但如果该服务器出现故障,那么您可以在另一台服务器上启动它,等等。
您仍应将服务所需的任务数设置为 1。
| 归档时间: |
|
| 查看次数: |
1774 次 |
| 最近记录: |