Heim  >  Artikel  >  Betrieb und Instandhaltung  >  So verwenden Sie die Nginx-Simulation für Canary Publishing

So verwenden Sie die Nginx-Simulation für Canary Publishing

王林
王林nach vorne
2023-05-15 11:25:05853Durchsuche

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.

So verwenden Sie die Nginx-Simulation für Canary Publishing

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 7001

Hallo, 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 7002

Hallo, Service: Hallo Hauptdienst : v1 in 7001

Hallo, Service:Hallo Canary Deploy Service: v2 in 7002

Hallo, 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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen