我有一个低 CPU 队列处理任务,需要保持运行很长一段时间。如果任务失败,我希望该任务在高可用性集群环境中运行,并且如果第一台机器发生故障,该任务应该“切换”到另一台机器。确保任务一次在集群中的一台机器上运行并在机器故障时实现无缝故障转移的最佳方法是什么?
现在,我打算使用 JGroups来实现这个功能。我将为每项任务保留一个 channel ,只有 channel 负责人会执行任务,而其他成员“跟随”。然后,如果 channel 领导者发生变化,新的 channel 领导者将从上一个 channel 领导者离开的地方接手。
有人用JGroups解决这个问题吗?您的经历如何?
最佳答案
您可能会从 JBoss 4.2.3+ 中获得一些灵感和方向 Clustered Singleton 。它们定义了一种在节点集群中的一个且仅一个节点上运行的服务。如果该节点发生故障,或者从集群中弹出,则会为新节点分配单例。 [JBoss Clustering] 的底层实现是 JGroups。
关于java - 通过故障转移使长时间运行的任务仅在集群的一台机器上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16660199/