3

Ich habe einen 2-Knoten-Docker Schwarm mit einem Manager-Knoten pi-manager und einem Arbeiterknoten pi-worker auf einem Stapel von 2 Raspberry Pi 3 Modell 3 B mit Raspbian konfiguriert. Ich habe ein Bild erstellt, das eine Webseite vom Helloworld-Typ auf einem lokalen Host ausführt, die auch den Container identifiziert, auf dem die Seite ausgeführt wird. Beispiel:Load Balancing mit Docker-Schwarm

example of docker image webpage

Vom Docker-Manager-Knoten den öffentlichen Dienst schaffen „flairhello“ und dann skaliert bis 2 continers (wir werden sie A und B nennen).

erwartetes Verhalten:

Das Verhalten, das ich erwartet zu bekommen war, dass, wenn ich jeden localhost besuchte ich würde die Webseite erhält den Container-ID Anzeige auf dem Host ausgeführt wird. Zum Beispiel, wenn pi-manager hat Container A und pi-worker hat Container B. Wenn ich localhost Adresse von pi-manager besuche, würde ich erwarten, die Behälter Identifikation von A zu sehen und wenn ich die localhost Adresse von pi-worker besuche, würde ich erwarten, die Behälter Identifikation von B zu sehen. Dies ist NICHT, was passiert.

Aktuelles Verhalten:

Das Verhalten, das ich erlebt habe ist, für gewisse Zeit, dass, wenn ich die localhost besuchen entweder pi-manager oder pi-worker ich gerichtet bin zu Container A ‚s Webseite und dann für die nächste Abschnitt der Zeit egal welchen localhost (pi-manager oder pi-worker) Ich besuche ich bin immer auf Container B gerichtet. Ich denke, das ist der eingebaute Lastausgleich von Docker Schwarm?

Fragen:

Wie kann ich einen Load-Balancer verwenden Sie das Verhalten, das ich von meinem Schwarm wollen zu bekommen?

Welche Werkzeuge muss ich verwenden? Docker komponieren? Haproxy Bild? (Diese aus der Lektüre zu diesem Thema erwähnt gesehen

es irgendwelche guten Tutorials für diesen Prozess


UPDATE:?!

Schritte ein Network Load Balancer mit HAProxy in meiner Antwort unten erstellen

Antwort

2

Ja das ist richtig.Der Docker Schwarm hat Schwarm Routing Mesh https://docs.docker.com/engine/swarm/ingress/, und dies ist nicht klebrig (ipvs) pro Design.Wenn Sie klebrig sein möchten, müssen Sie einen Loadbalancer in Ihrem Stapel bereitstellen, die Sitzung Klebrigkeit unterstützt, für Beispiel Tr aefik (https://traefik.io/).

Aber Sie können auch mit Nginx gehen, zum Beispiel, wie wir es tun. ->https://github.com/n0r1sk/border-controller. Aber das ist anspruchsvoller.

+0

Im Entwicklung dieses Projekts als eine Art Beispiel Lastausgleich anzuzeigen, so dass, wenn ich auf eine Hauptseite gehen die Besucher auf diese beiden unterschiedlichen Behälter umgeleitet wird läuft auf 'pi-manager' und' pi-worker'. Wenn Sie also eine Seite aktualisieren, ist die Adresse des Containers anders und Sie können die Funktion zum Lastenausgleich darstellen. Ist dies mit Nginx oder HaProxy möglich? Thakk du für dein Beispiel Ich sehe, dass es eine klebrige Verbindung ist Wie genau funktioniert es? – ob1

+0

glaubst du, ich kann diese Docker-Datei konvertieren, um mit der ARM-Architektur zu arbeiten? – ob1

+0

Wenn auf dem Container kein laufender Webdienst ausgeführt wird, werde ich immer noch zu einem Knoten weitergeleitet, auf dem der Dienst ausgeführt wird? – ob1