Zusammenfassung der Updates und gefundenen Probleme des Docker Consul-Containerdienstes

Zusammenfassung der Updates und gefundenen Probleme des Docker Consul-Containerdienstes

docker run -d \
--name=Registrator \
--net=Host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=immer \
gliderlabs/registrator:latest \
-ip=192.168.80.20 \
Konsul://192.168.80.10:8500

1. Container-Service-Update und Erkennung von Docker Consul

1. Was ist Serviceregistrierung und -erkennung?

Die Dienstregistrierung und -erkennung sind wichtige Komponenten, die in der Microservices-Architektur unverzichtbar sind. Anfangs waren alle Dienste Einzelknoten ohne Garantie für hohe Verfügbarkeit und ohne Berücksichtigung des Dienstdrucks. Dienstaufrufe wurden einfach über den Schnittstellenzugriff getätigt. Erst mit dem Aufkommen einer verteilten Architektur mit mehreren Knoten bestand die anfängliche Lösung darin, die Last des Service-Front-Ends auszugleichen. Auf diese Weise muss das Front-End den Netzwerkstandort aller Back-End-Dienste kennen und diese in der Konfigurationsdatei konfigurieren. Hier gibt es mehrere Probleme:

  • Wenn Sie den Back-End-Dienst AN aufrufen müssen, müssen Sie den Netzwerkstandort von N-Diensten konfigurieren, was sehr mühsam ist.
  • Änderungen am Netzwerkstandort des Backend-Dienstes erfordern Änderungen an der Konfiguration jedes Anrufers

Da diese Probleme bestehen, stellen Dienstregistrierung und -erkennung die Lösung für diese Probleme dar. Die Backend-Dienste A–N können ihre aktuellen Netzwerkstandorte beim Diensterkennungsmodul registrieren und die Diensterkennung wird in der Form Kv aufgezeichnet, wobei K im Allgemeinen der Dienstname und v IP:PORT ist. Das Service-Discovery-Modul führt regelmäßig Integritätsprüfungen durch und prüft, ob auf diese Backend-Dienste zugegriffen werden kann. Wenn das Front-End den Back-End-Dienst AN aufruft, fragt es im Diensterkennungsmodul nach dem Netzwerkstandort und ruft dann die Dienste auf. Dieser Ansatz kann die oben genannten Probleme lösen. Das Front-End muss den Netzwerkstandort dieser Back-End-Dienste überhaupt nicht aufzeichnen, und das Front-End und das Back-End sind vollständig entkoppelt.

Bildbeschreibung hier einfügen

2. Was ist Konsul?

Bildbeschreibung hier einfügen

  • Consul ist eine von Google in der Programmiersprache Go entwickelte Open-Source-Service-Management-Software. Unterstützt mehrere Rechenzentren, verteilte Hochverfügbarkeit, Diensterkennung und gemeinsame Nutzung von Konfigurationen. Um eine hohe Verfügbarkeit der Dienste zu gewährleisten, wird der Raft-Algorithmus verwendet. Es verfügt über ein integriertes Framework für die Dienstregistrierung und -erkennung, eine verteilte Konsistenzprotokollimplementierung, eine Integritätsprüfung, eine Schlüssel-/Wertspeicherung und Lösungen für mehrere Datencenter und ist nicht mehr auf andere Tools (wie ZooKeeper usw.) angewiesen. Der Dienst lässt sich mit nur einem ausführbaren Binärpaket einfach bereitstellen. Jeder Knoten muss den Agenten ausführen, der über zwei Betriebsmodi verfügt: Server und Client. Die offizielle Empfehlung lautet, drei bis fünf Serverknoten pro Rechenzentrum einzusetzen, um die Datensicherheit zu gewährleisten und sicherzustellen, dass die Wahl des Serverleiters korrekt durchgeführt werden kann.
  • Im Client-Modus werden alle beim aktuellen Knoten registrierten Dienste an den Serverknoten weitergeleitet und diese Informationen bleiben nicht gespeichert.
  • Im Servermodus sind die Funktionen denen im Clientmodus ähnlich. Der einzige Unterschied besteht darin, dass alle Informationen lokal gespeichert werden, sodass die Informationen im Fehlerfall erhalten bleiben.
  • Der Server-Leader ist der Anführer aller Serverknoten. Im Gegensatz zu anderen Serverknoten ist er für die Synchronisierung der Registrierungsinformationen mit anderen Serverknoten verantwortlich und ist außerdem für die Integritätsüberwachung jedes Knotens verantwortlich.

