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
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
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
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
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
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:
|
<<: Implementierungscode des Tools zum Entfernen von Wasserzeichen aus kurzen Videos (Douyin)
>>: Lösung zum automatischen Stoppen des MySQL-Dienstes
Es gibt zwei Arten von geplanten Tasks im Linux-S...
Inhaltsverzeichnis Demo1 Fragment erstellen Svelt...
Lange Zeit wurde die Entwicklung von Websites dad...
Um den Export und Import von Daten in SQL zu erle...
Vorwort Docker kann Umgebungsvariablen für Contai...
Dieser Artikel beschreibt anhand von Beispielen d...
Inhaltsverzeichnis 1. Container-Service-Update un...
Vorwort Wie wir alle wissen, ist Bash (die Bourne...
Einführung Wenn wir die MySQL-Datenbank verwenden...
Welche Probleme löst MySQL ROLE? Wenn Sie ein DBA...
Hallo zusammen, ich bin Qiufeng. Vor Kurzem hat W...
„Großartig“ sind wahrscheinlich die beiden Worte, ...
HTML-Onfocus-Ereignisattribute Definition und Ver...
MySQL UTF-8-Kodierung MySQL unterstützt UTF-8 sei...
Inhaltsverzeichnis Probleme mit der Ressourcenver...