So verwenden Sie Nginx zum Simulieren der Canary-Freigabe

So verwenden Sie Nginx zum Simulieren der Canary-Freigabe

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

Canary-Version/Graustufen-Version

Der Sinn der Canary-Veröffentlichung besteht in Versuch und Irrtum. Der Ursprung der Kanarienvogelfreilassung selbst ist eine tragische Geschichte wunderschöner Naturgeschöpfe, die durch menschliche Industrie entstanden sind. Der Kanarienvogel nutzt sein Leben durch Versuch und Irrtum für die Sicherheit der Bergleute. Verwenden Sie sehr geringe Kosten im Austausch für umfassende Sicherheit. In der Praxis der kontinuierlichen Bereitstellung ist der Canary eine Verkehrskontrolle. Er verwendet sehr wenig Verkehr, beispielsweise ein Prozent oder ein Zehntel, um zu überprüfen, ob eine bestimmte Version normal ist. Wenn sie nicht normal ist, erfüllt er seine Funktion zu den niedrigsten Kosten und reduziert das Risiko. Wenn es normal ist, können Sie das Gewicht schrittweise auf 100 % erhöhen und den gesamten Datenverkehr reibungslos auf die neue Version umstellen. Die Graustufenfreigabe ist im Allgemeinen ein ähnliches Konzept. Grau ist ein Übergang zwischen Schwarz und Weiß. Anders als bei der blau-grünen Bereitstellung, die weder blau noch grün ist, gibt es einen Zeitraum, in dem die graue Freigabe/die Canary-Freigabe nebeneinander bestehen, aber der entsprechende Datenverkehr ist unterschiedlich. Wenn sich die Canary-Freigabe von der grauen Freigabe unterscheidet, sollte der Unterschied der Zweck sein. Der Zweck der Canary-Freigabe ist Versuch und Irrtum, während die graue Freigabe eine reibungslose Freigabe ist. Der reibungslose Übergang, der durchgeführt wird, wenn es kein Problem mit der Canary-Freigabe gibt, ist die graue Freigabe.

Simulieren einer Canary-Version

Als Nächstes verwenden wir den Upstream von Nginx, um das Canary-Release-Szenario einfach zu simulieren. Das konkrete Szenario ist wie folgt: Die Hauptversion ist derzeit aktiv. Durch Anpassen der Nginx-Einstellungen und kontinuierliches Anpassen des Gewichts der Canary-Version wird schließlich eine reibungslose Veröffentlichung erreicht.

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 Hauptdienst: v1 in 7001“
docker run -d -p 7002:8080 liumiaocn/tornado:latest python /usr/local/bin/daemon.py „Hallo Canary Deploy Service: v2 in 7002“

Ausführungsprotokoll

[root@kong ~]# docker run -d -p 7001:8080 liumiaocn/tornado:latest python /usr/local/bin/daemon.py "Hallo Hauptdienst: v1 in 7001"
28f42bbd21146c520b05ff2226514e62445b4cdd5d82f372b3791fdd47cd602a
[root@kong ~]# docker run -d -p 7002:8080 liumiaocn/tornado:latest python /usr/local/bin/daemon.py "Hallo Canary Deploy Service: v2 in 7002"
b86c4b83048d782fadc3edbacc19b73af20dc87f5f4cf37cf348d17c45f0215d
[root@kong ~]# curl http://192.168.163.117:7001
Hallo, Service: Hallo Hauptservice: v1 in 7001
[root@kong ~]# curl http://192.168.163.117:7002
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
[root@kong ~]#

Starten Sie nginx

