Docker Consul-Übersicht und Schritte zum Erstellen einer Clusterumgebung (grafische Erklärung)

Docker Consul-Übersicht und Schritte zum Erstellen einer Clusterumgebung (grafische Erklärung)

1. Übersicht über Docker Consul

Aktualisierung und Erkennung des Containerdienstes: Erst erkennen und dann aktualisieren. Was erkannt wird, ist die Änderung des Containers auf dem Backend-Knoten (Registrator), und was aktualisiert wird, ist die Nginx-Konfigurationsdatei (Agent).

Registrator: Dies ist der von Consul im Docker-Container installierte Spion. Er wird verwendet, um die Änderungen von Containern auf dem Überwachungsknoten zu überwachen (Erhöhung oder Verringerung oder Ausfallzeit). Sobald eine Änderung vorliegt, wird diese Information mitgeteilt und auf dem Consul-Server registriert (unter Verwendung von Callbacks und Coroutinen, sodass Verzögerung und Ressourcenverbrauch sehr gering sind). Sobald sich die Registrierungsliste ändert, teilt der Consul-Server dem Agenten die Registrierungsinformationen mit

Agent: Wird zum Steuern der Konsul-Vorlage verwendet. Verwenden Sie die Vorlagenkomponente zum Herstellen einer Verbindung mit nginx.conf. Die Vorlage ist voller Variablen. Verwenden Sie Variablen zum Laden des Back-Ends. Nach der Registrierung beim Konsul-Server teilt der Server dem Agenten die Informationen mit. Der Agent und die Vorlage sind verbunden. Schreiben Sie in die Vorlage. Die Vorlage verfügt über einen Spiegel. Nach der Aktualisierung wird sie vom Front-End-nginx als Unterkonfigurationsdatei von nginx.conf erkannt. Der Konsul-Agent steuert das Neuladen und identifiziert die Änderungen in der Konfigurationsdatei nginx.conf, was dem Identifizieren des Back-End-Knotens entspricht, und kann seine eigenen Back-End-Ressourcen im Adresspool dynamisch anpassen.

markieren

Funktionen von Consul

  • Unterstützt Integritätsprüfungen und ermöglicht die Speicherung von Schlüssel-Wert-Paaren
  • Basierend auf der Sprache Golong, hoch portierbar
  • Unterstützt ACL-Zugriffskontrolle

2. Erstellen Sie eine automatische Erkennung und eine hochverfügbare Docker-Servicearchitektur basierend auf Nginx und Consul

markieren

1. Projektanforderungen

  • Verwenden Sie Docker, um Consul, Consul-Vorlagen, Registrator und Nginx zu einer sinnvollen und skalierbaren Servicearchitektur zu kombinieren
  • Wenn Sie Dienste zu dieser Architektur hinzufügen oder daraus entfernen, müssen Sie keine Konfiguration neu schreiben oder Dienste neu starten. Alles kann normal ausgeführt werden, um einen automatisierten Betrieb und eine automatisierte Wartung zu erreichen.

2. Umweltvorbereitung

Gastgeber IP-Adresse Software, die installiert werden muss
Master-Knoten 192.168.126.11 docker-ce, Konsul, Konsul-Vorlage, Nginx
nginx 192.168.126.12 doker-ce

3. Bereitstellungsschritte

#Installieren Sie Docker-ce auf beiden Knoten. Denken Sie daran, die Firewall auszuschalten systemctl stop firewalld && systemctl disable firewalld
setenforce 0 && sed -i "s/SELINUX=*/SELINUX=disabled/g" /etc/selinux/config

① Stellen Sie Consul auf dem Masterknoten bereit

[root@xjj ~]# mkdir /consul
[root@xjj ~]# cd /consul/
[root@xjj Konsul]# rz 
[root@xjj Konsul]# ls
consul_0.9.2_linux_amd64.zip
[root@xjj consul]# unzip consul_0.9.2_linux_amd64.zip -d /usr/bin/
Archiv: consul_0.9.2_linux_amd64.zip
  aufblasen: /usr/bin/consul         
