MySQL多服务器任务回退机制

时间:2010-10-20 14:55:17

标签: php mysql synchronization cron

我有两台网络服务器。服务器'A'和服务器'B'。两者都是另一个的完全重复,并且连接到负载平衡器以供服务客户端。

我有一个每天每小时执行的任务(cronjob)。此任务当前仅在服务器“A”上运行。问题是这个任务非常重要,如果服务器'A'由于某种原因崩溃,任务将不再运行。

我希望服务器'B'执行任务,但前提是服务器'A'没有。 这两个任务都是与MySQL数据库交互的PHP脚本。

我正在考虑在表中使用某些行(使用MySQL锁?)作为服务器'B'的标志,如果服务器'A'没有这样做,则开始他的任务,反之亦然。

请注意,两台服务器上的任务文件必须完全相同。

谢谢。

1 个答案:

答案 0 :(得分:2)

您提出的解决方案是我经常用于简单任务的解决方案,通常用于:

  • cronjob同时在两台服务器上启动
  • 都会获得不同的令牌(通常基于server-id和process-id)
  • 双方都试图在UPDATE jobs SET process = '$token' WHERE process IS NULL的表格中声明一份工作(+其他一些条款目前还没有达到目的)。
  • 同时检查获胜/声明的流程:SELECT * FROM jobs WHERE process = '$token'
  • 只有'胜利者'执行这项工作,失败者/失业者才能退出。

要注意的是,只要MySQL实例启动,这只适用于作业:没有它就不能进行处理。然后,可以在两台服务器上执行检查MySQL服务器是否处于活动状态的cronjob,我不介意为这样一场重大灾难获得2条警报:)