Docker-Schwarm für hohe Verfügbarkeit



In diesem Blog über Docker Swarm wird erläutert, wie Sie einen Cluster von Docker-Engines über den konfigurierten Docker Swarm einrichten können, um eine hohe Verfügbarkeit zu erzielen.

Was ist das wichtigste Merkmal einer webbasierten Anwendung? Es gibt viele, aber für mich hohe Verfügbarkeit ist das wichtigste. Das hilft uns Docker Swarm! Es hilft dabei, dass die Anwendung hoch verfügbar ist.

In meinem vorheriger Blog Ich erklärte, wie Docker Compose funktioniert. Dieser Blog über Docker Swarm ist eine Fortsetzung des früheren Blogs. Hier wurden die Vorteile der Verwendung von Docker Swarm für die Containerisierung von Anwendungen mit mehreren Containern erläutert.





In diesem Blog ist es nur eine Angular-Anwendung, die von Docker Swarm erstellt wird.
Hinweis : Die Methode zum Containerisieren der MEAN Stack-App ist dieselbe.

Also, was ist Docker Swarm?

Hafenschwarm ist eine Technik zum Erstellen und Verwalten eines Clusters von Docker-Motoren . Die Docker-Engines können auf verschiedenen Knoten gehostet werden, und diese Knoten, die sich an entfernten Standorten befinden, bilden a Cluster wenn im Schwarmmodus verbunden.



Warum Docker Swarm verwenden?

Aus bereits genannten Gründen! Erreichen hohe Verfügbarkeit Ohne Ausfallzeiten hat jeder Dienstleister Priorität. Wird Hochverfügbarkeit Ihre Kunden beeindrucken? Nun, sie werden nicht beeindruckt sein, wenn sie mit Ausfallzeiten konfrontiert sind. Das ist ein Kinderspiel.

Weitere Vorteile von Docker Swarm

Wie viele andere Dienste arbeitet Docker Swarm automatisch Lastverteilung für uns. Daher müssen DevOps-Ingenieure keine Verarbeitungsanforderungen an andere Knoten weiterleiten, wenn einer ausfällt. Der Manager des Clusters führt automatisch einen Lastausgleich für uns durch.

Dezentraler Zugang ist ein weiterer Vorteil. Was bedeutet das? Dies bedeutet, dass alle Knoten vom Manager aus leicht zugänglich sind. Der Manager fordert die Knoten außerdem regelmäßig auf und verfolgt deren Zustand / Status, um Ausfallzeiten zu bewältigen. Knoten können jedoch nicht auf die in anderen Knoten / Managern ausgeführten Dienste zugreifen oder diese verfolgen.



Sie können die Nr. Überprüfen. von Containern, die in einem Knoten ausgeführt werden, vergrößern Das Nein. von Behältern oder herunterskalieren Das Nein. basierend auf unserer Anforderung, indem Sie nur einen einzigen Befehl ausführen.

Auch nach der Bereitstellung einer Anwendung können wir Probleme verursachen rollierende Updates und stellen Sie sicher, dass CI (Continuous Integration) erreicht wird. Rollende Updates werden an einen Knoten nach dem anderen ausgegeben, um sicherzustellen, dass keine Ausfallzeiten auftreten und die Last auf andere Knoten im Cluster verteilt wird.

Also, was kommt als nächstes? Das Offensichtliche tun. Beginnen Sie mit Docker Swarm, wenn Sie bereits an Docker gearbeitet haben oder wenn Ihre Organisation einen zuverlässigen Webdienst containerisieren möchte.

Hinweis : Docker-Engines werden auf unabhängigen Hosts / Servern oder auf mehreren VMs in einem Host installiert.

Erste Schritte mit dem Schwarmmodus

Docker Swarm wird vom Manager initiiert, oder lassen Sie es mich so sagen, die Instanz, die den Swarm-Cluster startet, wird zum Manager. Der Befehl zum Starten des Clusters lautet:

$ docker swarm init --advertise-addr IP-Adresse

Hier wird das Flag '–advertise-addr' verwendet, um sich bei anderen Knoten zu bewerben, die dem Cluster beitreten möchten. Die IP-Adresse des Managers muss zusammen mit dem Flag angegeben werden. Unten sehen Sie den Beispiel-Screenshot.

Docker Init Befehl - Docker Schwarm - Edureka

Wenn der Schwarmcluster initiiert wird, wird am Ende des Managers ein Token generiert. Dieses Token muss von anderen Knoten verwendet werden, um dem Schwarmcluster beizutreten.

