Szenario:Wie DNS konfigurieren (und/oder Loadbalancer) für Docker Swarm-Manager
Ich baue und ein Docker Swarm Cluster konfigurieren. Meine Idee ist, 2 Gruppen von 3 virtuellen Maschinen in 2 getrennten Hosts (HostA
und HostB
), unter Verwendung von Consul von Discovery-Backend zu implementieren:
HostA
: manager0
, node0
, node1
HostB
: manager1
, node2
, node3
Auf diese Weise bekomme ich die gewünschte Redundanz in den Swarm-Managern und Knoten. Allerdings meine aktuelle Situation in einer früheren und viel einfachen Bühne ist: Ich habe gesponnen nur einen einzigen Docker Swarm-Manager wie folgt:
docker \
run -d \
-p 3376:3376 \
swarm manage \
-H :3376 --advertise manager0:3376 \
--replication consul://consul0:8500/
(Hinweis: Der obige Befehl für diese Frage, da einige angepasst wurde irrelevant Argumente wie TLS Überprüfung gelöscht wurden)
Dieser erste Samen der Swarm-Cluster wie erwartet funktioniert.
docker -H tcp://manager0:3376 version
Client:
Version: 1.11.2
API version: 1.23
Go version: go1.5.4
Git commit: b9f10c9
Built: Wed Jun 1 21:47:50 2016
OS/Arch: linux/amd64
Server:
Version: swarm/1.2.3
API version: 1.22
Go version: go1.5.4
Git commit: eaa53c7
Built: Fri May 27 17:25:03 UTC 2016
OS/Arch: linux/amd64
Frage:
Nehmen wir an, dass ich erfolgreich den ursprünglichen Plan anspreche und einen zweiten Manager, den sekundären, hinzufüge. Soweit ich sehen kann, pflegen Konsul die Informationen über den Swarm-Cluster, er weiß, wer der primäre und der sekundäre ist, er führt Gesundheitschecks usw. durch.
Jetzt trage ich meinen Deployer Hut. Ich möchte meinen Docker-Client mit dem Swarm-Cluster verbinden, um beispielsweise meine Nginx-basierten Dienste bereitzustellen. Ich möchte nicht manuell eine Verbindung entweder zu manager0
oder manager1
je nachdem, welche die primäre in jedem Fall ist, möchte ich einen einzigen Endpunkt für den gesamten Cluster verwenden. Also:
Wie verwende ich Consul DNS-Auflösung, um auf den richtigen Swarm-Manager mit einem einzigen Endpunkt zu zeigen? Zum Beispiel:
docker -H tcp://swarm.cluster.example.com:3376 version
statt entweder:
docker -H tcp://manager0:3376 version
oder
docker -H tcp://manager1:3376 version
Tipp: Durch Hinzufügen des zweiten Hosts reduzieren Sie die Fehlertoleranz. Das liegt daran, dass die verteilten Konfigurationstools ein Quorum erfordern oder mehr als 50% der Knoten verfügbar sein müssen. Wenn also ein Host ausfällt, hat das andere nicht mehr das Quorum zu operieren. Sie benötigen mindestens 3 Hosts, um einen ausgefallenen Host zu unterstützen. – BMitch
Wenn Sie jetzt einen neuen Schwarm entwickeln, würde ich die 1.12-Route gehen, die neuen Befehle "docker swarm" und "docker service" entfernen viele der Herausforderungen, die Sie hier zu lösen versuchen. – BMitch
Hallo @BMitch, vielen Dank für Ihren Vorschlag über die Route 1.12. Ich werde das für die Zukunft berücksichtigen! –