Bildbeschreibung hier einfügen

3. Einige wichtige Funktionen von Consul

Dienstregistrierung und -erkennung

  • Consul vereinfacht die Dienstregistrierung und -erkennung über DNS- oder HTTP-Schnittstellen. Einige externe Dienste, wie sie beispielsweise von SaaS bereitgestellt werden, können ebenfalls auf die gleiche Weise registriert werden.

Gesundheitscheck:

  • Durch Integritätsprüfungen kann Consul schnell auf Vorgänge im Cluster aufmerksam machen. Durch die Integration mit der Diensterkennung kann die Weiterleitung von Diensten an ausgefallene Dienste verhindert werden.

Schlüssel-/Wertspeicher:

  • Ein System zum Speichern dynamischer Konfigurationen. Bietet eine einfache HTTP-Schnittstelle, die überall bedient werden kann. Mehrere Rechenzentren, die eine beliebige Anzahl Regionen ohne komplexe Konfiguration unterstützen.
  • Die Installation von Consul dient der Dienstregistrierung, d. h. einige Informationen des Containers selbst werden in Consul registriert, und andere Programme können die relevanten registrierten Dienstinformationen über Consul abrufen. Dies ist die Dienstregistrierung und -erkennung.

Bildbeschreibung hier einfügen

2. Konsul-Bereitstellung

Bildbeschreibung hier einfügen

Umgebungsvorbereitung

Servertyp System IP-Adresse Zu installierende Komponenten
Konsul-Server CentOS7.4 (64 Bit) 192.168.80.10 Führen Sie den Consul-Dienst, den Nginx-Dienst und den Consul-Template-Daemon aus.
Registrator-Server CentOS7.4 (64 Bit) 192.168.80.20 Führen Sie den Registrator-Container und den Nginx-Dienst aus

Deaktivieren Sie Firewall und SElinux auf allen Servern

systemctl stoppe Firewall
0

Schritt 1: Die Vorgänge auf dem Konsulserver sind wie folgt

1. Konsulat einrichten

mkdir /opt/consul/
cd /opt/consul/
rz -E #Importieren Sie das folgende komprimierte Paket consul_0.9.2_linux_amd64.zip
entpacken Sie consul_0.9.2_linux_amd64.zip 
mv consul /usr/local/bin/ 

Bildbeschreibung hier einfügen

2. Richten Sie den Proxy ein und starten Sie den Consul-Server im Hintergrund

Konsulagent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.80.10 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &

netstat -napt | grep konsul
Konsul-Mitglieder
Konsulinfo | Grep-Leiter 

Bildbeschreibung hier einfügen

Die zugehörigen Optionen werden im Folgenden beschrieben:

