ジョブマネージャとの通信について

コメント

15件のコメント

  • 正式なコメント
    服部健太

    KompiraデーモンとKompiraジョブマネージャ間は、RabbitMQというメッセージングミドルウェアを介して通信を行っております。プロトコルはAMQPで、ポート番号は5672となります。

    コメントアクション パーマリンク
  • auto_ope

    迅速な回答ありがとうございます。

    ご回答頂きました内容、承知しました。本件Close頂いて結構です。

    0
    コメントアクション パーマリンク
  • auto_ope

    すみません。本件追加で質問させてください。

    KompiraデーモンとKompiraジョブマネージャ間をインターネット経由で通信させたく、https(443)で通信するといったことは出来ないでしょうか。

    0
    コメントアクション パーマリンク
  • 服部健太

    Kompiraエンジン(本体)と Kompiraジョブマネージャとは、AMQPで接続する仕様のため、https(443)で通信することはできません。

    0
    コメントアクション パーマリンク
  • auto_ope

    承知しました。ご回答ありがとうございました。

    0
    コメントアクション パーマリンク
  • auto_ope

    本件、追加で質問させてください。

    Kompiraエンジン(本体)とKompiraジョブマネージャの通信はAMQP(5672)で通信される
    とのいうことですが、こちらはKompiraエンジン(本体)からKompiraジョブマネージャに
    対してTCPの5672ポートで接続しにいくという理解で良いでしょうか。

    送信元は1025以降の任意のポート、送信先は5672の固定ポートに接続しにいき、
    逆方向に対しては特別なセッションを張らず、上記セッション内でデータのやり取りを
    行うという理解で合っていますでしょうか。

    0
    コメントアクション パーマリンク
  • Ichiro Takahashi

    フィックスポイントの高橋です。

    こちらはKompiraエンジン(本体)からKompiraジョブマネージャに対して
    TCPの5672ポートで接続しにいくという理解で良いでしょうか。

    上記とは逆方向でして、KompiraジョブマネージャからKompiraエンジン方向への接続となります。

    もう少し詳細には、Kompiraエンジンと同一ノードにRabbitMQというAMQPのサーバが動作しており、KompiraエンジンもKompiraジョブマネージャも、5672番ポートで待ち受けているそのAMQPサーバに接続したうえで(そこを経由して)通信する、という構造になります。

    送信元は1025以降の任意のポート、送信先は5672の固定ポートに接続しにいき、
    逆方向に対しては特別なセッションを張らず、上記セッション内でデータのやり取りを
    行うという理解で合っていますでしょうか。

    はい、こちらは上記ご認識のとおりとなります。

    参考になさってみてください。

    0
    コメントアクション パーマリンク
  • auto_ope

    早々の返信ありがとうございます。

    想定していた動きと異なっていたので言葉の定義について確認させてください。
    Kompiraエンジン(Kompiraデーモン):ジョブフローの実体が格納されている
    Kompiraジョブマネージャ     :Kompiraエンジンからの命令を受けて実際にジョブフローが起動されるサーバ

    という理解です。

    この理解の上で、
    Kompiraジョブマネージャ(送信元:1025以降の任意のポート) -> Kompiraエンジン(送信先:5672)
    という片方向の通信が確立されるということでしょうか。

    0
    コメントアクション パーマリンク
  • Ichiro Takahashi

    通常 Kompira をインストールすると、同一ノード上で以下のサービスが動作しています(一部省略しています)。

    • kompirad (Kompiraエンジン): フロントエンドなどからの指示を受けて、ジョブフローを実際に実行するサービス
    • kompira_jobmngrd (Kompiraジョブマネージャ): ジョブフローでのリモートジョブ実行などに伴い、リモートサーバへのログイン・コマンド実行などを担うサービス
    • rabbitmq-server (RabbitMQ): AMQP で kompirad ⇔ kompira_jobmngrd 間などのメッセージングを担うサービス
    • postgresql (PostgreSQL): Kompiraオブジェクトを格納するデータベースを担うサービス
    • httpd (Apache): ブラウザアクセスを処理するフロントエンドのサービス

    このとき、kompirad および kompira_jobmngrd が rabbitmq-server に対して TCP で接続しにいきます。rabbitmq-server はそれらのサービス間のメッセージを中継しているとお考え下さい。

    kompira_jobmngrd については単独で別ノードにインストールすることが可能ですが、その際は、kompira_jobmngrd から kompirad をインストールしたノード上の rabbitmq-server に対して TCP 接続することになります。

    ちなみに、kompira_sendevt でのメッセージ送信(監視システムからのアラート送信など)も、同様に kompira_sendevt から rabbitmq-server に対する TCP 接続となります。

     

    0
    コメントアクション パーマリンク
  • auto_ope

    ご返信ありがとうございます。
    # お礼遅くなり申し訳ありません。

    ご回答頂いた内容についてもう少し教えてください。

    kompira_jobmngrd については単独で別ノードにインストールすることが可能ですが、その際は、
    kompira_jobmngrd から kompirad をインストールしたノード上の rabbitmq-server に対して
    TCP 接続することになります。


    上記のように、KompiradとKompira_jobmngrdを別々のノードにインストールする構成では、
    以下の接続イメージで認識合っていますでしょうか。
    その際、ノードBで実行されたジョブフローにリモートサーバに対するコマンド命令があった場合は、
    rabbitmg-serverにメッセージを連携し、ノードAはメッセージがキューイングされたことを検知し、
    rabbitmg-serverからメッセージを取得しリモートサーバに対してリモートコマンドを実行する。
    ということでしょうか。
    -------------------------------------------------------------------------------------
    |ノードA:kompira_jobmngrd(リモートコマンド実行するサービス)    |
    -------------------------------------------------------------------------------------
     ↓ 接続先:TCP 5672
    -------------------------------------------------------------------------------------
    |ノードB:rabbitmg-server(メッセージングサービス)          |
    | ↑ 接続先:TCP5672 ※内部的な接続                 |
    |ノードB:kompirad(ジョブフローを実行するサービス)         |
    -------------------------------------------------------------------------------------

    0
    コメントアクション パーマリンク
  • 服部健太

    はい。ご認識の通りでございます。

    0
    コメントアクション パーマリンク
  • auto_ope

    ご回答ありがとうございます。
    上記内容で承知しました。

    0
    コメントアクション パーマリンク
  • auto_ope

    本件、3年前の話しで恐縮ですが、上記ノードAとノードBがセキュリティセグメントの異なるNWに属している構成の際に、間にあるFirewallで許可する通信は以下の認識で間違っていませんでしょうか?

    許可する通信
    送信元ノード 送信元ポート 送信先ノード 送信先ポート
    ノードA    1025以上(任意) ノードB    5672

    加えて、AMQPSの通信を許可したい場合は、以下の認識で間違っていませんでしょうか?

    許可する通信
    送信元ノード 送信元ポート 送信先ノード 送信先ポート
    ノードA    1025以上(任意) ノードB    5671

    0
    コメントアクション パーマリンク
  • 服部健太

    Firewall の仕様にもよるかと思いますが、ノードA⇔ノードBで TCP で双方向に通信を行いますので、

    送信先ノード 送信先ポート 送信元ノード 送信元ポート
    ノードA    1025以上(任意) ノードB    5672 (AMQPSの場合は5671)

    の設定も必要になるかと思います。

    0
    コメントアクション パーマリンク
  • auto_ope

    早々のご回答ありがとうございます。
    Firewallの仕様が、ステートレスな場合は、上記のように双方向の通信許可がいるという意味と受け取りました。逆に、ステートフルな場合は、投稿させて頂いた通り片方向での通信だけで良いという理解しました。認識に相違がある場合は、ご指摘願います。

    0
    コメントアクション パーマリンク

サインインしてコメントを残してください。