各コンテナの役割と障害時の影響範囲
Kompira 2.0 システムはいくつかのコンテナで構成されていて、それらが協調動作することでシステムとして正常に動作することができます。 コンテナはそれぞれ役割を持っており、コンテナに障害が起きたときはそれぞれ異なる影響を受けることになります。 また、いくつかのコンテナは他のコンテナに依存しているものもあり、そうしたコンテナでは依存先コンテナで障害があるとその影響を受ける場合もあります。
Kompira を構成する各コンテナについて、その依存するコンテナおよび障害時の主な影響について以下にまとめます。
コンテナ | 依存するコンテナ | コンテナ障害時の主な影響 |
---|---|---|
redis | システム全体 | |
postgresql | システム全体 | |
nginx | ブラウザアクセス、REST-APIアクセス | |
rabbitmq | 各コンテナの連携動作、kompira_sendevt からのメッセージ受信 | |
kompira | redis, postgres, rabbitmq | ブラウザアクセス、REST-APIアクセス、管理コマンドの実行 |
kengine | redis, postgres, rabbitmq | ジョブフローの実行 |
jobmngrd | rabbitmq | リモートジョブの実行 |
影響範囲となっている役割や機能に関して、正常に動作していないと考えられるような場合は、当該のコンテナに何らかの問題が生じているという推測はできます。 Kompira システムに問題があった場合にトラブルシュートを実施することに備えて、事前に各コンテナの役割や障害時の主な影響範囲について理解を深めておくことをお勧めします。
以下に各コンテナの役割と障害時の典型的な影響範囲について示しますが、実際にはある状況が複数の障害や影響を同時に引き起こすようなことも多いです。 トラブルシュートにあたってはこれらは基本的な情報としてとらえて、個別には複雑な状況が起きうることを想定しておいてください。
redis の役割と影響範囲
Kompira オブジェクトアクセスなど各種データ処理のキャッシュ機構を担うため、redis コンテナの正常性は非常に重要です。 redis がダウンしている、または、他コンテナからアクセスできない状態になると、システム全体に影響があります。
- ブラウザ操作時に応答が返らなくなる、または内部処理エラーになります。
- ジョブフローの動作が停止する、または内部処理エラーになります。
postgresql の役割と影響範囲
全ての Kompira オブジェクトの保存先となるため、postgres コンテナの正常性は非常に重要です。 postgres がダウンしている、または、他コンテナからアクセスできない状態になると、redis 同様にシステム全体に影響があります。
nginx の役割と影響範囲
nginx コンテナは外部からの HTTP/HTTPS アクセスを受け付ける役割を担います。 nginx の障害時には、以下のような影響があります。
- 外部から HTTP/HTTPS アクセスが出来なくなります。
- 外部からの HTTP/HTTPS アクセスは接続エラーや接続タイムアウトなどになります。
rabbitmq の役割と影響範囲
rabbitmq は各コンテナ間の連携動作をサポートするため、障害時の影響は以下のように多岐にわたります。
- kompira と kengine の連携が出来なくなります。
- ブラウザ操作からジョブフローの実行など、kengine に対する処理指示ができなくなります。
- Kompira オブジェクト更新時にそれに伴う kengine との連携処理ができなくなります。
- kengine と jobmngrd の連携ができなくなります。
- ジョブフローによるリモートジョブなどの実行ができなくなります。
- 外部に配置した kompira_jobmngrd とも連携できなくなります。
- kompira_sendevt からのメッセージを受信できなくなります。
kompira の役割と影響範囲
kompira コンテナは外部インターフェース経由のアプリケーション処理を担います。
- nginx が受け付けた HTTP/HTTPS リクエストに応じた、ブラウザ操作および REST-API アクセスが出来なくなります。
- 外部からの HTTP/HTTPS アクセスは 50x エラーやレスポンスタイムアウトになります。
- kompira コンテナ上での manage.py 管理コマンドの実行ができなくなります。
kengine の役割と影響範囲
kengine コンテナはジョブフローなどプロセスの動作を担います。 kengine の障害時には以下のような影響があります。
- ジョブフローおよびスクリプトジョブの実行ができなくなります。
- kompira_sendevt からのメッセージを受信できなくなります。
ただしジョブフローの実行などは、実際には kengine 上で動作する Executor がその役割を担っています。 Executor はライセンスやシステム構成によって、一つの kengine 上で複数の Executor が動作する場合があります。 これは、一部の Executor のみで障害が発生しているようなケースでは、一部のジョブフローは実行できているが、別の一部のジョブフローの実行が出来なくなる、といった状況を生み出す可能性もあることに注意してください。
また kengine には "leader" または "follower" という役割があり、システム全体で一つの kengine だけが leader となります。 leader となる kengine が存在しないような状況では、さらに以下のような影響があります。
- 不要になったプロセス情報の回収されずに残り続けます。
- スケジュールやメールチャネルの再割り当てがなされずに、正常に機能しなくなります。
- ジョブマネージャ情報が更新されなくなります。
jobmngrd の役割と影響範囲
jobmngrd コンテナはリモートジョブの実行を担うため、障害時には以下のような影響があります。
- 実行ジョブを用いた ["command args..."] などのコマンド実行ができなくなります。
- スクリプトジョブの実行ができなくなります。
- その他のリモートジョブである、セッションジョブ、ファイル転送ジョブなども実行できなくなります。
クラスタ構成など jobmngrd が複数存在するような構成で一部の jobmngrd で障害が発生しているようなケースでは、一部のリモートジョブは実行できるが、別の一部のリモートジョブが実行できない、といった状況を生み出す可能性もあることに注意してください。