swarm docs内のLoad Balancingセクションでは、内部ロードバランサもヘルスチェックを行い、サービスを実行していないノードを削除した場合には、そのノードが削除されたかどうかを確認しません。ロードバランスを実行してノード上でヘルスチェックを実行する必要がありますか?
次のケースでは、レプリカ3,1つのインスタンスが3つのノードのそれぞれで実行されているサービスがあります。
マネージャー:
[[email protected] ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a593d485050a ddewaele/springboot.crud.sample:latest "sh -c 'java $JAVA_OP" 7 minutes ago Up 7 minutes springbootcrudsample.1.5syc6j4c8i3bnerdqq4e1yelm
ノード1:
[[email protected] ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d3b3fbc0f2c5 ddewaele/springboot.crud.sample:latest "sh -c 'java $JAVA_OP" 4 minutes ago Up 4 minutes springbootcrudsample.3.7y1oyjyrifgkmxlr20oai5ppl
ノード2:今すぐ
[[email protected] ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ebca8f24ec3a ddewaele/springboot.crud.sample:latest "sh -c 'java $JAVA_OP" 7 minutes ago Up 7 minutes springbootcrudsample.2.4tqjad7od8ep047s55485na1t
は、node1で、我々は、ドッキングウィンドウコンテナを殺します。このノードは、コンテナがなくなって
[[email protected] ~]# docker kill d3b3fbc0f2c5
d3b3fbc0f2c5
(群れは、サービスのレプリケーション= 3を維持するために数秒後にここでそれを再作成します)サービスなしとなります
[[email protected] ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
新コンテナアップ
ただし、以下の出力、コンテナd3b3fbc0f2c5
が殺された時に、進入ロードバランサーがこれを検出しなかった、そしてそれはまだノードにトラフィックを送信していたで
[[email protected] ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b8c9a7a5cf97 ddewaele/springboot.crud.sample:latest "sh -c 'java $JAVA_OP" 11 seconds ago Up 9 seconds springbootcrudsample.3.9v4cnhi8dvq7n8afb2kvp28sk
(resulti接続が拒否されましたか?)
このようなシナリオはどのように処理する必要がありますか?このシナリオでは外部ロードバランサが必要ですが、どのように設定する必要がありますか?
場所に適切なヘルスチェックで、 François Maturelによって示されるように[[email protected] ~]# while :; do curl http://localhost:8080/env/hostname ; echo "" ; sleep 1; done
{"hostname":"d3b3fbc0f2c5"}
{"hostname":"a593d485050a"}
{"hostname":"ebca8f24ec3a"}
{"hostname":"d3b3fbc0f2c5"}
{"hostname":"a593d485050a"}
{"hostname":"ebca8f24ec3a"}
{"hostname":"d3b3fbc0f2c5"}
{"hostname":"a593d485050a"}
{"hostname":"ebca8f24ec3a"}
{"hostname":"a593d485050a"}
{"hostname":"ebca8f24ec3a"}
{"hostname":"a593d485050a"}
curl: (7) Failed connect to localhost:8080; Connection refused
{"hostname":"ebca8f24ec3a"}
{"hostname":"a593d485050a"}
curl: (7) Failed connect to localhost:8080; Connection refused
{"hostname":"ebca8f24ec3a"}
{"hostname":"a593d485050a"}
curl: (7) Failed connect to localhost:8080; Connection refused
{"hostname":"ebca8f24ec3a"}
{"hostname":"a593d485050a"}
curl: (7) Failed connect to localhost:8080; Connection refused
{"hostname":"ebca8f24ec3a"}
{"hostname":"a593d485050a"}
curl: (7) Failed connect to localhost:8080; Connection refused
{"hostname":"ebca8f24ec3a"}
{"hostname":"a593d485050a"}
curl: (7) Failed connect to localhost:8080; Connection refused
{"hostname":"ebca8f24ec3a"}
{"hostname":"a593d485050a"}
{"hostname":"b8c9a7a5cf97"}
{"hostname":"ebca8f24ec3a"}
{"hostname":"a593d485050a"}
{"hostname":"b8c9a7a5cf97"}
あなたは[ヘルス](https://docs.docker.com/engine/reference/builder/#healthcheck)を使用して 'Dockerfile'でこのシナリオを試してみましたか?スウォームモードでは、このヘルスチェックを使用してトラフィックをサービスレプリカと均衡させることができます。 –
確かに... HEALTHCHECKを実装してうまく動作します。 – ddewaele