So verwenden Sie Nginx zur Simulation einer Blue-Green-Bereitstellung

So verwenden Sie Nginx zur Simulation einer Blue-Green-Bereitstellung

Dieser Artikel stellt die Blue-Green-Bereitstellung vor und zeigt, wie man mit nginx die Blue-Green-Bereitstellung auf einfachste Weise simuliert.

Blue-Green-Bereitstellung

Die wichtigsten Punkte der Blue-Green-Bereitstellung sind wie folgt

  • 1. Blaue Version und grüne Version existieren gleichzeitig
  • 2. Die tatsächliche Betriebsumgebung ist blau oder grün, nur eine davon, gesteuert durch den Schalter

Analyse der Vor- und Nachteile: Die Vorteile liegen in der Geschwindigkeit und im Rollback. Auch die Nachteile liegen auf der Hand. Der Grund, warum ein Rollback schnell möglich ist, liegt darin, dass zwei Umgebungssätze gleichzeitig vorhanden sind. Daher steigen die Komplexität und die erforderlichen Ressourcen, weil zwei Umgebungssätze vorhanden sind.
Darüber hinaus wurde zwar die Geschwindigkeit verbessert, doch im Implementierungsprozess kann die Steuerung des Switches, unabhängig davon, wie hoch die Schaltgeschwindigkeit ist, kein vollständig nahtloses Schalten erreichen, ohne andere Technologien zu kombinieren.

Simulation einer Blue-Green-Bereitstellung

Als Nächstes verwenden wir den Upstream von nginx, um das Blue-Green-Bereitstellungsszenario einfach zu simulieren. Das konkrete Szenario ist wie folgt: Die blaue Version ist derzeit aktiv. Durch Anpassen der Nginx-Einstellungen wird die grüne Version als aktuell aktive Version festgelegt.

Vorbereitung

Zwei Dienste werden auf den Ports 7001/7002 gestartet, um unterschiedliche Informationen anzuzeigen. Zur Vereinfachung der Demonstration wird mit Tornado ein Spiegel erstellt. Beim Starten des Docker-Containers werden unterschiedliche Parameter übergeben, um die Unterschiede in den Diensten anzuzeigen.

docker run -d -p 7001:8080 liumiaocn/tornado:latest python /usr/local/bin/daemon.py „Hallo blauer/grüner Dienst: v1 in 7001“
docker run -d -p 7002:8080 liumiaocn/tornado:latest python /usr/local/bin/daemon.py „Hallo blauer/grüner Dienst: v2 in 7002“

Ausführungsprotokoll

[root@kong ~]# docker run -d -p 7001:8080 liumiaocn/tornado:latest python /usr/local/bin/daemon.py "Hallo blauer/grüner Dienst: v1 in 7001"
70c74dc8e43d5635983f7240deb63a3fc0599d5474454c3bc5197aa5c0017348
[root@kong ~]# docker run -d -p 7002:8080 liumiaocn/tornado:latest python /usr/local/bin/daemon.py "Hallo blauer/grüner Dienst: v2 in 7002"
6c5c2ea322d4ac17b90feefb96e3194ec8adecedaa4c944419316a2e4bf07117
[root@kong ~]# curl http://192.168.163.117:7001
Hallo, Service: Hallo blau/grün Service: v1 in 7001
[root@kong ~]# curl http://192.168.163.117:7002
Hallo, Service: Hallo blau/grün Service: v2 in 7002
[root@kong ~]#

Starten Sie nginx

[root@kong ~]# docker run -p 9080:80 --name nginx-blue-green -d nginx
d3b7098c44890c15918dc47616b67e5e0eb0da7a443eac266dbf26d55049216a
[root@kong ~]# docker ps |grep nginx-blue-green
d3b7098c4489 nginx „nginx -g 'daemon ...“ vor 10 Sekunden. 9 Sekunden aktiv. 0.0.0.0:9080->80/tcp nginx-blue-green
[root@kong ~]#

Nginx-Codeausschnitt

Bereiten Sie den folgenden Nginx-Codeausschnitt vor und fügen Sie ihn zu /etc/nginx/conf.d/default.conf von Nginx hinzu. Die Simulationsmethode ist sehr einfach. Down wird verwendet, um anzuzeigen, dass der Datenverkehr Null ist (Gewicht kann in Nginx nicht auf Null gesetzt werden). Zu Beginn werden 100 % des Datenverkehrs an die blaue Version gesendet.

