マルチノード構成下における運用の注意事項
(本機能はExtensionsトライアルで試用可能です)
概要¶
キュー方式バックグラウンドジョブを複数ノード(複数台)構成で運用する場合、以下の2点を設定してください。設定しない場合、ジョブの二重実行やダウンロード失敗が発生します。
- Quartzクラスタリングの有効化
- 出力ファイル保存先を共有ストレージに指定
なお、複数ノード構成の目的は可用性(冗長化)です。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. 有効化しなかった場合の影響¶
クラスタリングが無効(既定)のまま複数ノードを起動すると、各ノードのジョブディスパッチャ(キューに登録されたジョブを定期的に確認して実行する処理)が互いを認識せず独立してジョブテーブルをポーリングし、同時にジョブを取得・実行します。その結果、以下が発生します。
- 同一ジョブが複数ノードで二重実行される
- テナント単位の直列実行制御が破綻する
- スタックジョブ回収処理が、他ノードで実行中のジョブを巻き戻す(失敗扱いにする)
クラスタリングを有効化すると、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 以降 | 機能追加 |