[root@kong ~]# docker run -p 9080:80 --name nginx-canary -d nginx
659f15c4d006df6fcd1fab1efe39e25a85c31f3cab1cda67838ddd282669195c
[root@kong ~]# docker ps |grep nginx-canary
659f15c4d006 nginx „nginx -g 'daemon ...“ vor 7 Sekunden. Vor 7 Sekunden aktiv. 0.0.0.0:9080->80/tcp nginx-canary
[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 Hauptversion gesendet.

http {
Upstream nginx_canary {
  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_canary;
  }
}

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_canary {
  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_canary;
  }
  #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 05:16:20 [Hinweis] 319#319: Signalprozess gestartet
#

Bestätigen Sie das Ergebnis

Alle 10 Anrufe Ausgabe v1 in 7001

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

Canary-Release: Das Verkehrsgewicht der Canary-Version beträgt 10 %

Durch Anpassen des Gewichts von default.conf und anschließendes Ausführen von nginx -s reload wird das Gewicht der Canary-Version auf 10 % angepasst und 10 % des Datenverkehrs führen den neuen Dienst aus.

So ändern Sie default.conf

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

Upstream nginx_canary {
  Server 192.168.163.117:7001 Gewicht=10;
  Server 192.168.163.117:7002 Gewicht=90;
}

Nginx-Einstellungen neu laden

# nginx -s neu laden
2018/05/28 05:20:14 [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, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
Hallo, Service: Hallo Hauptservice: v1 in 7001
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
[root@kong ~]#

Canary-Release: Das Verkehrsgewicht der Canary-Version beträgt 50 %

Durch Anpassen des Gewichts von default.conf und anschließendes Ausführen von nginx -s reload wird das Gewicht der Canary-Version auf 50 % angepasst und 50 % des Datenverkehrs führen den neuen Dienst aus.

So ändern Sie default.conf

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

Upstream nginx_canary {
  Server 192.168.163.117:7001 Gewicht=50;
  Server 192.168.163.117:7002 Gewicht=50;
}

Nginx-Einstellungen neu laden

# nginx -s neu laden
2018/05/28 05:22:26 [Hinweis] 339#339: 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 Hauptservice: v1 in 7001
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
Hallo, Service: Hallo Hauptservice: v1 in 7001
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
Hallo, Service: Hallo Hauptservice: v1 in 7001
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
Hallo, Service: Hallo Hauptservice: v1 in 7001
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
Hallo, Service: Hallo Hauptservice: v1 in 7001
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
[root@kong ~]#

Canary-Release: Das Verkehrsgewicht der Canary-Version beträgt 90 %

Durch Anpassen des Gewichts von default.conf und anschließendes Ausführen von nginx -s reload wird das Gewicht der Canary-Version auf 90 % angepasst und 90 % des Datenverkehrs führen den neuen Dienst aus.

So ändern Sie default.conf

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

Upstream nginx_canary {
  Server 192.168.163.117:7001 Gewicht=10;
  Server 192.168.163.117:7002 Gewicht=90;
}

Nginx-Einstellungen neu laden

# nginx -s neu laden
2018/05/28 05:24:29 [Hinweis] 346#346: 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, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
Hallo, Service: Hallo Hauptservice: v1 in 7001
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
[root@kong ~]#

Canary-Release: Das Verkehrsgewicht der Canary-Version beträgt 100 %

Durch Anpassen des Gewichts von default.conf und anschließendes Ausführen von nginx -s reload wird das Gewicht der Canary-Version auf 100 % angepasst und 100 % des Datenverkehrs führen den neuen Dienst aus.

So ändern Sie default.conf

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

Upstream nginx_canary {
  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:26:37 [Hinweis] 353#353: 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, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: v2 in 7002
Hallo, Dienst: Hallo Canary-Bereitstellungsdienst: 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:
  • Zusammenfassung der drei Methoden zur Implementierung der Graustufenfreigabe in Nginx
  • Detaillierte Erläuterung der Veröffentlichung und Bereitstellung von Asp.Net Core (MacOS + Linux + Nginx)
  • Eine kurze Analyse von nginScript, der gerade von nginx veröffentlichten JavaScript-Funktion
  • Detaillierte Erklärung der Kontrolle des Zugriffsvolumens durch Nginx
  • Einrichten eines Proxyservers mit nginx
  • Versuch der Bereitstellung von Docker-Containern – Kommunikation mit mehreren Containern (Node+MongoDB+Nginx)
  • Detaillierte Erklärung der Verwendung von Nginx proxy_redirect
  • Beispiel für die Installation von nginx in einem angegebenen Verzeichnis
  • So konfigurieren Sie Nginx zur Unterstützung von IPv6 unter Linux
  • Detaillierte Erläuterung des Front-End- und Back-End-Bereitstellungstutorials basierend auf Vue und Nginx

<<:  Implementierungscode des Tools zum Entfernen von Wasserzeichen aus kurzen Videos (Douyin)

>>:  Lösung zum automatischen Stoppen des MySQL-Dienstes

Artikel empfehlen

So passen Sie geplante AT- und Cron-Aufgaben in Linux an

Es gibt zwei Arten von geplanten Tasks im Linux-S...

HeidiSQL-Tool zum Exportieren und Importieren von MySQL-Daten

Um den Export und Import von Daten in SQL zu erle...

Verwendung von Umgebungsvariablen in Docker und Lösungen für häufige Probleme

Vorwort Docker kann Umgebungsvariablen für Contai...

So passen Sie die Bash-Eingabeaufforderung in Linux an

Vorwort Wie wir alle wissen, ist Bash (die Bourne...

Detaillierte Erklärung der neuen Funktion ROLE in MySQL 8

Welche Probleme löst MySQL ROLE? Wenn Sie ein DBA...

JS implementiert WeChats "Shit Bombing"-Funktion

Hallo zusammen, ich bin Qiufeng. Vor Kurzem hat W...

So erstellen Sie ein stilvolles Webseiten-Design (Grafik-Tutorial)

„Großartig“ sind wahrscheinlich die beiden Worte, ...

Warum wird in MySQL keine UTF-8-Kodierung verwendet?

MySQL UTF-8-Kodierung MySQL unterstützt UTF-8 sei...

CocosCreator allgemeines Framework-Design Ressourcenmanagement

Inhaltsverzeichnis Probleme mit der Ressourcenver...