http {
Upstream nginx_blug_green {
  Server 192.168.163.117:7001 Gewicht=100;
  Server 192.168.163.117:7002 ausgefallen;
}
Server {
  hören Sie 80;
  Servername www.liumiao.cn 192.168.163.117;
  Standort / {
    Proxy-Passwort http://nginx_blug_green;
  }
}

So ändern Sie default.conf

Dies kann erreicht werden, indem vim im Container installiert, lokal geändert und dann über Docker cp übergeben oder direkt mit sed geändert wird. Wenn Sie vim im Container installieren, verwenden Sie die folgende Methode

[root@kong ~]# docker exec -it nginx-lb sh
# apt-get update
… #apt-get install vim weglassen
...ausgelassen

Vor der Änderung

# Katze default.conf
Server {
  hören Sie 80;
  Servername localhost;
  #Zeichensatz koi8-r;
  #access_log /var/log/nginx/host.access.log main;
  Standort / {
    root /usr/share/nginx/html;
    Index Index.html Index.htm;
  }
  #Fehlerseite 404 /404.html;
  # Server-Fehlerseiten auf die statische Seite /50x.html umleiten
  #
  Fehlerseite 500 502 503 504 /50x.html;
  Standort = /50x.html {
    root /usr/share/nginx/html;
  }
  # Proxy für die PHP-Skripte an Apache, das auf 127.0.0.1:80 lauscht
  #
  #Standort ~ \.php$ {
  # Proxy-Passwort http://127.0.0.1;
  #}
  # Übergeben Sie die PHP-Skripte an den FastCGI-Server, der auf 127.0.0.1:9000 lauscht.
  #
  #Standort ~ \.php$ {
  #Wurzel-HTML;
  # fastcgi_pass 127.0.0.1:9000;
  # fastcgi_index index.php;
  # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
  #fastcgi_params einschließen;
  #}
  # Zugriff auf .htaccess-Dateien verweigern, wenn das Apache-Dokumentenstammverzeichnis
  # stimmt mit nginx überein
  #
  #Standort ~ /\.ht {
  # alles ablehnen;
  #}
}
#

Nach

# Katze default.conf
Upstream nginx_blug_green {
  Server 192.168.163.117:7001 Gewicht=100;
  Server 192.168.163.117:7002 ausgefallen;
}
Server {
  hören Sie 80;
  Servername www.liumiao.cn 192.168.163.117;
  #Zeichensatz koi8-r;
  #access_log /var/log/nginx/host.access.log main;
  Standort / {
    #root /usr/share/nginx/html;
    #index index.html index.htm;
    Proxy-Passwort http://nginx_blug_green;
  }
  #Fehlerseite 404 /404.html;
  # Server-Fehlerseiten auf die statische Seite /50x.html umleiten
  #
  Fehlerseite 500 502 503 504 /50x.html;
  Standort = /50x.html {
    root /usr/share/nginx/html;
  }
  # Proxy für die PHP-Skripte an Apache, das auf 127.0.0.1:80 lauscht
  #
  #Standort ~ \.php$ {
  # Proxy-Passwort http://127.0.0.1;
  #}
  # Übergeben Sie die PHP-Skripte an den FastCGI-Server, der auf 127.0.0.1:9000 lauscht.
  #
  #Standort ~ \.php$ {
  #Wurzel-HTML;
  # fastcgi_pass 127.0.0.1:9000;
  # fastcgi_index index.php;
  # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
  #fastcgi_params einschließen;
  #}
  # Zugriff auf .htaccess-Dateien verweigern, wenn das Apache-Dokumentenstammverzeichnis
  # stimmt mit nginx überein
  #
  #Standort ~ /\.ht {
  # alles ablehnen;
  #}
}
#

Nginx-Einstellungen neu laden

# nginx -s neu laden
2018/05/28 04:39:47 [Hinweis] 321#321: Signalprozess gestartet
#

Bestätigen Sie das Ergebnis

Alle 10 Anrufe Ausgabe v1 in 7001

[root@kong ~]# cnt=0; während [ $cnt -lt 10 ]
> tun
> curl http://localhost:9080
> lass cnt++
> erledigt
Hallo, Service: Hallo blau/grün Service: v1 in 7001
Hallo, Service: Hallo blau/grün Service: v1 in 7001
Hallo, Service: Hallo blau/grün Service: v1 in 7001
Hallo, Service: Hallo blau/grün Service: v1 in 7001
Hallo, Service: Hallo blau/grün Service: v1 in 7001
Hallo, Service: Hallo blau/grün Service: v1 in 7001
Hallo, Service: Hallo blau/grün Service: v1 in 7001
Hallo, Service: Hallo blau/grün Service: v1 in 7001
Hallo, Service: Hallo blau/grün Service: v1 in 7001
Hallo, Service: Hallo blau/grün Service: v1 in 7001
[root@kong ~]#

Blue-Green-Deployment: Umstellung auf die grüne Variante

Indem Sie das Gewicht von default.conf anpassen und dann nginx -s reload ausführen, können Sie dynamisch zur grünen Version wechseln, ohne den nginx-Dienst zu stoppen. Das Ziel besteht darin, den gesamten Datenverkehr in 7002 an v2 auszugeben

So ändern Sie default.conf

Du musst lediglich das Gewicht des Servers im Upstream wie folgt anpassen:

Upstream nginx_blug_green {
  Server 192.168.163.117:7001 ausgefallen;
  Server 192.168.163.117:7002 Gewicht=100;
}

Nginx-Einstellungen neu laden

# nginx -s neu laden
2018/05/28 05:01:28 [Hinweis] 330#330: Signalprozess gestartet
#

Bestätigen Sie das Ergebnis

[root@kong ~]# cnt=0; während [ $cnt -lt 10 ]; führe curl http://localhost:9080 aus; lass cnt++; fertig
Hallo, Service: Hallo blau/grün Service: v2 in 7002
Hallo, Service: Hallo blau/grün Service: v2 in 7002
Hallo, Service: Hallo blau/grün Service: v2 in 7002
Hallo, Service: Hallo blau/grün Service: v2 in 7002
Hallo, Service: Hallo blau/grün Service: v2 in 7002
Hallo, Service: Hallo blau/grün Service: v2 in 7002
Hallo, Service: Hallo blau/grün Service: v2 in 7002
Hallo, Service: Hallo blau/grün Service: v2 in 7002
Hallo, Service: Hallo blau/grün Service: v2 in 7002
Hallo, Service: Hallo blau/grün Service: v2 in 7002
[root@kong ~]#

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Wenn Sie mehr darüber erfahren möchten, schauen Sie sich bitte die folgenden Links an

Das könnte Sie auch interessieren:
  • Versuch der Bereitstellung von Docker-Containern – Kommunikation mit mehreren Containern (Node+MongoDB+Nginx)
  • Beispiel für die Bereitstellung eines Django-Projekts mit uwsgi+nginx
  • Detaillierte Erläuterung des Front-End- und Back-End-Bereitstellungstutorials basierend auf Vue und Nginx
  • Docker nginx Beispielmethode zum Bereitstellen mehrerer Projekte
  • Lösen Sie das Problem der leeren Aktualisierung beim Bereitstellen des Vue-Projekts nginx in einem Nicht-Root-Verzeichnis
  • Verpackung und Bereitstellung von Vue-Projekten_Detaillierte Erläuterung der Nginx-Proxy-Zugriffsmethode
  • Detaillierte Erläuterung der Vue-Bereitstellung in Unterverzeichnissen oder sekundären Verzeichnissen über NGINX
  • So stellen Sie eine .net Core-Site mit Nginx bereit
  • So konfigurieren Sie Nginx mit einem SSL-Zertifikat zum Bereitstellen einer HTTPS-Website (Ausstellen des Zertifikats)
  • Implementierung der Bereitstellung statischer Webseiten basierend auf nginx

<<:  So lösen Sie das Problem, dass MySQL nicht gestartet werden kann, da keine temporären Dateien erstellt werden können

>>:  JavaScript implementiert einfache Rechnerfunktion

Artikel empfehlen

Linux verwendet iftop, um den Netzwerkkartenverkehr in Echtzeit zu überwachen

Linux verwendet iftop, um den Verkehr der Netzwer...

Detaillierte Erklärung zur Verwendung von Router-View-Komponenten in Vue

Wenn Sie ein Vue-Projekt entwickeln, müssen Sie h...

MySQL-Datenbanktabelle und Datenbankpartitionierungsstrategie

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

Vue implementiert einen einfachen Bildwechseleffekt

In diesem Artikelbeispiel wird der spezifische Co...

Lösung für den Fehler beim Starten von MySQL

Lösung für den Fehler beim Starten von MySQL MySQ...

Die Implementierung der Ereignisbindung in React verweist auf drei Methoden

1. Pfeilfunktion 1. Nutzen Sie die Tatsache, dass...

Verwendung und Prinzipien von Provide und Inject in Vue3

Vorwort: Beim Übergeben von Daten zwischen überge...

HTML-Tag Marquee realisiert verschiedene Scroll-Effekte (ohne JS-Steuerung)

Der automatische Bildlaufeffekt der Seite kann du...

So ändern Sie Farben und Designs in Vim unter Linux

Vim ist ein Texteditor, den wir unter Linux sehr ...

MySQL 8.0.17 Installations- und einfaches Konfigurationstutorial unter macOS

Wenn Sie nicht verstehen, was ich geschrieben hab...