[root@xjj Konsul]# Konsul-Agent \
> -server \
> -bootstrap \
> -ui \
> -data-dir=/var/lib/consul-data \
> -bind=192.168.126.11 \
> -client=0.0.0.0 \
> -node=consul-server01 &> /var/log/consul.log &
[1] 100683
[root@xjj Konsul]# jobs -l
[1]+ 100683 Konsul-Agent wird ausgeführt -server -bootstrap -ui -data-dir=/var/lib/consul-data -bind=192.168.126.11 -client=0.0.0.0 -node=consul-server01 &>/var/log/consul.log &
[root@xjj consul]# Konsulmitglieder
Knoten Adresse Status Typ Build Protokoll DC
consul-server01 192.168.126.11:8301 aktiver Server 0.9.2 2 dc1
[root@xjj consul]# Konsulinfo|Grep-Leader
        Führer = wahr
        leader_addr = 192.168.126.11:8300
[root@xjj Konsul]# netstat -natp|grep 8500
tcp 0 0 127.0.0.1:34120 127.0.0.1:8500 ZEIT_WAIT -                   
tcp 0 0 127.0.0.1:34118 127.0.0.1:8500 ZEIT_WAIT -                   
tcp6 0 0 :::8500 :::* LISTEN 100683/Konsul 

Parameter

[root@xjj consul]# Consul-Agent \ #Agent einrichten> -server \ #Servicefunktion> -bootstrap \ #An der Wahl des Leiters teilnehmen> -ui \ #Webzugriffsschnittstelle bereitstellen> -data-dir=/var/lib/consul-data \ #Proxy-Speicherdatenverzeichnis bereitstellen> -bind=192.168.126.16 \ #Lokale Adresse binden> -client=0.0.0.0 \ #Clientadresse (alle)
> -node=consul-server01 &> /var/log/consul.log & #Definieren Sie den Knotennamen, geben Sie die Protokolle in das Protokoll aus und führen Sie sie in den Hintergrundjobs aus -l #Zeigen Sie die vom aktuellen Terminal in den Hintergrund geleistete Arbeit an und listen Sie die PID-Nummern der Prozess-Consul-Mitglieder auf #Clusterinformationen anzeigen consul info|grep leader #Verwaltungsinformationen anzeigen, Leader ist der Leader #Clusterinformationen können über die HTTP-API abgerufen werden:

curl 127.0.0.1:8500/v1/status/peers '//Clusterservermitglieder anzeigen'
curl 127.0.0.1:8500/v1/status/leader '//Cluster-Raf-Leader'
curl 127.0.0.1:8500/v1/catalog/services '//Alle registrierten Dienste'
curl 127.0.0.1:8500/v1/catalog/nginx '//Dienstinformationen (nginx) anzeigen'
curl 127.0.0.1:8500/v1/catalog/nodes '//Clusterknotendetails'

②Der Nginx-Server stellt eine Verbindung zum Konsul her und erstellt den Nginx-Containerdienst

[root@localhost ~]# docker run -d \
> --name=registrator \
> --net=Host \
> -v /var/run/docker.sock:/tmp/docker.sock \
> --restart=immer \
> gliderlabs/registrator:latest \
> -ip=192.168.126.12 \
> Konsul://192.168.126.11:8500
-----
Zusammenfassung: sha256:6e708681dd52e28f4f39d048ac75376c9a762c44b3d75b2824173f8364e52c10
Status: Neueres Image für gliderlabs/registrator:latest heruntergeladen
db4cb9d6a56ce8b9a2155b1113e48e6c974889cd4cca363b410c116b75be5d59
[root@localhost ~]# docker ps -a
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
db4cb9d6a56c gliderlabs/registrator:latest "/bin/registrator -i…" vor 5 Sekunden Up 5 Sekunden registrator

#Erstellen Sie einen Container, um zu testen, ob die Service-Erkennungsfunktion normal ist:

[root@localhost ~]# docker run -itd -p 81:80 --name xjj01 -h xcf01 nginx #-h Option gibt den angegebenen Host-Hostnamen an [root@localhost ~]# docker run -itd -p 82:80 --name xjj02 -h xcf02 nginx
[root@localhost ~]# docker run -itd -p 83:80 --name xjj03 -h xcf03 httpd
[root@localhost ~]# docker run -itd -p 84:80 --name xjj0 -h xcf04 httpd
[root@localhost ~]# docker ps -a
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
8940a9b03dbb httpd "httpd-foreground" vor 4 Sekunden Up 3 Sekunden 0.0.0.0:84->80/tcp, :::84->80/tcp xjj0
9ac4d089eb14 httpd "httpd-foreground" vor 39 Sekunden Aktiv seit 38 Sekunden 0.0.0.0:83->80/tcp, :::83->80/tcp xjj03
3d626fd61639 nginx "/docker-entrypoint.…" vor 25 Minuten Erstellt xjj02
263aa9deb346 nginx "/docker-entrypoint.…" vor 26 Minuten Aktiv seit 26 Minuten 0.0.0.0:81->80/tcp, :::81->80/tcp xjj01
db4cb9d6a56c gliderlabs/registrator:latest "/bin/registrator -i…" vor 29 Minuten Up 29 Minuten registrator


Browser-Zugriffstest: `192.168.126.11:8500`

markieren

[root@xjj consul]# curl 127.0.0.1:8500/v1/catalog/services
{"Konsul":[],"httpd":[],"nginx":[]}[root@xjj Konsul]# 

③Consul-Cluster fügt Consul-Template hinzu, um automatisches Container-Joining zu ermöglichen

Consul-Template ist ein Daemon, der Consul-Clusterinformationen in Echtzeit abfragt, eine beliebige Anzahl angegebener Vorlagen im Dateisystem aktualisiert, Konfigurationsdateien generiert und nach Abschluss der Aktualisierung das Serviceverzeichnis, den Schlüssel, die Schlüsselwerte usw. in Consul abfragen kann.

cd Konsul/
vim nginx.ctmpl

upstream http_backend {
 {{Bereichsdienst "nginx"}}
  Server {{.Adresse}}:{{.Port}};
  {{Ende}}
}

Server {
 hör 100 zu;
 Servername localhost 192.168.126.11;
 Zugriffsprotokoll: /var/log/nginx/lic.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://http_backend;
  }     
}
yum -y installiere gcc pcre-devel zlib-devel
rz nginx-1.12.2.tar.gz
tar zxvf nginx-1.12.2.tar.gz -C /opt
cd /opt/nginx-1.12.10

./configure --prefix=/usr/local/nginx

machen && machen installieren

