2016-10-16 15 views
1

さて、1週間以上経過して、私のオーロラクラスタが動作しています。これは本当に簡単ではありませんでしたが、それでも私はそれを得ました。オーロラファイルはホストポートを定義します

私は、単純なオーロラファイル

# copy frontend into the local sandbox 
clone_service = Process(
    name = 'copy service', 
    cmdline = 'git clone https://[email protected]/jakiku/frontend.git frontend') 

install_npm_deps = Process(
    name = 'install npm dependencies', 
    cmdline = 'cd frontend && npm install' 
) 

run_server = Process(
    name = 'run server', 
    cmdline = 'node server.js' 
) 

# describe the task 
run_frontend_service = SequentialTask(
    processes = [clone_service, install_npm_deps, run_server], 
    resources = Resources(cpu = 1, ram = 128*MB, disk=64*MB)) 

jobs = [ 
    Service(cluster = 'mesos-fr', 
     environment = 'devel', 
     role = 'www-data', 
     name = 'frontend_service', 
     task = run_frontend_service) 
] 

特別何もしています。私は、使用する必要のあるポートだけを定義します。私はResources(ポート= 3000)をチェックしましたが、動作しません。それは実際にはリソースではなく、メソスの属性です

答えて

0

一般に、オーロラジョブでは静的ポートを避けたいとします。任意の数のタスクが同じホスト上にある可能性があるので、複数のタスクが同じポートを要求しないことを保証する良い方法はありません。その1つがランダムに失敗する原因になります。

この問題を解決するには、オーソラ設定のthermos名前空間を使用してMesosにポートをリクエストすることをお勧めします。あなたのような何かをした場合たとえば、:

run_server = Process(
    name = 'run server', 
    cmdline = 'node server.js --port={{thermos.ports[http]}}' 
) 

それがホストに割り当てられると、その後、オーロラは、あなたのタスクにランダムなポートを割り当てます。

これは、タスクがホスト間を移動する際に時間の経過とともに変更される、ランダムに割り当てられたポート上で実行されている場合、他のものがあなたのサービスをどのように見つけるのかということです。これに対する答えはservice discoveryです。 job configurationannounce=Announcer()を追加すると、タスクはServerSetに追加され、他のタスクはそれを発見して通信できます。

参考:

Mesos documentation on configuring agents to offer ports

Aurora documentation on requesting ports here

+0

ありがとうございました。私は別のサービスディスカバリを使用しますが、一般的には:感謝します。私はポート番号を渡すことができます。私は私のポート範囲で乱数を得ました。しかし、1つのことは動作しません:私のサーバーへのバインディング。しかし、これはドッカーのことかもしれません。 –

関連する問題