2016-07-07 10 views
4

アプリケーション(Database)をBatchに変更/更新するために、夜間にアクティブになるいくつかの(春)アプリケーションが含まれています。クラスタ化された環境のスケジューラ

これはすべて正常に動作していますが、問題はアプリケーションが間もなくclustered environmentで実行されることです。

instance Bは同時に同じ作業をしているのを防ぐための最良のオプションは何ですか?

** UPDATE **
クラスタ環境では'active-active'として設定されています。
各ノードは、それ自身のデータベースインスタンスと通信します。各データベースインスタンスは、他のインスタンスへのデータをreplicateにします。
DBインスタンスは'master-slave'と設定されていませんが、各インスタンスがinsert-update-delete操作を実行するGalera clusterで実行されます。

したがって、それぞれschedulerは1つのインスタンスで1回だけ実行する必要があります。他のインスタンスはスケジューラを実行すべきではありません。ですから、あるインスタンスのスケジューラが実行される方法を見つける必要があります。他のインスタンスの同じスケジューラは実行しないでください。

+0

[クラスタ環境で実行されているSpring Scheduled Task]の複製があります。(http://stackoverflow.com/questions/31288810/spring-scheduled-task-running-in-clustered-environment) –

+0

答えはありますか? –

+0

私の質問を更新してより明確にするための回答はありませんでした。 – user2054927

答えて

4

私たちは永続的なQuartz job schedulingで終わりました。
This投稿は、永続的なQuartz schedulingについては、Springと多くの手助けをしました。

1

クラスタ内のノードに異なるタスクを委任する必要があります。何が夜にデータベースに起こっていますか?

ノードがロードバランサの背後で正しくクラスタ化されている場合は、データベースに書き込む更新を受け取るノードのみが必要です。

Zookeeperを使用してノードを管理し、プライマリを設定して単独スケジューリングを実行できます。

1

スケジュールされたイベントを両方のクラスタで処理するコードがあります。 2つのアプローチがあります。

  1. このイベントは、任意の1つのクラスタで実行することができます。次に、このクラスタがダウンしたときに、他のクラスタのスケジューラを切り替える必要があります。同様のメンテナンスの問題。
  2. このようなイベントを両方のクラスタで実行することができます。実装の違いにより、すべてのクラスタがポーリングされ、いずれかのクラスタが正常に実行されます。ポーリング/ロックのためのデータベースまたはjmsメッセージを選択できます。

私は第2のアプローチを好む - 一度書く。

1

あなたはどんな種類のSchedulersを使用しているのかを言っているわけではありません。
あなたが探しているものは、持続的スケジューリングです。 JEEはこれをサポートしており、Quartzもこれをサポートしています。あなたが望むならば、Quartzとうまく静かに統合されていますが、ボックスからの春はありません。

永続スケジューラでは、データベースにジョブが追加され、トリガは実際のトランザクションであるかどうかわからない「トランザクション」で実行され、トリガを実行できるスケジューラは1つだけです。
ただし、管理にはデータベーステーブルが必要です。

関連する問題