Optionen veranschaulichen
-Als Server starten Der Standardwert ist „Client“.
-Bootstrap Wird verwendet, um zu steuern, ob sich ein Server im Bootstrap-Modus befindet. In einem Rechenzentrum kann sich nur ein Server im Bootstrap-Modus befinden. Wenn sich ein Server im Bootstrap-Modus befindet, kann er sich selbst zum Server-Leader wählen.
-bootstrap-erwartet=2 Die vom Cluster benötigte Mindestanzahl an Servern. Wenn die Zahl niedriger ist, schlägt der Cluster fehl.
-Benutzeroberfläche Geben Sie an, dass die UI-Schnittstelle geöffnet werden soll, sodass Sie über eine Adresse wie http://localhost:8500/ui auf die Web-UI-Schnittstelle von Consul zugreifen können.
-data-dir Gibt das Datenspeicherjournal an.
-binden Gibt die im Cluster verwendete Kommunikationsadresse an. Alle Knoten im Cluster müssen unter dieser Adresse erreichbar sein. Der Standardwert ist 0.0.0.0.
-Kunde Gibt die Clientadresse an, an die Consul gebunden ist. Diese Adresse stellt HTTP, DNS, RPC und andere Dienste bereit. Der Standardwert ist 127.0.0.1.
-Knoten Der Name des Knotens im Cluster muss in einem Cluster eindeutig sein. Der Standardwert ist der Hostname des Knotens.
-Rechenzentrum Geben Sie den Namen des Rechenzentrums an. Der Standardwert ist dc1.

1) Mitgliedsstatus und Clusterstatus prüfen

Cluster-Server-Mitglieder anzeigen curl 127.0.0.1:8500/v1/status/peers
Cluster Raf-Leader curl 127.0.0.1:8500/v1/status/leader
Alle registrierten Dienste curl 127.0.0.1:8500/v1/catalog/services
Nginx-Dienstinformationen anzeigen curl 127.0.0.1:8500/v1/catalog/nginx
Clusterknotendetails curl 127.0.0.1:8500/v1/catalog/nodes 

Bildbeschreibung hier einfügen

Schritt 2: Bereitstellung des Registrators 192.168.80.20. Die Vorgehensweise ist wie folgt:

4. Der Containerdienst tritt automatisch dem Nginx-Cluster bei

  • Gliderlabs/Registrator kann den Laufstatus des Containers prüfen und ihn automatisch registrieren. Außerdem kann er den Docker-Containerdienst beim Dienstkonfigurationscenter abmelden.
  • Unterstützt derzeit Consul, Etcd und SkyDNS2.

–net=Host Stellen Sie den laufenden Docker-Container auf den Host-Netzwerkmodus ein.
-v /var/run/docker.sock:/tmp/docker.sock Mounten Sie den Unix-Domänen-Socket, auf dem der Docker-Daemon des Hosts standardmäßig lauscht, in den Container.
--restart=immer Stellen Sie den Container so ein, dass er nach dem Beenden immer neu gestartet wird.
–ip Wir haben gerade das Netzwerk auf den Hostmodus eingestellt, also geben wir die IP als IP der Hostmaschine an.
Konsul Geben Sie die IP und den Port des Consul-Servers an.

Bildbeschreibung hier einfügen

5. Installieren Sie Nginx- und httpd-Testbilder

docker run -itd -p:81:80 --name test-01 -h test01 nginx
docker run -itd -p:82:80 --name test-02 -h test02 nginx
docker run -itd -p:83:80 --name test-03 -h test03 httpd
docker run -itd -p:84:80 --name test-04 -h test04 httpd 

Bildbeschreibung hier einfügen

6. Überprüfen Sie, ob das Bild auf dem Konsulserver registriert ist

Bildbeschreibung hier einfügen

7. Überprüfen Sie in einem Webbrowser, ob die Registrierung diese Dienste erkannt hat.

Bildbeschreibung hier einfügen

Bildbeschreibung hier einfügen

3. Konfigurieren Sie die Vorlage so, dass sie automatisch aktualisiert wird

  • Consul-Template ist eine auf Consul basierende Anwendung, die Konfigurationsdateien automatisch ersetzt. Consul-Template ist ein Daemon-Prozess, der Consul-Clusterinformationen in Echtzeit abfragt und eine beliebige Anzahl angegebener Vorlagen im Dateisystem aktualisiert, um Konfigurationsdateien zu generieren. Nachdem die Aktualisierung abgeschlossen ist, können Sie den Shell-Befehl ausführen, um den Aktualisierungsvorgang durchzuführen und Nginx neu zu laden.
  • Consul-Template kann den Servicekatalog, Schlüssel, Schlüsselwerte usw. in Consul abfragen. Aufgrund dieser leistungsstarken Abstraktions- und Abfragesprachenvorlagen eignet sich Consul-Template besonders für die dynamische Erstellung von Konfigurationsdateien. Beispiel: Erstellen Sie Apache/Nginx Proxy Balancer, Haproxy Backends usw.

