首页 文章

在多台机器上的tomcat中运行时的Quartz集群设置

提问于
浏览
1

我有一个webapp,它将在2台不同的机器上运行 . 从webapp可以“按顺序”在石英的特定时间执行作业 . quartz在webapp中运行 . 因此石英在两台机器中的每一台上运行 . 我正在使用JDBC数据存储来保留作业,触发器等 .

但是,我们的想法是,只有一台机器可以运行作业,而另一台机器只使用石英来安排作业 . 因此,只能在其中一台机器上启动调度程序(scheduler.start()) .

在文档中说

永远不要在不同的机器上运行群集,除非它们的时钟使用某种形式的时间同步服务(守护进程)进行同步,这些服务定期运行(时钟必须在彼此的秒内) . 如果您不熟悉如何执行此操作,请访问http://www.boulder.nist.gov/timefreq/service/its.htm . 永远不要针对与任何其他实例正在运行(start()ed)的同一组数据库表启动(scheduler.start())非群集实例 . 您可能会遇到严重的数据损坏,并且肯定会遇到不稳定的行为 .

而且我不确定运行我的webapp的两台机器的时钟是否同步 .

我的问题是:当我只启动一个石英实例并运行作业时,我仍然应该在集群模式下运行石英,而另一个实例仅用于调度第一个实例执行的作业 .

2 回答

  • 0

    如果您永远不会在第二个节点上调用start()方法,那么您不必担心时钟同步 .

    但是,您需要将isClustered config prop设置为true,以确保在两个节点插入/更新/删除数据时使用基于表的锁定 .

  • 1

    如何只在一个节点上启动调度程序并在另一台机器上远程访问它?您可以使用RMI / JMX计划作业 . 或者您可以使用RemoteScheduler适配器 .

    基本上没有两个集群调度程序,其中一个正在工作而另一个只访问共享数据库,您只有一个调度程序(服务器),您可以从另一台计算机访问它,通过API调度和监视作业 .

相关问题