In diesem Artikel wird hauptsächlich die Nginx-Anwendung vorgestellt: Die Verwendung von Nginx für Canary Publishing hat einen gewissen Referenzwert. Jetzt können Freunde in Not darauf verweisen.
In diesem Artikel wird die blaugrüne Bereitstellung vorgestellt wie man Nginx verwendet, um Canary Release auf einfachste Weise zu simulieren
Der Fokus von Canary Release liegt auf: 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 Graustufen-Release unterscheidet, sollte der Zweck der Canary-Release im Versuch und Irrtum liegen, während es bei der Canary-Release um einen reibungslosen Übergang geht unter den Umständen der Graustufenfreigabe.
Als nächstes verwenden wir den Upstream von Nginx, um einfach das Canary-Release-Szenario 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.
版本 | 说明 |
---|---|
router | 用户通过http://localhost:8090来访此种部署下的微服务 |
主版本 | 当前活跃的主版本,在7001端口提供服务,提示信息为“Hello main service: v1 in 7001” |
金丝雀版本 | 试错的金丝雀版本,在7002端口提供服务,提示信息为“Hello canary deploy service: v2 in 7002” |
Starten Sie im Voraus zwei Dienste auf den beiden Ports 7001/7002, um unterschiedliche Informationen anzuzeigen. Zur Vereinfachung der Demonstration habe ich Tornado verwendet, um einen Spiegel zu erstellen und zu verwenden Docker Verschiedene Parameter, die beim Starten des Containers übergeben werden, werden verwendet, um die Unterschiede in den 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"
[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:7001Hello, Service :Hello main service: v1 in 7001[root@kong ~]# curl http://192.168.163.117:7002Hello, Service :Hello canary deploy service: v2 in 7002[root@kong ~]#
[root@kong ~]# docker run -p 9080:80 --name nginx-canary -d nginx659f15c4d006df6fcd1fab1efe39e25a85c31f3cab1cda67838ddd282669195c [root@kong ~]# docker ps |grep nginx-canary659f15c4d006 nginx "nginx -g 'daemon ..." 7 seconds ago Up 7 seconds 0.0.0.0:9080->80/tcp nginx-canary [root@kong ~]#
Bereiten Sie das folgende Nginx-Code-Snippet vor und fügen Sie es zu /etc/nginx/ von nginx hinzu. In conf.d/default.conf ist die Simulationsmethode sehr einfach. Verwenden Sie down, um anzugeben, dass der Datenverkehr Null ist (das Gewicht kann in Nginx nicht auf Null gesetzt werden). Zu Beginn werden 100 % des Datenverkehrs an den Hauptdatenverkehr gesendet Version.
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; } }
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 direkt ändern mit sed. 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...省略
# cat default.confserver { 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; #}}#
# cat default.confupstream 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; #}}#
# nginx -s reload2018/05/28 05:16:20 [notice] 319#319: signal process started#
10 Aufrufe aller Ausgabe v1 in 7001
[root@kong ~]# cnt=0; while [ $cnt -lt 10 ]; do curl http://localhost:9080; let cnt++; doneHello, Service :Hello main service: v1 in 7001Hello, Service :Hello main service: v1 in 7001Hello, Service :Hello main service: v1 in 7001Hello, Service :Hello main service: v1 in 7001Hello, Service :Hello main service: v1 in 7001Hello, Service :Hello main service: v1 in 7001Hello, Service :Hello main service: v1 in 7001Hello, Service :Hello main service: v1 in 7001Hello, Service :Hello main service: v1 in 7001Hello, Service :Hello main service: v1 in 7001[root@kong ~]#
Durch Anpassen des default.conf-Gewichts und anschließendes Ausführen von nginx -s reload anpassen die Gewichtung der Canary-Version auf 10 %, und 10 % des Datenverkehrs führen den neuen Dienst aus
Nur die Gewichtung des Servers im Upstream muss angepasst werden wie folgt:
upstream nginx_canary { server 192.168.163.117:7001 weight=10; server 192.168.163.117:7002 weight=90; }
# nginx -s reload2018/05/28 05:20:14 [notice] 330#330: signal process started#
[root@kong ~]# cnt=0; while [ $cnt -lt 10 ]; do curl http://localhost:9080; let cnt++; doneHello, Service :Hello canary deploy service: v2 in 7002Hello, Service :Hello canary deploy service: v2 in 7002Hello, Service :Hello canary deploy service: v2 in 7002Hello, Service :Hello canary deploy service: v2 in 7002Hello, Service :Hello main service: v1 in 7001Hello, Service :Hello canary deploy service: v2 in 7002Hello, Service :Hello canary deploy service: v2 in 7002Hello, Service :Hello canary deploy service: v2 in 7002Hello, Service :Hello canary deploy service: v2 in 7002Hello, Service :Hello canary deploy service: v2 in 7002[root@kong ~]#
Durch Anpassen des Gewichts von default.conf und dann nginx -s reload ausführen, die Gewichtung der Canary-Version auf 50 % anpassen, und 50 % des Datenverkehrs führen den neuen Dienst aus
Sie müssen nur das Gewicht des Servers im Upstream wie folgt anpassen:
upstream nginx_canary { server 192.168.163.117:7001 weight=50; server 192.168.163.117:7002 weight=50; }
# nginx -s reload2018/05/28 05:22:26 [notice] 339#339: signal process started#
[root@kong ~]# cnt=0; while [ $cnt -lt 10 ]; do curl http://localhost:9080; let cnt++; doneHello, Service :Hello main service: v1 in 7001Hello, Service :Hello canary deploy service: v2 in 7002Hello, Service :Hello main service: v1 in 7001Hello, Service :Hello canary deploy service: v2 in 7002Hello, Service :Hello main service: v1 in 7001Hello, Service :Hello canary deploy service: v2 in 7002Hello, Service :Hello main service: v1 in 7001Hello, Service :Hello canary deploy service: v2 in 7002Hello, Service :Hello main service: v1 in 7001Hello, Service :Hello canary deploy service: v2 in 7002[root@kong ~]#
Durch Anpassen der Gewichtung von default.conf und anschließendes Ausführen von nginx -s reload wird die Gewichtung der kanarischen Version auf 90 % angepasst. 90 % des Datenverkehrs werden neue Dienste ausführen
Sie müssen nur die Gewichtung des Servers im Upstream wie folgt anpassen:
upstream nginx_canary { server 192.168.163.117:7001 weight=10; server 192.168.163.117:7002 weight=90; }
# nginx -s reload2018/05/28 05:24:29 [notice] 346#346: signal process started#
[root@kong ~]# cnt=0; while [ $cnt -lt 10 ]; do curl http://localhost:9080; let cnt++; doneHello, Service :Hello canary deploy service: v2 in 7002Hello, Service :Hello canary deploy service: v2 in 7002Hello, Service :Hello canary deploy service: v2 in 7002Hello, Service :Hello canary deploy service: v2 in 7002Hello, Service :Hello main service: v1 in 7001Hello, Service :Hello canary deploy service: v2 in 7002Hello, Service :Hello canary deploy service: v2 in 7002Hello, Service :Hello canary deploy service: v2 in 7002Hello, Service :Hello canary deploy service: v2 in 7002Hello, Service :Hello canary deploy service: v2 in 7002[root@kong ~]#
Passen Sie das Gewicht von default.conf an und führen Sie dann die Methode nginx -s reload aus, um das Gewicht der Canary-Version anzupassen 100 % und 100 % des Datenverkehrs führen den neuen Dienst aus
Ändern Sie einfach den Upstream. Die Gewichtung des Servers wird wie folgt angepasst:
<p style="margin-bottom: 7px; margin-top: 14px;">upstream nginx_canary { server 192.168.163.117:7001 down; server 192.168.163.117:7002 weight=100;<br/>}<br/></p>
# nginx -s reload2018/05/28 05:26:37 [notice] 353#353: signal process started#
[root@kong ~]# cnt=0; while [ $cnt -lt 10 ]; do curl http://localhost:9080; let cnt++; doneHello, Service :Hello canary deploy service: v2 in 7002Hello, Service :Hello canary deploy service: v2 in 7002Hello, Service :Hello canary deploy service: v2 in 7002Hello, Service :Hello canary deploy service: v2 in 7002Hello, Service :Hello canary deploy service: v2 in 7002Hello, Service :Hello canary deploy service: v2 in 7002Hello, Service :Hello canary deploy service: v2 in 7002Hello, Service :Hello canary deploy service: v2 in 7002Hello, Service :Hello canary deploy service: v2 in 7002Hello, Service :Hello canary deploy service: v2 in 7002[root@kong ~]#
Verwandte Empfehlungen:
Nginx-Anwendung: Nginx für den Lastausgleich verwenden
Das obige ist der detaillierte Inhalt vonNginx-Anwendung: Canary-Veröffentlichung mit Nginx. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!