AWS上的高可用性定期任务(cron)

时间:2014-01-03 12:07:51

标签: amazon-web-services amazon-ec2 cron

在AWS上设置高可用性(多个可用区)周期性任务(可能是使用Cron触发)的推荐方式/模式是什么?

我希望在多个可用区中的多个EC2实例上安装该软件,但一次只能在一个实例上运行该任务。哪个实例无关紧要。

在迁移到AWS之前,我们曾经在MySQL实例中使用数据库锁定 - 只有成功创建锁的实例才会运行。

但是在AWS上必须有更好的方法吗?特别是如果不需要数据库。

谢谢!

缺口。

4 个答案:

答案 0 :(得分:0)

向我建议的一个建议解决方案是使用Auto Scaling组,最大和最小实例数设置为1.这意味着如果可用区域脱机,ASG将导致新实例另一个区域即将启动。

Architecting on AWS培训课程简要介绍了这项技术,但我不知道它有多可靠。

答案 1 :(得分:0)

亚马逊刚刚发布了针对您的问题的解决方案:Beanstalk工作层定期任务:

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features-managing-env-tiers.html#worker-periodictasks

它基本上依赖于一个yaml文件,列出了调用所需API的cron schedule:

  

要调用定期任务,应用程序源包必须在根级别包含cron.yaml文件。该文件必须包含有关要安排的定期任务的信息。使用标准crontab语法指定此信息。

答案 2 :(得分:0)

自从我第一次提出这个问题以来,现在可以使用CloudWatch Events来安排定期事件。活动可以是:

  • 固定费率 N 分钟/小时/天
  • Cron表达

目标可以是:

  • AWS Lambda函数
  • 发布到SNS主题
  • 写入SQS队列
  • 写入Kinesis流
  • 对EC2 / EBS实例执行操作

然后,可以使用SQS通知多个可用区域中的一组计算机中的单个实例来执行操作。

此处有更多信息: https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/ScheduledEvents.html

虽然它不包含可用区出现故障时所发生情况的弹性/可用性声明。

答案 3 :(得分:-1)

这实际上取决于您的要求。

您可以将任务发布到SQS队列,并让您​​的实例(可能是跨不同区域的自动扩展组)轮询该队列。 SQS'至少(通常只有)一次语义可能会成为问题,如果对您来说任务只执行一次至关重要。如果是这种情况,您可以轻松使用DynamoDB表和conditional writes。或者,如果您更多地使用完整的容错解决方案,则可以尝试airbnb chronos