Heim >Betrieb und Instandhaltung >Nginx >So verwenden Sie die Nginx-Simulation für Canary Publishing
Canary Release/Grayscale Release
Der Kernpunkt von Canary Release ist: Versuch und Irrtum. Der Ursprung der Kanarienvogelfreisetzung selbst ist eine tragische Geschichte der wunderschönen Geschöpfe der Natur in der Entwicklung der menschlichen Industrie. Der Kanarienvogel nutzt sein Leben, um Fehler zu machen, um die Sicherheit der Bergleute zu gewährleisten. Bei der kontinuierlichen Bereitstellung werden geringe Kosten für die Verkehrskontrolle verwendet, z. B. ein Prozent oder ein Zehntel, um zu überprüfen, ob eine bestimmte Version normal ist. Wenn es abnormal ist, wird seine Funktion mit den geringsten Kosten erreicht und das Risiko verringert. Wenn es normal ist, können Sie die Gewichtung schrittweise erhöhen, bis sie 100 % erreicht, und den gesamten Datenverkehr reibungslos auf die neue Version umstellen. Bei der Graustufenveröffentlichung handelt es sich im Allgemeinen um ein ähnliches Konzept. Grau ist ein Übergang zwischen Schwarz und Weiß. Es unterscheidet sich von der Blau- und Grün-Bereitstellung, bei der entweder Blau oder Grün gleichzeitig vorhanden sind, der entsprechende Datenverkehr jedoch vorhanden ist Wenn sich die Canary-Release von der Grayscale-Release unterscheidet, sollte der Zweck im Versuch und Irrtum liegen, während es bei der Grayscale-Release um eine stabile Release geht, aber es gibt kein Problem bei der Canary-Release Übergang unter den Umständen der Graustufenveröffentlichung.
Kanarische Veröffentlichung simulieren
Als nächstes verwenden wir den Upstream von Nginx, um einfach das kanarische Veröffentlichungsszenario zu simulieren. Das konkrete Szenario ist wie folgt. Durch Anpassen der Nginx-Einstellungen und ständiges Anpassen des Gewichts der Canary-Version wird schließlich eine reibungslose Veröffentlichung erreicht.
Bereiten Sie sich im Voraus vor
Starten Sie zwei Dienste auf den beiden Ports 7001/7002 im Voraus, um unterschiedliche Informationen anzuzeigen. Zur Vereinfachung der Demonstration habe ich Tornado verwendet, um ein Bild zu erstellen und die beim Docker übergebenen Parameter zu übergeben Der Container wurde gestartet, um die Unterschiede zwischen Diensten anzuzeigen.
docker run -d -p 7001:8080 liumiaocn/tornado:latest python /usr/local/bin/daemon.py "hello main service: v1 in 7001" docker run -d -p 7002:8080 liumiaocn/tornado:latest python /usr/local/bin/daemon.py "hello 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 "hello main service: v1 in 7001" 28f42bbd21146c520b05ff2226514e62445b4cdd5d82f372b3791fdd47cd602a [root@kong ~]# docker run -d -p 7002:8080 liumiaocn/tornado:latest python /usr/local/bin/daemon.py "hello canary deploy service: v2 in 7002" b86c4b83048d782fadc3edbacc19b73af20dc87f5f4cf37cf348d17c45f0215d [root@kong ~]# curl http://192.168.163.117:7001 hello, service :hello main service: v1 in 7001 [root@kong ~]# curl http://192.168.163.117:7002 hello, service :hello canary deploy service: v2 in 7002 [root@kong ~]#
Nginx starten
[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 ..." 7 seconds ago up 7 seconds 0.0.0.0:9080->80/tcp nginx-canary [root@kong ~]#
Nginx-Code-Snippet
Bereiten Sie das folgende Nginx-Code-Snippet vor und fügen Sie es zu. /etc/nginx/conf.d/default hinzu .conf von Nginx, simulieren Die Methode ist sehr einfach. Verwenden Sie down, um anzuzeigen, dass der Datenverkehr Null ist (das 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 weight=100; server 192.168.163.117:7002 down; } server { listen 80; server_name www.liumiao.cn 192.168.163.117; location / { proxy_pass http://nginx_canary; } }
So ändern Sie default.conf
Sie können den Effekt erzielen, indem Sie vim im Container installieren. Sie können es auch lokal ändern und es dann über Docker CP übergeben oder es direkt mit sed ändern. Wenn Sie vim in einem Container installieren, verwenden Sie die folgende Methode:
[root@kong ~]# docker exec -it nginx-lb sh # apt-get update ...省略 # apt-get install vim ...省略
Vor der Änderung
# cat default.conf server { listen 80; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy the php scripts to apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the php scripts to fastcgi server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param script_filename /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } #
Nach der Änderung: Alle werden nach 10 Aufrufen ausgegeben. Alle sind v1 in 7001
[root@kong ~]# cnt=0; while [ $cnt -lt 10 ]; let cnt++; v1 in 7001hallo, service :Hallo Hauptdienst: v1 in 7001Hallo, Dienst :Hallo Hauptdienst: v1 in 7001
Hallo, Dienst:Hallo Hauptdienst: v1 in 7001Hallo, Dienst:Hallo Hauptdienst: v1 in 7001Hallo, Dienst:Hallo Hauptdienst: v1 in 7001Hallo, Dienst: Hallo Hauptdienst: v1 in 7001. Hallo, Dienst: Hallo Hauptdienst: v1 in 7001. Hallo, Dienst: Hallo Hauptdienst: v1 in 7001. Hallo, Dienst: Hallo Hauptdienst : v1 in 7001
[root@kong ~]#Kanarische Version: Traffic-Gewicht der kanarischen Version 10 %
Passen Sie das Gewicht an, indem Sie das Gewicht von default.conf anpassen und dann nginx -s reload ausführen Canary-Version auf 10 %, und 10 % des Datenverkehrs führen den neuen Dienst aus.
So ändern Sie default.conf Einstellungen# cat default.conf upstream nginx_canary { server 192.168.163.117:7001 weight=100; server 192.168.163.117:7002 down; } server { listen 80; server_name www.liumiao.cn 192.168.163.117; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { #root /usr/share/nginx/html; #index index.html index.htm; proxy_pass http://nginx_canary; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy the php scripts to apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the php scripts to fastcgi server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param script_filename /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } #
Bestätigen Sie das Ergebnis
[root@kong ~]# cnt=0; do Curl ; let cnt++; v2 in 7002Hallo, Service:Hallo Canary Deploy Service: v2 in 7002Hallo, Service:Hallo Canary Deploy Service: v2 in 7002
Hallo, Service:Hallo Canary Deploy Service: v2 in 7002Hallo, Service: Hallo Hauptdienst : v1 in 7001
Hallo, Service:Hallo Canary Deploy Service: v2 in 7002Hallo, Service:Hallo Canary Deploy Service: v2 in 7002Hallo, Service:Hallo Canary Deploy Service: v2 in 7002Hallo, Service:Hallo Canary Bereitstellungsdienst: v2 in 7002
Hallo, Dienst: Hallo Canary Bereitstellungsdienst: v2 in 7002[root@kong ~]#
Kanarische Version: Die Verkehrsgewichtung der kanarischen Version beträgt 50 %
Durch Anpassen der Standardgewichtung .conf und führen Sie dann nginx -s reload aus, passen Sie die Gewichtung der Canary-Version auf 50 % an, und 50 % des Datenverkehrs führen den neuen Dienst aus
Methode zum Ändern von default.conf
Passen Sie einfach die Gewichtung von an den Server im Upstream wie folgt:# nginx -s reload 2018/05/28 05:16:20 [notice] 319#319: signal process started #
Nginx-Einstellungen neu laden# nginx -s reload 2018/05/28 05:22:26 [notice] 339#339: signal process started #确认结果
[root@kong ~]# cnt=0; while [ $cnt -lt 10 ]; do curl ; let cnt++; done
hello, service :hello main service: v1 in 7001
hello, service :hello canary deploy service: v2 in 7002
hello, service :hello main service: v1 in 7001
hello, service :hello canary deploy service: v2 in 7002
hello, service :hello main service: v1 in 7001
hello, service :hello canary deploy service: v2 in 7002
hello, service :hello main service: v1 in 7001
hello, service :hello canary deploy service: v2 in 7002
hello, service :hello main service: v1 in 7001
hello, service :hello canary deploy service: v2 in 7002
[root@kong ~]#金丝雀发布: 金丝雀版本流量权重90%
通过调整default.conf的weight,然后执行nginx -s reload的方式,调节金丝雀版本的权重为90%,流量的90%会执行新的服务
修改default.conf的方法
只需要将upstream中的server的权重做如下调整:
upstream nginx_canary { server 192.168.163.117:7001 weight=10; server 192.168.163.117:7002 weight=90; }重新加载nginx设定
# nginx -s reload 2018/05/28 05:24:29 [notice] 346#346: signal process started #确认结果
[root@kong ~]# cnt=0; while [ $cnt -lt 10 ]; do curl ; let cnt++; done
hello, service :hello canary deploy service: v2 in 7002
hello, service :hello canary deploy service: v2 in 7002
hello, service :hello canary deploy service: v2 in 7002
hello, service :hello canary deploy service: v2 in 7002
hello, service :hello main service: v1 in 7001
hello, service :hello canary deploy service: v2 in 7002
hello, service :hello canary deploy service: v2 in 7002
hello, service :hello canary deploy service: v2 in 7002
hello, service :hello canary deploy service: v2 in 7002
hello, service :hello canary deploy service: v2 in 7002
[root@kong ~]#金丝雀发布: 金丝雀版本流量权重100%
通过调整default.conf的weight,然后执行nginx -s reload的方式,调节金丝雀版本的权重为100%,流量的100%会执行新的服务
修改default.conf的方法
只需要将upstream中的server的权重做如下调整:
upstream nginx_canary { server 192.168.163.117:7001 down; server 192.168.163.117:7002 weight=100; }重新加载nginx设定
# nginx -s reload 2018/05/28 05:26:37 [notice] 353#353: signal process started确认结果
[root@kong ~]# cnt=0; while [ $cnt -lt 10 ]; do curl ; let cnt++; done
hello, service :hello canary deploy service: v2 in 7002
hello, service :hello canary deploy service: v2 in 7002
hello, service :hello canary deploy service: v2 in 7002
hello, service :hello canary deploy service: v2 in 7002
hello, service :hello canary deploy service: v2 in 7002
hello, service :hello canary deploy service: v2 in 7002
hello, service :hello canary deploy service: v2 in 7002
hello, service :hello canary deploy service: v2 in 7002
hello, service :hello canary deploy service: v2 in 7002
hello, service :hello canary deploy service: v2 in 7002
[root@kong ~]#
Das obige ist der detaillierte Inhalt vonSo verwenden Sie die Nginx-Simulation für Canary Publishing. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!