在 AWS 自动扩展组上运行 crontab

在 AWS 自动扩展组上运行 crontab

我有以下设置:1 台服务器,其中装有应用程序 X,每小时运行一次 crontab。crontab 连接到数据库并运行一些繁重的计算,然后将数据导出到特殊数据文件并重新启动应用程序。导出过程可以运行 10 到 40 分钟。

我想要:

  • 将该服务器移至 AWS 并使用自动扩展组。

  • crontab 仅在一台服务器上运行,执行计算导出数据并以某种方式将其同步到所有其他实时服务器。

  • 所有服务器都应自动检测新数据并安全地重启(例如,不在同步时)。

  • 从自动缩放组启动的新服务器会在启动实际应用程序之前自动在启动时获取数据文件。

我对如何做到这一点或者任何 AWS 特定的解决方案没有一个“简单”的想法。

这是我的想法:

  • 在自动扩展组之外运行一台服务器。仅在该服务器上执行 crontab。所有数据文件都将上传到 S3。

  • 所有自动缩放服务器都会有一个每分钟运行一次的 crontab,并检查唯一文件“please_download_me_TIMESTAMP”

  • 一旦文件下载完成,脚本将重新启动服务。

  • 如果启动了新服务器,则在启动时它将自动从 S3 获取所有文件。

您认为这会有用吗?

答案1

这是 AWS EC2 中的一个常见问题,现已解决。请参阅https://gist.github.com/kixorz/5209217举一个带有实现的例子。

答案2

承认这是 2015 年的一个老问题,由 Joe 提出,所以我最好回答它。

如果工作每小时一次,需要 10 - 40 分钟,那么您无论如何都要支付整整一小时的费用。启动和关闭服务器毫无意义,只需让服务器运行即可。

如果频率较低,您可以设置一个定时事件,将消息放入 SQS 队列 - 这可以通过 t2.nano 完成,或者也许有更便宜的方法可以使用 Amazon 服务 - Lambda?根据队列大小自动缩放。当有数据需要处理时,会创建一个服务器,处理数据,将其移动到需要去的地方,然后自行关闭。

另一种方法是基于时间进行扩展,但前提是扩展频率必须低于每小时一次。

相关内容