2012-04-17 36 views
1

我有一个webapp可以在两台不同的机器上运行。从web应用程序可以“定购”在特定时间由石英执行的工作。石英在webapp中运行。因此石英在两台机器的每一台上运行。 我正在使用JDBC数据存储来坚持作业,触发器等。在多台机器上运行在tomcat上的石英集群设置

但是,这个想法是,只有一台机器将运行作业,另一台将只使用石英来安排作业。因此,调度程序只会在其中一台机器上启动(scheduler.start())。

在本文档中,它说

切勿单独的机器上运行群集,除非它们的时钟正在使用某种形式的时间同步服务(守护进程)是很经常运行的同步(时钟必须在一秒钟内彼此的)。如果您不熟悉如何操作,请参阅http://www.boulder.nist.gov/timefreq/service/its.htm

从不启动(scheduler.start())一个非集群实例针对同一组数据库表,而任何其他实例正在运行(start()ed)。您可能会受到严重的数据损坏,并且肯定会遇到不稳定的行为。

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

我的问题是这样的:我还应该在集群模式下为此设置运行石英时,只有一个石英实例将启动并运行作业,而另一个实例仅用于调度第一个实例执行的作业。

回答

0

如果你永远不会调用第二个节点上的start()方法,那么你不需要担心时钟同步。

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

+0

如果将isClustered设置为true,它将自动打开。它确保了防止节点之间数据的并发修改。在JVM中,只有一个节点锁定在线程级完成。 – jhouse 2012-04-17 13:16:39

1

那么只需在一个节点上启动调度程序,然后在另一台机器上远程访问呢?您可以使用RMI/JMX来安排作业。或者你可以使用一个RemoteScheduler适配器。

的基本上代替具有其中一个工作,另一个是只访问共享数据库中的两个集群调度器你只有一个调度器(服务器)和从另一台机器,调度访问它,并且经由API监视作业。

+0

不错的替代建议。 – jhouse 2012-04-17 15:45:25

相关问题