我在负载均衡器后面有两个活动的服务器。假设负载均衡器是A,节点是A1和A2。
现在,A1和A2有了quartz调度器,A1和A2有了spring batch job实例。
假设在下午1:00,一个作业应该被踢开,并在A1或A2上运行。
但有时发生的情况是,A1和A2都启动了作业,但不知何故,它们运行了两次。它可以在不同的节点上运行,也可以在同一个节点上运行。
问题是,在这两个级别,quartz以某种方式踢开了同一作业的两个实例,而spring batch也以某种方式运行了这两个实例。
欢迎任何关于解决问题的建议或来自行业的最佳实践。
发布于 2016-03-19 23:21:22
您只需检查服务器A1和A2的时钟。
正如在Quartz guide中明确指出的,
从不在单独的机器上运行集群,除非它们的时钟是使用某种形式的时间同步服务(守护进程)进行同步的,该服务非常定期地运行(时钟之间必须在一秒之内)。如果您不熟悉如何执行此操作,请参阅http://www.boulder.nist.gov/timefreq/service/its.htm。
无论如何,在不同的机器上运行多个实例是一件有风险的事情。在并行运行A1的情况下,最好使用A2作为它的故障转移集群。
https://stackoverflow.com/questions/36090849
复制相似问题