1. Bereiten Sie die Nginx-Vorlagendatei vor

Ausführen von Vorgängen auf dem Consul-Server
1) Fügen Sie die Konfigurationsdatei nginx.ctmpl hinzu

[root@consul consul]# pwd #Derzeit im Verzeichnis /opt/consul /opt/consul
[root@consul konsul]# vim nginx.ctmpl

Upstream nginx_slb {
 {{Bereichsdienst "nginx"}}
  Server {{.Adresse}}:{{.Port}};
  {{Ende}}
}

Server {
 hör zu 8000;
 Servername localhost 192.168.80.10;
 Zugriffsprotokoll: /var/log/nginx/clj.com-access.log;
 Index Index.html Index.php;
 Standort / {
        Proxy_Set_Header HOST $Host;
        Proxy_Set_Header X-Real-IP $Remote_Addr;
        proxy_set_header Client-IP $remote_addr;
        proxy_set_header X-Weitergeleitet-Für $proxy_add_x_forwarded_for;
        Proxy-Passwort http://nginx_slb;
  }     
} 

Bildbeschreibung hier einfügen

2) Importieren Sie das Nginx-Installationspaket und entpacken Sie es

CD ..
rz -E #Laden Sie das komprimierte Nginx-Paket wie folgt hoch:
nginx-1.12.0.tar.gz
tar zxvf nginx-1.12.0.tar.gz #Dekomprimieren 

Bildbeschreibung hier einfügen

3) Erstellen Sie einen Nginx-Programmbenutzer und installieren Sie abhängige Pakete

Benutzeradd -M -s /sbin/nologin nginx
yum -y installiere gcc pcre-devel zlib-devel gcc-c++ make 

Bildbeschreibung hier einfügen

4) Optimieren Sie den Pfad nach dem Kompilieren und Installieren

cd nginx-1.12.0/
 ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ 

Bildbeschreibung hier einfügen

Bildbeschreibung hier einfügen

5) Ändern Sie die Nginx-Konfigurationsdatei

