1

我有一个 webapp,它将在 2 台不同的机器上运行。从 webapp 可以“订购”石英在特定时间执行的作业。石英在 webapp 内运行。因此,石英在两台机器上运行。我正在使用 JDBC 数据存储来持久化作业、触发器等。

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

在文档中它说

永远不要在单独的机器上运行集群,除非它们的时钟使用某种形式的时间同步服务(守护程序)进行同步,这种服务非常有规律地运行(时钟必须在一秒内)。如果您不熟悉如何执行此操作,请参阅http://www.boulder.nist.gov/timefreq/service/its.htm 。

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

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

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

4

2 回答 2

1

仅在一个节点上启动调度程序并在另一台机器上远程访问它呢?您可以使用 RMI/JMX 安排作业。或者,您可以使用RemoteScheduler适配器。

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

于 2012-04-17T12:55:50.660 回答
0

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

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

于 2012-04-17T12:43:51.913 回答