Rundeck はじめました: 複数のサーバで1回だけ並行でジョブを実行したい場合の設定


まずは、設定値の説明を備忘録的に残します。

「Workflow」設定

実行方針

「Workflow」内の「Strategy」で設定します。
Proバージョン以外で利用可能なオプションは:「Node First」「Parallel」「Sequential」。Proでは更に「Ruleset」というオプションもあります。

Node First

最初の Node 上でワークフローのすべてのステップを実行し終わってから、次の Node 上の実行へ進む実行方針。複数のサーバで順番に処理が実行される、という意味です。Node の順番はデフォルトではNode名準ですが、どうしても変更したい場合は「Rank Attribute
」と「Rank Order」という設定を活用すればできます。

Parallel

Node 上で同時にワークフローのすべてのステップが並行で実行される実行方針です。

Sequential

ワークフローの1個めのステップが指定された Node 上で実行されてから、次のステップへ進む実行方針。

Ruleset

Proバージョン独自の機能で、ワークフローのステップごとの条件設定など細かい管理ができるオプションです。

ステップやジョブ実行時の振る舞い設定

「Workflow」部分で設定可能な「If a step fails」の部分もしっかり意識して設定しないといけません。
ステップが失敗した場合、直ちに Failed ステータスにするのか、残りのステップをすべて終えてから Failed とするのかを選びます。

「Nodes」設定

実行先

Node 指定時に複数を設定することができます。ここで便利なフィルターを使うとラ楽です。Node名が例えば「games-batch-01」「games-batch-02」「web-batch-01」「web-batch-02」があるとして、フィルターでは「games-batch」だけを設定して、検索で確認すると、「games-batch-01」「games-batch-02」が実行先として検出されるのがわかります。
除外フィルターもありますので、「02」だけ抜くのも簡単に設定できます。

Thread Count

この設定は今回並行実行を設定するにはかなり大事な部分です。
同時進行のスレッド数の設定です。ここでNodeの数と同じにすると、すべてのNodeで同時実行されます。半分の数字にすると、半分のNodeで実行が終わってから、残りの半分で実行が進みます。

If a node fails

ここはまた失敗時の設定ですが、今回はNode単位です。どれかのNodeで失敗した場合、他のNodeでの実行を続けるべきかどうかを設定します。

Fail the step without running on any remaining nodes.

上記は、即時にFailedへのステータス変更&他のNodeでの実行なしという意味です。

Continue running on any remaining nodes before failing the step.

こちらは、他のNodeでは実行を試み&終えてから、Failedステータスにするという意味です。

複数のサーバで1回だけ並行でジョブを実行したい

この場合どう設定したかというと:

  • Strategy は Parallel に
    • If a step fails の設定では私の場合は「Stop at the failed step」にしました
  • Node 指定で実行先が複数正しくフィルターで拾得た状態に設定
    • 失敗時の設定は「Fail the step without running on any remaining nodes.」にしました
  • Thread Count は Node の数と同じ数字。私の場合は実行先が6個だったので、「6」です。

上記で2ステップがあるワークフローが万が一どこかで失敗した場合、すぐに止まりFailed通知され、他のNodeでの実行へも進みません。
失敗しない状態では、ジョブが6個のNodeで同時に開始され、平行で実行される状態にできました。