cd /usr/local/nginx/conf/
vim nginx.conf
http {
    include vhost/*.conf; #Fügen Sie diese Konfiguration in Zeile 19 hinzu 

Bildbeschreibung hier einfügen

6) Erstellen Sie vhost und ein Protokollverzeichnis für den Nginx-Dienst

mkdir vhost
mkdir /var/log/nginx
nginx #Starten Sie nginx
netstat -natp | grep :80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 59892/nginx: Master 

Bildbeschreibung hier einfügen

7) Übergeben Sie das komprimierte Paket consul-template_0.19.3_linux_amd64.zip und entpacken Sie es

cd /opt/
rz -E # Übergeben Sie die Vorlagendatei wie folgt consul-template_0.19.3_linux_amd64.zip
entpacken Sie consul-template_0.19.3_linux_amd64.zip
mv consul-template /usr/local/bin/ 

Bildbeschreibung hier einfügen

8) Starten Sie Consul-Template im Vordergrund (oder im Hintergrund).

Konsul-Vorlage --consul-addr 192.168.80.10:8500 \
--template "/opt/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/clj.conf:/usr/local/nginx/sbin/nginx -s neu laden" \
--log-level=Informationen 

Bildbeschreibung hier einfügen

9) Öffnen Sie ein neues Terminal, um zu prüfen, ob die Konfigurationsdatei generiert wird

cd /usr/local/nginx/conf/vhost/
vim clj.conf 

Bildbeschreibung hier einfügen

10) Fügen Sie einen Nginx-Container mit Port 85 auf dem Registrator-Server hinzu

docker run -itd -p:85:80 --name test-05 -h test05 nginx 

Bildbeschreibung hier einfügen

11) Überprüfen Sie, ob sich die Vorlagenserviceseite des Konsulservers geändert hat

Bildbeschreibung hier einfügen

12) Überprüfen Sie die Konfigurationsdatei erneut (Sie können sehen, dass ein Port 85 hinzugefügt wurde. Wenn Sie einen Container mit Docker Stop stoppen, ändert sich die Konfigurationsdatei entsprechend).

Bildbeschreibung hier einfügen

13) Ändern Sie die Standarddatei html.index im Container-Site-Verzeichnis von nginx

Bildbeschreibung hier einfügen

14) Zugriffstest im Browser

Bildbeschreibung hier einfügen

2. Consul-Mehrknotenkonfiguration

1) Richten Sie zuerst den Konsuldienst ein

rz -y #Importieren Sie das Consul-Komprimierungspaket consul_0.9.2_linux_amd64.zip             
mv consul /usr/local/bin/ 

Bildbeschreibung hier einfügen

2) Fügen Sie dem vorhandenen Cluster einen Server mit einer vorhandenen Docker-Umgebung hinzu

Konsulagent \
-server \
--bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.80.30 \
-client=0.0.0.0 \
-node=consul-server02 \
-enable-script-checks=true \
-datacenter=dc1 \
-join 192.168.80.10 &> /var/log/consul.log &

--enable-script-checks=true Stellen Sie den verfügbaren Prüfdienst ein
-Rechenzentrum Name des Rechenzentrums
-verbinden Einem vorhandenen Cluster beitreten

--enable-script-checks=true Setzen Sie den Prüfdienst auf available -datacenter data center name -join, um dem vorhandenen Cluster beizutreten

Bildbeschreibung hier einfügen

3) Ansicht auf dem Consul-Server

Bildbeschreibung hier einfügen

Dies ist das Ende dieses Artikels über Updates und Entdeckungen des Docker-Consul-Containerdienstes. Weitere relevante Inhalte zum Docker-Consul-Container finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Beispiel für die Verwendung von Docker Compose zum Erstellen einer Consul-Clusterumgebung
  • Analyse des Consul-Konfigurationsprozesses für die Docker-Bereitstellung

<<:  JavaScript-Closures erklärt

>>:  Eine kurze Analyse des Unterschieds zwischen und und wo in der MySQL-Verbindungsabfrage

Artikel empfehlen

Zusammenfassung der grundlegenden Verwendung von JS-Arrays

Vorwort Arrays sind eine spezielle Art von Objekt...

Verwenden Sie semantische Tags, um Ihr HTML kompatibel mit IE6,7,8 zu schreiben

HTML5 fügt weitere semantische Tags hinzu, wie et...

Zusammenfassung der praktischen Methoden von CSS3 (empfohlen)

1. Abgerundeter Rand: CSS- CodeInhalt in die Zwis...

Docker stellt über einen Port eine Verbindung zu einem Container her

Docker-Container-Verbindung 1. Netzwerk-Port-Mapp...

Detaillierte Analyse von Absturzfällen bei MySQL-Instanzen

[Problembeschreibung] Unsere Produktionsumgebung ...

Umfassende Analyse von Prototypen, Prototypobjekten und Prototypketten in js

Inhaltsverzeichnis Prototypen verstehen Prototypo...

Detaillierte Erklärung der MySql-Installation und des Logins

Überprüfen Sie, ob MySQL bereits unter Linux inst...

Zusammenfassung verschiedener Methoden für Vue zum Erreichen dynamischer Stile

Inhaltsverzeichnis 1. Ternäres Operatorurteil 2. ...

Tutorial zur Installation und Kennwortkonfiguration von MySQL 5.7.21

Tutorial zur Installation und Kennworteinstellung...