web-dev-qa-db-ja.com

Docker-Swarmモードでの負荷分散の方法

私はdocker-swarmを使用してクラウドアーキテクチャをセットアップするプロジェクトに取り組んでいます。 swarmを使用すると、サービスのレプリカをデプロイできることを知っています。つまり、そのイメージの複数のコンテナーが実行され、リクエストを処理します。

また、Dockerには、この要求の分散を管理する内部ロードバランサーがあります。

ただし、次のことを理解するには助けが必要です:

REST APIとしてサービスを公開するコンテナがあるか、Webアプリと言います。そして、群れに展開された複数のコンテナ(レプリカ)があり、他のコンテナ(このHTTP/RESTサービスと通信するアプリ)。

次に、IP:PORTの組み合わせを使用するアプリを作成するときに使用しますか?これらのサービスを実行しているワーカーノードIPのいずれかですか?そうすることで、同じサービスを実行している他のワーカー/マネージャーの間でも負荷を適切に分散できますか?

または、マネージャーを呼び出して、適切にルーティングを処理します(マネージャーノードにこの特定のサービスを実行するコンテナーがない場合でも)。

ありがとう。

23
Shabirmean

iP:PORTの組み合わせを使用するアプリを作成するときこれらのサービスを実行しているワーカーノードIPのいずれかですか?

そのノードに問題のサービスのレプリカが存在しない場合でも、swarmに参加している任意のノードを使用できます。したがって、Node:HostPortの組み合わせを使用します。入力ルーティングメッシュは、要求をアクティブなコンテナーにルーティングします。

1ワード、1万ワード

enter image description here

そうすることで、同じサービスを実行している他のワーカー/マネージャーの間でも負荷を適切に分散できますか?

入力コントローラはデフォルトでラウンドロビンを実行します。

これで、クライアントはdnsラウンドロビンを使用して、Docker Swarmノードのサービスにアクセスする必要があります。従来のDNSキャッシュの問題が発生します。これを回避するために、HAproxyなどの外部ロードバランサーを使用できます。

enter image description here

26
Farhad Farahi