Wie ist es genau? Kopieren Sie das gesamte Token, das in der Docker-Engine des Managers generiert wurde, fügen Sie es in die Docker-Engine des Knotens ein und führen Sie es aus. Der hervorgehobene Teil des obigen Screenshots ist ein Token. Wenn das Token an einem Arbeitsknoten ausgeführt wird, sieht es wie im folgenden Screenshot aus.

Jeder Knoten, der dem Cluster beitritt, kann später zu einem Manager befördert werden. Wenn Sie möchten, dass eine Docker-Engine als Manager beitritt, führen Sie den folgenden Befehl am Ende des Managers aus:

$ Docker Swarm Join-Token-Manager

Wenn Sie zu einem späteren Zeitpunkt möchten, dass das Token für einen Knoten dem Cluster beitritt, führen Sie den folgenden Befehl aus:

$ Docker-Schwarm-Join-Token-Knoten

Führen Sie das Token an jedem gewünschten Knoten aus, um dem Cluster beizutreten. Wenn alles erledigt ist, können Sie einen Docker-Knotenlistenbefehl ausführen, um zu überprüfen, wie viele Knoten zusammen mit ihrem Status dem Cluster beigetreten sind. Der Befehl lautet:

$ docker node ls

Der Screenshot ist unten:

Erstellen eines Docker-Images für Angular App

Wenn alles in Ordnung ist, können wir unseren Swarm-Service starten, sofern das Docker-Image erstellt wurde. Das Docker-Image kann aus der Docker-Datei erstellt werden. Die Docker-Datei, die zum Erstellen der Anwendungen verwendet wird, ist unten aufgeführt:

VON Knoten: 6 RUN mkdir -p / usr / src / app WORKDIR / usr / src / app KOPIEREN package.json / usr / src / app RUN npm cache sauber RUN npm install COPY. / usr / src / app EXPOSE 4200 CMD ['npm', 'start']

Die Docker-Datei wird verwendet, um eine Reihe von Befehlen zusammen auszuführen, um ein benutzerdefiniertes Docker-Image aus einem Basis-Image zu erstellen. Wie Sie sehen können, ist das von mir verwendete Basisbild 'Knoten: 6'. NodeJS ist das Image I von Docker Hub, das mit Version 6 gekennzeichnet ist.

Ich erstelle dann ein neues Docker-Verzeichnis im Container und mache es zum Arbeitsverzeichnis in meinem Container.

Ich kopiere die Datei 'package.json' von meinem lokalen Computer in das Arbeitsverzeichnis des Containers. Ich gebe dann die Befehle 'RUN npm cache clean' und 'RUN npm install' an. npm installieren Der Befehl lädt die Version der in der Datei package.json genannten Abhängigkeiten herunter.

Ich kopiere dann alle Projektcodes vom lokalen Computer in den Container, stelle die Portnummer 4200 für den Zugriff auf die Angular-Anwendung im Browser bereit und gebe schließlich den Befehl npm start an, der die Anwendung containerisiert.

Führen Sie nun den folgenden Befehl aus, um das Docker-Image basierend auf dieser Docker-Datei zu erstellen:

Bereichsoperator c ++
$ docker build -t eckiges Bild.

Hinweis: Die Docker-Images müssen in allen Knoten im Cluster erstellt werden. Ohne sie können Container nicht in anderen Docker-Engines gedreht werden.

Starten des Docker Swarm-Dienstes

Da unser Docker-Image erstellt wurde, können wir aus diesem Image einen Container drehen. Aber wir werden etwas besseres tun: Erstellen Sie daraus einen Docker Swarm-Dienst. Der Befehl zum Erstellen eines Schwarmdienstes lautet:

$ docker service create --name 'Angular-App-Container' -p 4200: 4200 Angular-Image

Hier wird das Flag 'Name' verwendet, um meinem Dienst einen Namen zu geben, und das Flag 'p' wird verwendet, um den Container-Port dem Host-Port auszusetzen. In der Datei package.json habe ich den Container-Port angegeben, auf dem die Angular-App gehostet werden soll. Mit dem 4200 in diesem Befehl können Sie den Port 4200 des Containers dem Port 4200 des Hosts zuordnen. 'Angular-Image' ist der Name des zuvor erstellten Images.

Merken : Wenn wir einen Dienst erstellen, kann er auf jeder Docker-Engine im Cluster gehostet werden. Der Manager des Schwarms entscheidet, wo er gehostet wird. Unabhängig davon, auf welchem ​​Knoten sie gehostet wird, kann auf die Anwendung auf localhost: 4200 von jedem der im Cluster verbundenen Knoten aus zugegriffen werden.

