0

Ubuntu-14 と Mac (Big Sur) の 2 台のラップトップがあり、どちらにも Docker (swarm サポートあり) がインストールされています。

  • Swarm マネージャーとして Ubuntu を使用し、ワーカー ノードとして Mac を使用しました。
  • Ubuntu プライベート IP は 192.168.0.14 (および) Mac プライベート IP は 192.168.0.11 です [すべてのクラス C ネットワークが同じ IP を持っているため、プライベート IP は問題なくパブリックで共有できます:P]
  • 「docker swarm init --advertise-addr」は、Ubuntu ホストであるマネージャーを作成するために使用したコマンドであり、Mac で join コマンドを入力して、Mac ノードを Swarm にワーカーとして参加させました。

したがって、大まかに言うと、docker-compose.yml (Python Web サービスが 1 つしかない) を使用しました。Compose ファイルを使用して、「docker スタック」を開始し、「python webservice」インスタンスを 5 に複製しました。これらのアクションはすべて Manager ノードで実行されました。

  • Ubuntu Manager Node (同じく 2 つのコンテナー インスタンスがあり、ワーカーとして動作) (および) Mac Node には、「python webservice」の 3 つのコンテナー インスタンスがありました。「ポート」を「80:1234」に設定しました。つまり、ホスト マシンのポート 80 にアクセスすると、コンテナ内で実行されている 1234 の「python アプリケーション Web サービス ポート」にリダイレクトされます。

  • Manager IP (192.168.0.14:80) を約 50 回ヒットし、Mac と Ubuntu の両方で 5 つのコンテナーすべてのログを確認したところ、Ubuntu で 2 つのコンテナーすべてが見つかり、それぞれ 25 ヒットを取得しました (ラウンドで) robin fashion) しかし、Mac マシンに存在するコンテナーのログは見つかりませんでした。

これは予期される動作ですか?

  1. Mac マシン (ワーカー) の IP アドレス (192.168.0.11:80) を直接ヒットした場合にのみ、Mac マシンに存在するコンテナーのログ/リクエスト ヒットを取得できました。

ここでは 2 種類の負荷分散が行われます。

  1. (ワーカー/マネージャーの) IP:port にアクセスすると、そのワーカー/マネージャー マシンに存在するコンテナーのみが負荷分散され、ラウンドロビン方式で提供されます (使用されているアルゴリズムであることがわかります)。この負荷分散タイプを「コンテナ レベルのロード バランサー」と名付けましょう。

  2. しかし、192.168.0.14 (マネージャー IP) に達したとき、2 つのノードにデプロイされた 5 つのコンテナーすべてで負荷が分散されると予想しました。どういうわけかこれはうまくいきませんでした。「ノードレベルのロードバランサー」と呼びましょう

私はこれについてグーグルでたくさん検索しようとしましたが、何も見つかりませんでした。ほとんどのサイトは、「ノード レベルのロード バランサー」を解決するために、Nginx、HaProxy ロード バランサーなどの外部テクノロジを使用しています。

ドッカー自体による、これに対するすぐに使えるサポートはありませんか?

EDIT 1 - Metin がコメント セクションで尋ねたので、docker-compose.yml を追加しました

docker-compose.yml

version: '3'

services:
    webservice:
        image: python_ws_test
        ports:
            - '80:1234'
        command: ["python", "app.py"]
4

1 に答える 1