2017-01-11 1 views
1

私はDC/OSによって管理されるクラスタと、Marathonを介して展開したいドッキングされたサービスを持っています。私はすでに、サービス発見と他の既存のサービスのロードバランシングに使用されているmarathon-lbを持っています。これらのサービスはすべて、BRIDGEネットワークを使用して配備されています。HOSTネットワークで起動したサービスの負荷分散をMarathon-lbに設定する方法はありますか?

新しいサービスでは、複数のポートが公開されています。ポートAはサービスのインスタンス間の通信用であり、ポートBは世界からの要求を受け入れるためのものです。私は、サービスを展開するためにHOST(およびBRIGEではない)ネットワークを使用したいと思います。

私はバランスをロードし、外部ポートB.

を露出させるためにマラソンポンドのためのために、サービスのJSONを構成する方法を知っていただきたいと思い、私はすでに、さまざまなシナリオと構成を試してみましたが、どれも働きました。私が作ったjsonは以下の通りです。 Marathon documentation

{ 
    "id": "/cassandra-seed", 
    "cpus": 1.5, 
    "mem": 8192, 
    "disk": 0, 
    "instances": 1, 
    "container": { 
    "type": "DOCKER", 
    "docker": { 
     "image": "cassandra:2.2.3", 
     "network": "HOST", 
     "requirePorts": true, 
     "privileged": true, 
     "forcePullImage": false  
    } 
    }, 
    "constraints": [["hostname","UNIQUE"]], 
    "labels": { 
    "HAPROXY_GROUP": "external" 
    }, 
    "portDefinitions": [ 
    { "port": portA,"protocol": "tcp"}, 
    { "port": portB,"protocol": "tcp"} 
    ] 
} 

明示的portDefitionsのポートBを定義し、trueにrequirePortsを設定することにより、サービスポートは、ポートをホストに等しいことが記載されています。また、ポートBがportDefinitionsセクション(10000〜10100のデフォルト範囲に違反)である新しいバージョンのmarathon-lbを導入しました。

したがって、私は、サービスjsonにHAPROXY_GROUPラベルを付けることによって、marathon-lbがポートBを必要に応じて公開すると想定しました。しかし、これはそうではないようです。私がサービスを展開し、curl http://marathon-lb.marathon.mesos:portBの場合、応答は「サーバーからの空の応答」です。しかし、もし私がcurl http://physicalNodeIP:portB私はサービスのインスタンスに接続することができます。

ありがとうございます。

+0

この質問は疑わしいようです。http://stackoverflow.com/q/41586960/1305344 DC/OSとMarathonでより多くの経験を持つ人は誰でも、類似しているとコメントし、重複していると重複しているとマークできますか? –

+0

私の視点では、彼らは異なった質問です。これは、HOSTネットワークモードで展開されたときにMarathon-lbによって負荷分散されるために必要なすべてのサービスに必要な構成を指します。 stackoverflow.com/q/41586960/1305344は、具体的にはカザンドラサービス、ホストとブリッジモードでコンテナとサービスに割り当てられたIP、それぞれのケースでどのように2つのカサンドラノードをゴシップできるかを指します。 – Manolis

答えて

1

アプリ定義の間違った部分にrequirePortsがあるようです。マラソンでカサンドラを実行しているとは対照的に、追記として

{ 
    "id": "/cassandra-seed", 
    "cpus": 1.5, 
    "mem": 8192, 
    "disk": 0, 
    "instances": 1, 
    "container": { 
    "type": "DOCKER", 
    "docker": { 
     "image": "cassandra:2.2.3", 
     "network": "HOST", 
     "privileged": true, 
     "forcePullImage": false  
    } 
    }, 
    "constraints": [["hostname","UNIQUE"]], 
    "labels": { 
    "HAPROXY_GROUP": "external" 
    }, 
    "requirePorts": true, 
    "portDefinitions": [ 
    { "port": portA,"protocol": "tcp"}, 
    { "port": portB,"protocol": "tcp"} 
    ] 
} 

、あなたは、カサンドラのフレームワークを使用して検討する必要があります。それはこのように、トップレベルにする必要があります。

関連する問題