亚马逊ECS上的芹菜节拍

时间:2018-01-17 13:52:18

标签: amazon-web-services celery amazon-ecs celerybeat

我正在使用Amazon Web Services ECS(弹性容器服务)。 我的任务定义包含Application + Redis + Celery,这些容器在任务定义中定义。设置了自动缩放,因此目前有三个具有相同镜像基础结构的实例。但是,对于计划任务需要Celery Beat实例,因此Celery Beat将是一个很好的工具,因为Celery已经在我的基础架构中。

但问题是:如果我将Celery Beat容器与其他容器一起添加(将其添加到任务定义中),它将被镜像,并且多个实例将在同一时刻执行相同的计划任务。什么是这个基础设施问题的解决方案?我应该创建一个单独的服务吗?

2 个答案:

答案 0 :(得分:3)

我们使用single-beat来解决这个问题,它就像一个魅力:

  

单拍是一个很好的小应用程序,只能确保一个   您的流程实例在您的服务器上运行。

     

如celerybeat(或某种日常邮件发件人,孤儿文件   清洁等...)只需要在一台服务器上运行,但如果是这样的话   服务器停机,好吧,你去另一台服务器等启动它。

您仍应将服务所需的任务数设置为1.

答案 1 :(得分:2)

您可以使用ECS任务放置策略来放置Celery Beat任务并选择“每个主机一个任务”。确保选择Desire state为“1”。通过这种方式,您的芹菜节拍任务将仅在您的群集中的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

如果您发现任何问题,请与我联系。