Maison Opération et maintenance Nginx Comment utiliser la simulation nginx pour la publication Canary

Comment utiliser la simulation nginx pour la publication Canary

May 15, 2023 am 11:25 AM
nginx

Canary Release/Grayscale Release

Le point clé de la version Canary est : les essais et les erreurs. L'origine du canari lui-même est une histoire tragique des belles créatures de la nature dans le développement de l'industrie humaine. Le canari utilise sa vie pour tenter de commettre des erreurs pour la sécurité des mineurs. Un petit coût est utilisé pour échanger contre la sécurité globale. Dans la pratique du déploiement continu, le canari est le contrôle du trafic, comme un pour cent ou un dixième, est utilisé pour vérifier si une certaine version est normale. S'il est anormal, sa fonction sera réalisée au moindre coût et le risque sera réduit. Si cela est normal, vous pouvez augmenter progressivement le poids jusqu'à ce qu'il atteigne 100 % et basculer tout le trafic vers la nouvelle version en douceur. La publication en niveaux de gris est généralement un concept similaire. Le gris est une transition entre le noir et le blanc. Il est différent du déploiement bleu et vert, qui est soit bleu, soit vert. La version en niveaux de gris/version Canary a une période pendant laquelle les deux existent en même temps, mais le trafic correspondant des deux est. Si la version Canary est différente de la version en niveaux de gris, la différence devrait résider dans le but. Le but de la version Canary est d'essayer et d'erreurs, tandis que la version en niveaux de gris concerne la version stable, mais il n'y a aucun problème dans la version Canary. transition dans les circonstances de la publication en niveaux de gris.

Simulation de la version Canary

Ensuite, nous utilisons l'amont de nginx pour simuler simplement le scénario de version Canary. Le scénario spécifique est le suivant. La version principale est actuellement active. En ajustant les paramètres de nginx et en ajustant constamment le poids de la version Canary, une version fluide est enfin obtenue.

Comment utiliser la simulation nginx pour la publication Canary

Préparez-vous à l'avance

Démarrez deux services sur les deux ports 7001/7002 à l'avance pour afficher différentes informations Pour faciliter la démonstration, j'ai utilisé tornado pour créer une image et transmis les paramètres transmis lors du docker. Le conteneur a été démarré. Different est utilisé pour afficher les différences entre les services.

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"
Copier après la connexion

Journal d'exécution

[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 ~]#
Copier après la connexion

Démarrez 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 ..."  7 seconds ago    up 7 seconds    0.0.0.0:9080->80/tcp   nginx-canary
[root@kong ~]#
Copier après la connexion

extrait de code nginx

Préparez l'extrait de code nginx suivant et ajoutez-le au fichier /etc/nginx/conf.d/default.conf de nginx simuler le La méthode est très simple. Utilisez down pour indiquer que le trafic est nul (le poids ne peut pas être mis à zéro dans nginx. Au début, 100% du trafic est envoyé vers la version principale).

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;
  }
}
Copier après la connexion

Comment modifier default.conf

Vous pouvez obtenir l'effet en installant vim dans le conteneur, vous pouvez également le modifier localement puis le transmettre via docker cp, ou le modifier directement avec sed. Si vous installez vim dans un conteneur, utilisez la méthode suivante

[root@kong ~]# docker exec -it nginx-lb sh
# apt-get update
...省略
# apt-get install vim
...省略
Copier après la connexion

Avant modification

# 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;
  #}
}
#
Copier après la connexion

Après modification

# 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;
  #}
}
#
Copier après la connexion

Recharger les paramètres nginx

# nginx -s reload
2018/05/28 05:16:20 [notice] 319#319: signal process started
#
Copier après la connexion

Confirmer les résultats

Toutes les sorties après 10 appels Tout sont v1 dans 7001

[root@kong ~]# cnt=0; while [ $cnt -lt 10 ]; do curl ; let cnt++; bonjour, service : bonjour service principal : v1 dans 7001
bonjour, service :bonjour service principal: v1 en 7001
bonjour, service :bonjour service principal: v1 en 7001
bonjour, service :bonjour service principal: v1 en 7001
bonjour, service :bonjour service principal: v1 en 7001
bonjour, service :bonjour service principal: v1 en 7001
bonjour, service :bonjour service principal: v1 en 7001
bonjour, service :bonjour service principal: v1 en 7001
bonjour, service :bonjour service principal: v1 en 7001
bonjour, service :bonjour service principal : v1 dans 7001
[root@kong ~]#

Version Canary : poids du trafic de la version Canary 10 %

En ajustant le poids de default.conf, puis en exécutant nginx -s reload , ajustez le poids du version canary à 10%, et 10% du trafic exécutera le nouveau service

Comment modifier default.conf

Il vous suffit d'ajuster le poids du serveur en amont comme suit :

upstream nginx_canary {
  server 192.168.163.117:7001 weight=10;
  server 192.168.163.117:7002 weight=90;
}
Copier après la connexion
Copier après la connexion

Recharger nginx settings

# nginx -s reload
2018/05/28 05:20:14 [notice] 330#330: signal process started
#
Copier après la connexion

Confirmez le résultat

[root@kong ~]# cnt=0; while [ $cnt -lt 10 ]; do curl ; v2 en 7002

