高可用性Cron Jobs

信息

目前我们正在为运行PHP的NGINX(在Centos 7上)创build一个高可用性集群 。 大多数的configuration已经被映射,并且它应该在集群环境中很好地工作。

不幸的是,我们唯一无法解决的问题就是cron作业 (cron作业将执行PHP代码)。 就我所知,cron作业是在每个主机上单独执行的。 这意味着我们要么:

  1. 没有一个完整的高可用性环境,在单个服务器发生故障时,另一个服务器接pipe,一切仍然像以前一样工作(虽然速度较慢)
  2. 我们运行每个cron作业并将结果保存到数据库中,以确定它是否已经运行。 这不是一个可行的解决scheme,因为我们的某些cron工作可能需要几个小时才能运行 – 而这些工作需要在下一个工作日之前完成。
  3. 我们发现某种解决scheme可以实现高可用性的cron作业。

研究

看到解决scheme3将如何帮助我们维护高可用性环境,这是首选的方法。 不幸的是,我们对这些解决scheme并不是非常熟悉,所以我会寻求您的专业知识,帮助我们find适合我们需求的解决scheme。 我们对Linux机器并不是很熟悉(除了NGINX服务器外,整个环境是Windows),对这些机器的使用知之甚less(尽pipe我们已经能够弄清楚了)。

选项

  1. Dkron
    • 这个解决scheme似乎提供了简单的设置,似乎是一个体面的产品
  2. 克罗诺斯
    • 这使用多个其他实用程序来操作,包括一个实际的数据库(不理想,但可以工作)
  3. Rundeck
    • 似乎提供了很多的function,可能是这个清单上最好的产品
  4. Rcron
    • 除了它是Golang的基础之外,我不太了解这个。
  5. 自定义脚本: 如何使cronjobs高可用?
    • 这是一个“如果一切都失败”的方法,如果没有别的作品…
  6. 其他选项? – 请提供其他选项,如果你find一些,我会在这里包括他们

问题

  1. 对于不同的选项,您有哪些专家意见或build议?
  2. 你有什么经验使用不同的选项(利弊)?
  3. 您认为我们将使用哪些选项与我们的基础设施? (如果需要有关我们基础设施的更多信息,请告诉我)

笔记

任何帮助,这是非常感谢。

我意识到这个问题之前已经被问过了 ,虽然看起来很过时(2011),而且很多新的解决scheme已经被创build。

为什么不select你的选项(2),但它在执行时会创build一个标志。 cron作业将在所有机器上启动,略有本地时间变化,意味着其中一个首先创build标志; 其他人则看到国旗已经设定好,然后第一批就完成了。

你需要注意标志设置/检查的primefaces性(NFS也是一个选项,带有一个locking文件),尽pipe为了保持这个最小值,也可能有一些值

  • 在每个cron作业的开始处放一点随机的睡眠来展示他们一点,或者
  • 服务器1在7:02开始工作,服务器2在7:03开始工作,在任何给定工作的开始时间改变至less1分钟。 通常服务器1将完成整个工作,但是如果服务器1停止工作,服务器2将在7:03开始时看不到标志。

我使用jenkinspipe理大约140个预定脚本。

jenkins并没有把服务器作为cron的替代品,而是用于持续集成,但是你可以用他来pipe理几乎所有的东西。

这里有一些成功的人(就像我一样)将工作从克朗搬到jenkins

Jenkins和cron之间有一个很好的对比