Wie ist das möglich? Weil Swarm die Portnummern intern verfügbar macht, auf die jeder andere Knoten im Cluster zugreifen kann. Das heißt, Port-Nr. 4200 auf einem beliebigen Knoten / Manager im Cluster würde die Angular-Anwendung rendern.

Was jetzt? Ist der Container aktiv?

Sie können überprüfen, ob der Dienst containerisiert ist, indem Sie den Befehl docker service list ausführen. Es kann jedoch eine Minute dauern, bis der Container bereitgestellt ist. Unten ist der Befehl:

$ docker service ls

Dieser Befehl listet alle vom Swarm-Cluster verwalteten Dienste auf. In unserem Fall sollte ein aktiver Container angezeigt werden. Schauen Sie sich den folgenden Screenshot als Referenz an.

Hier gibt 'REPLICAS = 1/1' an, dass sich im Cluster ein einziger 'Dienst' dieses Containers befindet. Und 'MODE = repliziert' gibt an, dass der Dienst auf allen Knoten im Cluster repliziert wird.

Um festzustellen, auf welchem ​​Knoten / Manager die App gehostet wird, können wir den Befehl Befehl Docker Service ps gefolgt vom Containernamen ausführen. Der Befehl lautet:

$ docker service ps Angular-App-Container

Der Screenshot dafür ist unten.

Hier werden Details zu dem Knoten erwähnt, auf dem die Anwendung gehostet wird, sowie der Befehl zum Starten des Dienstes.

Der Befehl 'Docker ps' beleuchtet die Details des aktiven Containers. Der Befehl lautet:

$ docker ps

Schauen Sie sich den folgenden Screenshot als Referenz an.

Dieser Befehl funktioniert jedoch nur auf dem Cluster-Manager und dem Knoten, auf dem der Dienst tatsächlich gehostet wird.

Führen Sie den Befehl node list aus, um zu überprüfen, wie viele Knoten ausgeführt werden. Befehl ist:

$ docker node ls

Führen Sie den Befehl node ps aus, um die auf einem bestimmten Host ausgeführten Container zu überprüfen. Befehl ist:

$ docker node ps

Wenn Sie sich erinnern, habe ich bereits erwähnt, dass der Dienst derzeit im replizierten Modus ausgeführt wird. Dies bedeutet, dass der Dienst auf allen Knoten in den Clustern repliziert wird. Glaubst du, es gibt eine Alternative?

Absolut! Es gibt so etwas wie Global MODE. In diesem Modus wird ein Dienst dieses Containers an jedem einzelnen / Manager im Cluster ausgeführt. Denken Sie daran, den aktuellen Dienst / Container zu stoppen, bevor Sie einen anderen Satz von Containern drehen.

Der Befehl dafür lautet:

$ docker service rm Angular-App-Container

Der Befehl zum Drehen des Containers im globalen Modus lautet:

$ docker service create --name 'Angular-App-Container' -p 4200: 4200 --mode globales Winkelbild

Dies würde 3 Dienste auf den 3 Knoten in unserem Cluster erstellen. Sie können dies überprüfen, indem Sie den Befehl docker service list ausführen. Der Screenshot davon ist unten.

Wenn der Docker-Dienst ps-Befehl ausgeführt wird, wird Folgendes angezeigt:

Wie Sie sehen können, heißt es, dass der Modus repliziert wird und die Replikate dieses Containers 3 sind. Jetzt kommt der beste Teil dieses Blogs.

Um zwei Replikate der Dienste zwischen den drei Containern auszuführen, können wir das Replikat-Flag verwenden. Sehen Sie sich den folgenden Befehl an:

$ docker service create --name 'Angular-App-Container' -p 4200: 4200 --replicas = 2 Angular-Image

Sie werden feststellen, dass diese beiden Dienste zwischen den drei Knoten im Cluster verteilt sind. Führen Sie den Befehl docker service process aus, um zu überprüfen, auf welchen Knoten die Container aktiv sind. Schauen Sie sich den folgenden Screenshot als Referenz an. Die Container sind in einem Manager-Knoten und einem Worker-Knoten aktiv.

Über den Worker-Knoten können Sie überprüfen, ob der Container ausgeführt wird, indem Sie den Befehl 'Docker ps' ausführen.

Docker Swarm für hohe Verfügbarkeit