bonjour, service :bonjour service de déploiement Canary: v2 en 7002
bonjour, service :bonjour service de déploiement Canary: v2 en 7002
bonjour, service :bonjour service de déploiement Canary: v2 en 7002
bonjour, service : bonjour service principal : v1 en 7001
bonjour, service :bonjour service de déploiement Canary: v2 en 7002
bonjour, service :bonjour service de déploiement Canary: v2 en 7002
bonjour, service :bonjour service de déploiement Canary: v2 en 7002
bonjour, service :bonjour canari déployer service: v2 en 7002
bonjour, service :bonjour canary déployer service: v2 en 7002
[root@kong ~]#

Version Canary : le poids du trafic de la version Canary est de 50 %

En ajustant le poids par défaut .conf puis en exécutant nginx -s reload, ajustez le poids de la version Canary à 50%, et 50% du trafic exécutera le nouveau service

Méthode pour modifier default.conf


Ajustez simplement le poids de le serveur en amont comme suit :

upstream nginx_canary {
  server 192.168.163.117:7001 weight=50;
  server 192.168.163.117:7002 weight=50;
}
Copier après la connexion

Recharger les paramètres nginx

# nginx -s reload
2018/05/28 05:22:26 [notice] 339#339: signal process started
#
Copier après la connexion

确认结果

[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;
}
Copier après la connexion
Copier après la connexion

重新加载nginx设定

# nginx -s reload
2018/05/28 05:24:29 [notice] 346#346: signal process started
#
Copier après la connexion

确认结果

[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;
}
Copier après la connexion

重新加载nginx设定

# nginx -s reload
2018/05/28 05:26:37 [notice] 353#353: signal process started
Copier après la connexion

确认结果

[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 ~]#

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

L'accès au fichier du site WordPress est restreint: pourquoi mon fichier .txt n'est-il pas accessible via le nom de domaine? L'accès au fichier du site WordPress est restreint: pourquoi mon fichier .txt n'est-il pas accessible via le nom de domaine? Apr 01, 2025 pm 03:00 PM

L'accès au fichier du site WordPress est restreint: dépannage de la raison pour laquelle le fichier .txt ne peut pas être accessible récemment. Certains utilisateurs ont rencontré un problème lors de la configuration du nom de domaine commercial du programme MINI: � ...

Comment faire coexister PHP5.6 et PHP7 via la configuration Nginx sur le même serveur? Comment faire coexister PHP5.6 et PHP7 via la configuration Nginx sur le même serveur? Apr 01, 2025 pm 03:15 PM

Exécuter plusieurs versions PHP simultanément dans le même système est une exigence commune, en particulier lorsque différents projets dépendent de différentes versions de PHP. Comment être sur la même chose ...

Comment exécuter le projet H5 Comment exécuter le projet H5 Apr 06, 2025 pm 12:21 PM

L'exécution du projet H5 nécessite les étapes suivantes: Installation des outils nécessaires tels que le serveur Web, Node.js, les outils de développement, etc. Créez un environnement de développement, créez des dossiers de projet, initialisez les projets et écrivez du code. Démarrez le serveur de développement et exécutez la commande à l'aide de la ligne de commande. Aperçu du projet dans votre navigateur et entrez l'URL du serveur de développement. Publier des projets, optimiser le code, déployer des projets et configurer la configuration du serveur Web.

Comment intégrer efficacement les services Node.js ou Python sous l'architecture LAMP? Comment intégrer efficacement les services Node.js ou Python sous l'architecture LAMP? Apr 01, 2025 pm 02:48 PM

De nombreux développeurs de sites Web sont confrontés au problème de l'intégration de Node.js ou des services Python sous l'architecture de lampe: la lampe existante (Linux Apache MySQL PHP) a besoin d'un site Web ...

Gitee Pages STATIQUE Le déploiement du site Web a échoué: comment dépanner et résoudre les erreurs de fichier unique 404? Gitee Pages STATIQUE Le déploiement du site Web a échoué: comment dépanner et résoudre les erreurs de fichier unique 404? Apr 04, 2025 pm 11:54 PM

GiteEpages STATIQUE Le déploiement du site Web a échoué: 404 Dépannage des erreurs et résolution lors de l'utilisation de Gitee ...

Comment partager la même page du côté PC et mobile et gérer les problèmes de cache? Comment partager la même page du côté PC et mobile et gérer les problèmes de cache? Apr 01, 2025 pm 01:57 PM

Comment partager la même page du côté PC et mobile et gérer les problèmes de cache? Dans l'environnement Nginx PHP MySQL construit à l'aide de l'arrière-plan Baota, comment faire le côté PC et ...

Quelle est la raison de la redirection des erreurs 404 après s'être connectée au sélénium? Comment le résoudre? Quelle est la raison de la redirection des erreurs 404 après s'être connectée au sélénium? Comment le résoudre? Apr 01, 2025 pm 10:54 PM

Solution pour rediriger 404 erreurs après la connexion de la simulation Lors de l'utilisation du sélénium pour la connexion de la simulation, nous rencontrons souvent des problèmes difficiles. � ...

Comment démarrer efficacement plusieurs services dans Dockerfile? Comment démarrer efficacement plusieurs services dans Dockerfile? Apr 01, 2025 pm 02:15 PM

À propos de l'utilisation efficace des commandes CMD dans Dockerfile De nombreux nouveaux utilisateurs de Docker utilisent CMD ...

See all articles