--
vim /usr/local/nginx/conf/nginx.conf
Nr. 19 include vhost/*.conf; #19 Zeile hinzufügen, virtuelles Hostverzeichnis [root@xjj nginx-1.12.2]# mkdir /usr/local/nginx/conf/vhost
'//Ein virtuelles Host-Verzeichnis erstellen'
[root@xjj nginx-1.12.2]# mkdir /var/log/nginx
'//Ein Protokolldateiverzeichnis erstellen'
[root@xjj nginx-1.12.2]# /usr/local/nginx/sbin/nginx 
'//Starten Sie nginx'
[root@xjj nginx-1.12.2]# netstat -natp|grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 104348/nginx: mast

--

#Vorlage starten, Vorlagendatei und Generierungspfad angeben:
[root@xjj consul]# consul-template -consul-addr 192.168.126.16:8500 -template "/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/xjj.conf:/usr/local/nginx/sbin/nginx -s neu laden" --log-level=info
#Geben Sie den Vorlagenpfad /consul/nginx.ctmpl an, generieren Sie ihn zu /usr/locla/nginx/conf/vhost/xjj.conf, laden Sie dann nginx -s reload neu, definieren Sie dann die Protokollebene und geben Sie den Überwachungsstatus ein-
#Der Masterknoten öffnet ein neues Terminal, um die Konfigurationsdatei anzuzeigen:
[root@xjj ~]# cat /usr/local/nginx/conf/vhost/xjj.conf
#Um auf die Webseite in diesem Pool zuzugreifen, müssen Sie auf 192.168.126.11:8080 zugreifen. Dies ist ein Polling-Mechanismus. Wenn Sie hier nicht darauf zugreifen können, können Sie nginx neu laden und es erneut im Upstream http_backend { versuchen.
  
   Server 192.168.126.12:81;
  
   Server 192.168.126.12:82;
  
}

Server {
  hören Sie 8080;
  Servername localhost 192.168.126.11;
  Zugriffsprotokoll /var/log/nginx/xjj.cn-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://http_backend;
	}
}

④Fügen Sie einen neuen Nginx-Containerknoten hinzu, um automatische Updates zu testen

[root@localhost ~]# docker run -itd -p 85:80 --name xjj05 -h xcf05 nginx #Fügen Sie einen Nginx-Containerknoten hinzu, um die Funktionen zur Diensterkennung und Konfigurationsaktualisierung zu testen [root@xjj ~]# cat /usr/local/nginx/conf/vhost/xcf.conf 
upstream http_backend { 
        
        Server 192.168.126.12:81;
          
        Server 192.168.126.12:82;
          
        Server 192.168.126.12:85;
          
}

Server {
  hören Sie 8080;
  Servername localhost 192.168.126.11;
  Zugriffsprotokoll /var/log/nginx/xcf.cn-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; }       
}

⑤ Testen Sie, ob der Zugriff auf den Proxyserver die Proxy-Zugriffsabfrage abschließen kann

http://192.168.126.11:80/

Docker-Protokolle -f xjj01
Docker-Protokolle -f xjj02
Docker-Protokolle -f xjj05

markieren

⑥Consul-Mehrknotenkonfiguration

#Fügen Sie dem vorhandenen Cluster einen Server mit einer vorhandenen Docker-Umgebung hinzu:

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


--erklären--
-enable-script-checks=true: Stellen Sie den Prüfdienst so ein, dass er verfügbar ist. -datacenter: Name des Rechenzentrums. -join: Treten Sie einem vorhandenen Cluster bei.

Dies ist das Ende dieses Artikels über die Übersicht zu Docker-Consul und die Schritte zum Erstellen einer Clusterumgebung (mit Bildern und Text). Weitere Informationen zum Erstellen einer Docker-Consul-Clusterumgebung finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

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

<<:  Führen Sie die Schritte zur Installation von MySQL 5.5 auf CentOS aus

>>:  Installations- und Verwendungsschritte für vue-amap

Artikel empfehlen

Detaillierte Erklärung der JavaScript-Prototypenkette

Inhaltsverzeichnis 1. Konstruktoren und Instanzen...

Unterschied zwischen HTML ReadOnly und Enabled

Das Textfeld mit dem ReadOnly-Attribut wird auf de...

Vue verwendet Openlayers zum Laden von Tiandi Map und Amap

Inhaltsverzeichnis 1. Weltkarte 1. Installieren S...

Detaillierte Erklärung des Linx awk-Einführungstutorials

Awk ist eine Anwendung zur Verarbeitung von Textd...

Der vollständige Code der im Uniapp-Applet enthaltenen Radardiagrammkomponente

Effektbild: Der Implementierungscode lautet wie f...

Miniprogramm zur Implementierung des Slider-Effekts

In diesem Artikelbeispiel wird der spezifische Co...

Was ist Software 404 und 404-Fehler und was ist der Unterschied zwischen ihnen

Zunächst einmal: Was ist 404 und Soft 404? 404: Ei...

MySQL-Datenbanktabelle und Datenbankpartitionierungsstrategie

Lassen Sie uns zunächst darüber sprechen, warum w...