Um nun tatsächlich zu überprüfen, ob in unserem Cluster eine hohe Verfügbarkeit besteht, müssen wir ein Szenario erleben, in dem einer der Knoten ausfällt und andere Knoten im Cluster dies wieder wettmachen. Wir können dieses Szenario bewirken, indem wir den Container mit diesem Befehl manuell von einem der Knoten aus stoppen:

$ docker stop Angular-App-Container

Führen Sie den obigen Befehl auf dem Knoten aus: Worker-1, auf dem der Container ausgeführt wird.Führen Sie im Manager den folgenden Befehl aus:

$ docker service ps Angular-App-Container

Sie werden jetzt feststellen, dass der Container jetzt im Knoten Worker-2 und Manager ausgeführt wird. Es wurde jedoch vom Knoten: Worker-1 heruntergefahren. Das gleiche ist aus dem folgenden Screenshot ersichtlich.

Das ist wie Docker Hochverfügbarkeit erreicht. ichObwohl der Container in Worker-1 inaktiv ist, kann die Anwendung unter Portnummer 4200 auf diesem Worker-Knoten gerendert werden. Dies liegt daran, dass es intern mit anderen Knoten im Cluster verbunden ist und die Anwendung im Browser rendern kann.

Hochverfügbarkeit nach Skalierung der Dienste

Ob im replizierten oder im globalen Modus, wir können die Anzahl der in unserem Cluster ausgeführten Dienste erhöhen. Und auch nach der Skalierung können wir die hohe Verfügbarkeit beibehalten. Genial, nicht wahr?

Java, wie man ein Array von Objekten erstellt

Kommen wir jedoch zu unserem Punkt zurück und lassen Sie uns sehen, wie einfach es ist, die Anzahl der Dienste in unserem Cluster zu erhöhen. Angenommen, wir haben entweder 2 oder 3 Replikate in unserem Cluster, lassen Sie uns die Dienste auf 5 skalieren, indem Sie nur einen einzigen Befehl ausführen. Der Befehl lautet:

$ Docker-Service-Skala Angular-App-Container = 5

Der Screenshot davon ist unten.

Wenn Sie den Befehl docker service list ausführen, können Sie feststellen, dass die Anzahl der Replikate jetzt 5 beträgt. Wenn Sie den Befehl docker service ps zusammen mit dem Dienstnamen ausführen, können Sie sehen, wie die 5 Dienste auf die drei Knoten verteilt und verteilt werden . Befehle sind:

$ docker service ls $ docker service ps Angular-App-Container

Und schließlich können wir in einem Docker Swarm-Setup den Manager vom Hosten einer beliebigen Anwendung abhalten, wenn Sie nicht möchten, dass Ihr Manager an dem Verfahren teilnimmt und ihn nur für die Verwaltung der Prozesse beschäftigt. Weil es in der Welt so funktioniert, nicht wahr? Die Manager sind nur für die Verwaltung anderer Arbeitnehmer. Wie auch immer, der Befehl dazu lautet:

$ Docker Node Update - Verfügbarkeit Drain Manager-1

Sie können überprüfen, ob der Manager jetzt am Cluster teilnimmt, indem Sie den Befehl Docker Node List und den Befehl Docker Service Ps ausführen:

$ docker node ls $ docker service ps Angular-App-Container

Sie können jetzt feststellen, dass die Containerdienste zwischen Worker-Knoten aufgeteilt wurden und der Manager-Knoten tatsächlich aus der Containerisierung eines Dienstes entleert wurde. Der Screenshot ist unten.

Damit ist dieser Blog auf Docker Swarm beendet. Ich hoffe, dieser Blog hat erklärt, wie wichtig es ist, den Schwarmmodus zu implementieren, um eine hohe Verfügbarkeit zu erreichen. Weitere Blogs finden Sie in dieser Docker-Tutorialserie.

Alternativ können Sie sich das folgende Video ansehen, um zu verstehen, wie Docker Swarm funktioniert. Alle oben erläuterten Konzepte wurden im Video behandelt.

Docker Swarm für hohe Verfügbarkeit | Docker Tutorial | DevOps Tutorial

Nachdem Sie Docker kennengelernt haben, lesen Sie die von Edureka, einem vertrauenswürdigen Online-Lernunternehmen mit einem Netzwerk von mehr als 250.000 zufriedenen Lernenden auf der ganzen Welt. Dieser Edureka Docker-Zertifizierungskurs hilft den Lernenden, Kenntnisse in der Implementierung und Beherrschung von Docker zu erlangen.

Hast du eine Frage an uns? Bitte erwähnen Sie es in den Kommentaren und wir werden uns bei Ihnen melden.