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

Das neueste beliebte Skript Autojs Quellcode-Sharing

Heute werde ich einen Quellcode mit Ihnen teilen,...

Mycli ist ein unverzichtbares Tool für MySQL-Befehlszeilen-Enthusiasten

mycli MyCLI ist eine Befehlszeilenschnittstelle f...

So erstellen Sie einen untergeordneten Prozess in nodejs

Inhaltsverzeichnis Einführung Untergeordneter Pro...

Eine kurze Diskussion über die Verwendung der Web Storage API

Inhaltsverzeichnis 1. Lokale Speichertechnologie ...

Eine kleine Einführung in die Verwendung der Position in HTML

Ich habe gestern gerade etwas HTML gelernt und kon...

Lösung für Win10 ohne Hyper-V

Suchen Sie immer noch nach einer Möglichkeit, Hyp...

Die Verwendung und der Unterschied zwischen JavaScript-Pseudo-Array und Array

Pseudo-Arrays und Arrays In JavaScript sind mit A...

Neue Features in MySQL 8: Unsichtbare Indizes

Hintergrund Indizes sind ein zweischneidiges Schw...

Kalendereffekt basierend auf jQuery

In diesem Artikelbeispiel wird der spezifische Co...

So wenden Sie TypeScript-Klassen in Vue-Projekten an

Inhaltsverzeichnis 1. Einleitung 2. Verwendung 1....

js Implementierung des Verifizierungscode-Falls

In diesem Artikelbeispiel wird der spezifische Co...