コンテンツにスキップ
「プリザンター入門」発売中!

マルチノード構成下における運用の注意事項

本機能の提供形態を示すバナー

(本機能はExtensionsトライアルで試用可能です)

概要

キュー方式バックグラウンドジョブを複数ノード(複数台)構成で運用する場合、以下の2点を設定してください。設定しない場合、ジョブの二重実行やダウンロード失敗が発生します。

  1. Quartzクラスタリングの有効化
  2. 出力ファイル保存先を共有ストレージに指定

なお、複数ノード構成の目的は可用性(冗長化)です。1ノードが停止しても他ノードが処理を継続できますが、キューに登録されたジョブのスループットは向上しません(理由は「1-4. スループットへの影響」を参照してください)。

1. Quartzクラスタリングの有効化

複数ノード構成では、Quartzのクラスタリングを必ず有効化してください。

1-1. 設定

Quartz.jsonのClustering.Enabledをtrueに設定します。

項目 説明 既定値
Enabled クラスタリングの有効化。複数ノードではtrue必須 false
SchedulerName スケジューラ名(全ノードで同一にする) PleasanterScheduler
InstanceId ノード識別子。AUTO推奨(自動採番) AUTO
CheckinInterval クラスタチェックイン間隔(ms) 15000
TablePrefix Quartz管理テーブルの接頭辞 QRTZ_

1-2. CodeDefinerの実行

パラメータClustering.Enabledをtrueにした後は、必ずCodeDefinerを実行してください。データベース内にQuartzを使用するためのテーブル(QRTZ_系)が生成されます。

1-3. 有効化しなかった場合の影響

クラスタリングが無効(既定)のまま複数ノードを起動すると、各ノードのジョブディスパッチャ(キューに登録されたジョブを定期的に確認して実行する処理)が互いを認識せず独立してジョブテーブルをポーリングし、同時にジョブを取得・実行します。その結果、以下が発生します。

  1. 同一ジョブが複数ノードで二重実行される
  2. テナント単位の直列実行制御が破綻する
  3. スタックジョブ回収処理が、他ノードで実行中のジョブを巻き戻す(失敗扱いにする)

クラスタリングを有効化すると、Quartzは排他制御によって、ジョブディスパッチャを実行しているノードを常に1台に限定します。これにより上記の問題を解消します。

1-4. スループットへの影響

1-3.のとおり、クラスタリング有効時は、ある瞬間にジョブディスパッチャを実行しているノードが常に1台に限定されます。複数ノードのジョブディスパッチャが同時に稼働してキューを分担処理する仕組みではないため、ノードを増やしてもキューに登録されたジョブのスループットは向上しません。

ノードを増やすことで得られる効果は、稼働中のノードが停止した場合に、別のノードのジョブディスパッチャが処理を引き継げる可用性(冗長化)です。

2. 出力ファイル保存先に共有ストレージを指定

出力ファイルの保存先を、全ノードからアクセス可能な共有ストレージに設定してください。

2-1. 設定

パラメータBackgroundJobs.jsonのOutputFilePathに、共有フォルダ、NASなどの全ノード共通でアクセスできるパスを指定してください。未指定またはnullの場合、ジョブの登録直後にエラーとなります。

2-2. 共有ストレージを設定しなかった場合の影響

クラスタリング有効時、ジョブを実行するノードは一定しません(負荷やフェイルオーバーにより変動します)。そのため出力先が特定のノードにしか存在しないパスを指定していると、出力ファイルをダウンロードするときにファイルを見つけられず、ダウンロードに失敗します。

このため、必ず全ノードから同一パスで参照できる共有ストレージを指定してください。

2-3. ダウンロード中のジョブ削除に関する注意

あるノードで結果ファイルをダウンロード中のジョブを別ノードから削除操作すると、削除がブロックされずに実行され、ダウンロードが失敗する可能性があります。結果ファイルのダウンロード中の排他制御は、各ノード内でのみ有効です(ノードをまたぎません)。

3. 関連パラメータ一覧

パラメータファイル パラメータ 役割 複数ノードでの推奨
Quartz.json Clustering.Enabled Quartzクラスタリング true(必須)
BackgroundJobs.json OutputFilePath エクスポート成果物の出力先 全ノード共有パス(必須)
BackgroundJobs.json BackgroundQueue キュー方式の有効化 運用に応じて
BackgroundJobs.json BackgroundJobDispatcherInterval ポーリング間隔(秒) 既定値60秒
BackgroundJobs.json BackgroundJobTimeout ジョブタイムアウト(秒) 運用に応じて設定推奨

対応バージョン

対応バージョン 内容
バージョン 1.5.6.0 以降 機能追加