JS7®のクラスタリング機能

JS7®はJOCコックピット、データベース、コントローラー、エージェントのそれぞれの間の通信が何らかの理由で断絶しても、エージェント上で実行されるジョブは実行継続され、ジョブの実行履歴は通信が復活後に自動的に反映されるようになっています。ただし、エージェントが異常停止すると、そのエージェント上で実行されているジョブはkillされ、2重実行を防ぐようになっています。
https://kb.sos-berlin.com/display/JS7/JS7+-+Resilience

有償版ライセンスをご導入いただくと、上記に加えてJOCコックピット、コントローラー、エージェントのクラスタリングが可能になります。

JOCコックピット・クラスタリング

2つ以上のJOCコックピットのインスタンスをグループとし、一つのアクティブ・インスタンスと残りのスタンバイ・インスタンスとして、フェイルオーバー/スイッチオーバーを数十秒で切り替えます。ジョブ定義や実行履歴などは、データベースに共有されます。

https://kb.sos-berlin.com/display/PKB/JS7+-+JOC+Cockpit+Cluster

コントローラー・クラスタリング

2つのコントローラーインスタンスで、フェイルオーバー/スイッチオーバーを数秒で切り替えます。各コントローラーはオーダーステートなどを同期し、それぞれのジャーナルファイルに保存します。また指定したクラスター監視エージェントがアクティブコントローラーと通信できない場合、スタンバイエージェントに自動的にフェイルオーバーを指示します。

https://kb.sos-berlin.com/display/PKB/JS7+-+Controller+Cluster

エージェント・クラスタリング

エージェントはディレクターエージェントとサブエージェントの2層構造になっています。
ディレクターエージェントは、コントローラー及びサブエージェントとの通信とジャーナルの読み書きとディレクターエージェント間のジャーナル同期を担い、サブエージェントはジョブの実行と実行結果の報告をディレクターエージェントにします。(ディレクターエージェントにはインテグレーテッドサブエージェント機能も含まれ、ジョブ実行も可能ですが推奨していません)

ディレクターエージェントは、コントローラー及びサブエージェントとの通信とジャーナルの読み書きとディレクターエージェント間のジャーナル同期を担い、サブエージェントはジョブの実行と実行結果の報告をディレクターエージェントにします。(ディレクターエージェントにはサブエージェント機能も含まれ、ジョブ実行も可能ですが推奨していません)

ディレクターエージェントクラスターはアクティブスタンバイの2ノード構成であり、コントローラーとスタンバイ側ディレクターエージェントがクラスター監視を行い、両方からの接続が切断されると即座にフェイルオーバー動作に移ります。ディレクターエージェント同士のハードビート通信はありません。
なおディレクターエージェントの障害はサブエージェント上のジョブ実行に影響しません。
サブエージェントクラスターは複数のサブエージェントグループを構成でき、ディレクターエージェントが接続監視を行い、サブエージェント同士のハードビート通信はありません。サブエージェントとの接続が切断されると即座にフェイルオーバー動作に移ります。

複数のエージェントをグループ(エージェントグループ)とし、グループを指定することによってグループ内のエージェント(サブエージェント)にジョブ実行を指示します。割り当てる順番は下記の方式があります。

  • 固定順(Fixed-priority: 割り当てたサブエージェントがなんらかの理由でジョブ実行できない場合、次のサブエージェントにジョブが割り当てられる)
  • ラウンドロビン(Round-robin: 割り当てたサブエージェントに順番にジョブを割り当てる)
サブエージェントの障害時は、障害サブエージェント上で実行されていたジョブはkillされ、次のサブエージェントでジョブ実行されます。
ラウンドロビン方式と固定順方式では、違いはありません。

一つのエージェントグループには、必ず一つのディレクターエージェントが指定されコントローラー及びサブエージェントへの通信とジャーナルへの記録を担います。(ディレクターエージェントのHA構成フェイルオーバーはV.2.6以降で提供)

エージェントは複数のエージェントグループに属することができるため、ジョブの目的と必要リソースによってエージェントグループを使い分けることができます。

またジョブ定義にはエージェントグループで実行指定できるため、実際にジョブを実行するサブエージェントはジョブ定義を変更せずに動的にエージェントグループに登録/更新できます。(例えば実行用VM/コンテナを起動してからサブエージェントに登録して、実行完了後VM/コンテナを停止削除する)