2017-03-11 6 views
0

こんにちは。私は単純なサービスを6回複製し、すべての3つのノードに均等に分散させました。しかし、ノードの1つまたは2つをオフラインにすると、残りのノード/ノード間ですべてのサービスが広がります。すべてのノードをオンラインに戻すと、すべてのサービスはオフラインになっていないノードに残ります。私はこれがコンセプトとして設計されていることを知っています。再バランスのためにサービスをオフラインにすることはできません。しかし、これを実動環境で実行するには、常にノード上で少なくとも1つのサービスを実行する必要があります。どのDocker Swarmノードでも少なくとも1つのサービスが実行されていることを確認する

少なくとも1つのサービスがすべてのDocker Swarmノードで実行されていることを確認するために自動バランスをとることはありますか?

答えて

0

ノードあたり複数のレプリカで動作することはありません。しかし、グローバルのサービスを理解していない場合:

スウォームモードには、replicatedglobalの2種類のサービスがあります。 replicatedサービスでは、swarmマネージャが使用可能なノードにスケジュールするためのレプリカタスクの数を指定します。 globalサービスの場合、スケジューラは、利用可能な各ノードに1つのタスクを配置します。

docker service create \ 
    --name <service name> \ 
    --mode global \ 
    <image name:tag> 

--mode globalに注意してください。

replicatedがデフォルトです。

私はコンセプトは、あなたが縮小し、全体のコンテナをリバランスするために再びスケールアップすることができます再均衡

のためのサービスに オフラインを取ることができないであるとして、これは仕様です知っています1つのコンテナが常に使用可能になるため、ノードはダウンタイムなしで使用できます。

+1

私は誤って質問したかもしれません。各ノードで複数のサービスが実行されている場合は、私の心配はありません。私の要件は、実稼働環境では、各ノードで常に少なくとも1つのサービスが実行されていることです。再バランスについては、手作業やスクリプトを作成するよりもむしろswarmを使用するより自動化された方法が望まれていました。つまり、ノードがオンラインに戻ってくると、swarmの作業によって、アクティブノードの1つで実行されているサービスインスタンスが排除され、新しく開始したノード –

+0

@SteveFitzsimonsこの問題の解決策を見つけましたか?私は最近、awsが5台のうち3台のサーバに影響を与えるネットワーク上の問題を抱えた後、この問題を経験しました.Dockerはサービスを利用可能な2台のホストに戻しました。サーバーが再び利用可能になった後に問題が発生したが、ドッカーはそれらをサーバーに戻さなかった。ドッカーのアップデートを手動で実行して再バランスを取っていた。 – Codex73

+0

私が検討しているオプションは、traefikを使って外部サービスを公開してから、新しいサービスに切り替える前に重み付けフラグを使用してサービスを排除することです。理想的ではありませんが、開かれた接続があっても、Swarmがコンテナを殺すと思う唯一のオプションです –

関連する問題