首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高可用性Cron乔布斯

高可用性Cron乔布斯
EN

Server Fault用户
提问于 2017-07-28 19:50:32
回答 3查看 6.8K关注 0票数 9

信息

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

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

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

Research

考虑到解决方案3将如何帮助我们维护高可用性环境,这是首选的方法。不幸的是,我们对其中一些解决方案并不十分熟悉,因此,我寻求你们的专门知识,帮助我们找到适合我们需要的解决办法。我们对Linux机器并不十分熟悉(除了NGINX服务器之外,整个环境都是Windows ),而且我们对如何使用这些机器知之甚少(尽管到目前为止我们还能搞清楚这一点)。

Options

  1. 德克伦
    • 这个解决方案似乎提供了简单的设置,似乎是一个不错的产品。

  2. 史考斯
    • 这使用多个其他实用程序来操作,包括一个实际的数据库(并不理想,但可以工作)

  3. 龙门甲板
    • 似乎提供了许多功能和潜在的最好的产品

  4. 雷克伦
    • 我对此不太了解,只知道它是基于Golang的。

  5. 自定义脚本:如何使cronjobs高可用性?
    • 这是一种“如果其他一切都失败了”的方法--如果没有别的办法.

  6. -如果你找到一些,请提供其他选项,我将把它们包括在这里。

问题

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

Notes

在这方面的任何帮助都是非常感谢的。

我意识到这个问题已经被在此之前问到了,尽管它看起来已经过时了(2011年),并且已经创建了许多新的解决方案。

EN

回答 3

Server Fault用户

发布于 2019-03-15 15:42:50

RHEL/CentOS 7上的crond包括集群支持。它实际上是cronie,一个古老的vixie-cron的叉子。下面是手册页的详细信息:

在这个版本的Cron中,集群支持可以跨主机集群使用网络挂载的shared /var/spool/cron,并指定在任何时候只有一个主机应该在这个目录中运行crontab作业。这是通过使用-c选项启动Cron来完成的,并且/var/spool/cron/.cron.hostname文件只包含一行,它表示集群中哪个主机应该运行作业的主机名。如果这个文件不存在,或者它中的主机名与gethostname(2)返回的主机名不匹配,那么这个目录中的所有crontab文件都会被忽略。这对/etc/crontab文件中指定的cron作业或/etc/cron.d目录中的文件没有影响。这些文件总是被运行,并被认为是主机特定的.与其直接编辑/var/spool/cron/.cron.hostname,不如使用crontab(1)的-n选项来指定主机。您应该确保集群中的所有主机以及它们从其中挂载共享crontab目录的文件服务器都密切同步时钟,例如使用ntpd(8),否则结果将非常不可预测。

在实践中,这一做法要求:

  • 所有集群系统安装在/var/spool/cron上的共享文件系统;
  • crond标志开始-c的所有集群系统(将CRONDARGS=-c放在/etc/sysconfig/crond中);
  • 某种类型的触发器使得,当负责cron作业的系统失败时,另一个系统将执行crontab -n来接管。

请记住警告:此解决方案仅在/var/spool/cron中集群cron作业(即,使用crontab -e设置)。每个节点仍将在/etc/crontab或/etc/cron.d中运行各自的作业。

票数 4
EN

Server Fault用户

发布于 2017-07-29 08:02:12

为什么不选择(2),但它在执行时创建了一个标志。cron作业将在所有机器上启动,局部时间变化很小,这意味着其中一台机器首先创建标志;其他机器则看到设置并退出标志,而第一台机器运行完成。

您将需要注意标记设置/检查的原子性(NFS在这里也是一个选项,其中包含一个锁文件),尽管为了将其保持在最小值,其中之一可能也有一些值。

  • 在每个cron任务的开始时,随机放置一个小的睡眠来播放它们,或者
  • 在服务器之间更改任何给定作业的启动时间至少1分钟,即服务器1在7:02开始作业,服务器2在7:03开始作业;通常服务器1将完成整个任务,但是如果它关闭,服务器2在7:03开始时将不会看到标志。
票数 3
EN

Server Fault用户

发布于 2017-07-28 20:55:08

我使用詹金斯来管理大约140个预定脚本。

Jenkins并不是作为cron的替代品而成为服务器的,它是用于持续集成的,但是您可以与他一起管理几乎所有的东西。

以下是一些成功的人(就像我一样)把工作从cron转移到Jenkins

这里是Jenkins和cron的一个很好的比较

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/865741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档