Cara menggunakan simulasi nginx untuk penerbitan kenari

王林
Lepaskan: 2023-05-15 11:25:05
ke hadapan
889 orang telah melayarinya

Keluaran kanari/Keluaran skala kelabu

Titik utama pelepasan kenari ialah: percubaan dan kesilapan. Asal usul pelepasan kenari itu sendiri adalah kisah tragis tentang makhluk alam yang indah dalam pembangunan industri manusia. Burung kenari menggunakan nyawanya untuk mencuba dan membuat kesilapan demi keselamatan pelombong. Kos yang kecil digunakan untuk menukar keselamatan keseluruhan Dalam amalan penggunaan berterusan, kenari adalah kawalan trafik Jumlah trafik yang sangat kecil, seperti satu peratus atau satu persepuluh, digunakan untuk mengesahkan sama ada versi tertentu adalah normal. Jika ia tidak normal, fungsinya akan dicapai pada kos yang paling rendah dan risiko akan dikurangkan. Jika ia normal, anda boleh meningkatkan berat secara beransur-ansur sehingga mencapai 100%, dan menukar semua trafik kepada versi baharu dengan lancar. Penerbitan skala kelabu secara amnya adalah konsep yang serupa. Kelabu ialah peralihan antara hitam dan putih Ia berbeza daripada penggunaan biru dan hijau, iaitu sama ada biru atau hijau Keluaran skala kelabu/keluaran kenari mempunyai tempoh masa apabila kedua-duanya wujud pada masa yang sama, tetapi trafik yang sepadan bagi kedua-duanya. Berbeza. Jika keluaran kenari berbeza dengan keluaran skala kelabu, perbezaannya haruslah pada tujuan pelepasan kenari adalah percubaan dan kesilapan, manakala pelepasan skala kelabu adalah mengenai pelepasan stabil, tetapi tidak ada masalah dalam pelepasan kenari peralihan di bawah keadaan pelepasan skala kelabu.

Simulasi pelepasan kenari

Seterusnya kami menggunakan huluan nginx untuk mensimulasikan senario keluaran kenari sahaja. Senario khusus adalah seperti berikut Versi utama sedang aktif Dengan melaraskan tetapan nginx dan sentiasa melaraskan berat versi kenari, pelepasan lancar akhirnya dicapai.

Cara menggunakan simulasi nginx untuk penerbitan kenari

Persediaan lebih awal

Mulakan dua perkhidmatan pada dua port 7001/7002 lebih awal untuk memaparkan maklumat yang berbeza mudah. ​​Saya menggunakan puting beliung untuk membuat imej Parameter berbeza yang diluluskan semasa memulakan bekas docker digunakan untuk memaparkan perbezaan dalam perkhidmatan.

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"
Salin selepas log masuk

Log pelaksanaan

[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 ~]#
Salin selepas log masuk

Mulakan 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 ~]#
Salin selepas log masuk

coretan kod nginx<🎜 🎜> Sediakan coretan kod nginx berikut dan tambahkannya pada /etc/nginx/conf.d/default.conf of nginx Kaedah simulasi adalah sangat mudah untuk menunjukkan bahawa trafik adalah sifar dalam nginx). Pada mulanya, 100% trafik dihantar ke versi utama.

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;
  }
}
Salin selepas log masuk

Cara mengubah suai default.conf

Anda boleh mencapai kesan dengan memasang vim dalam bekas, anda juga boleh mengubah suainya secara setempat dan menghantarnya melalui cp docker , atau secara langsung sed Pengubahsuaian boleh dilakukan. Jika anda memasang vim dalam bekas, gunakan kaedah berikut

[root@kong ~]# docker exec -it nginx-lb sh
# apt-get update
...省略
# apt-get install vim
...省略
Salin selepas log masuk

Sebelum pengubahsuaian

# 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&#39;s document root
  # concurs with nginx&#39;s one
  #
  #location ~ /\.ht {
  #  deny all;
  #}
}
#
Salin selepas log masuk

Selepas pengubahsuaian

# 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&#39;s document root
  # concurs with nginx&#39;s one
  #
  #location ~ /\.ht {
  #  deny all;
  #}
}
#
Salin selepas log masuk

Muat semula tetapan nginx

# nginx -s reload
2018/05/28 05:16:20 [notice] 319#319: signal process started
#
Salin selepas log masuk

Sahkan keputusan

Semua output 10 panggilan adalah v1 dalam 7001

[ root@kong ~]# cnt=0; manakala [ $cnt -lt 10]; : v1 dalam 7001
hello, perkhidmatan :hello perkhidmatan utama: v1 dalam 7001

hello, perkhidmatan :hello perkhidmatan utama: v1 dalam 7001
hello, perkhidmatan :hello perkhidmatan utama: v1 dalam 7001
hello , perkhidmatan :hello perkhidmatan utama: v1 dalam 7001
hello, perkhidmatan :hello perkhidmatan utama: v1 dalam 7001
hello, perkhidmatan :hello perkhidmatan utama: v1 dalam 7001
hello, perkhidmatan :hello perkhidmatan utama : v1 pada tahun 7001
hello, perkhidmatan :hello perkhidmatan utama: v1 pada tahun 7001
[root@kong ~]#



Keluaran kanari: Trafik versi Canary Berat 10%

Dengan melaraskan berat default.conf dan kemudian melaksanakan nginx -s muat semula, laraskan berat versi kenari kepada 10% dan 10% daripada trafik akan melaksanakan perkhidmatan baharu

Cara mengubah suai default.conf

Anda hanya perlu melaraskan berat pelayan di hulu seperti berikut:

upstream nginx_canary {
  server 192.168.163.117:7001 weight=10;
  server 192.168.163.117:7002 weight=90;
}
Salin selepas log masuk
Salin selepas log masuk

Muat semula tetapan nginx Tentukan

# nginx -s reload
2018/05/28 05:20:14 [notice] 330#330: signal process started
#
Salin selepas log masuk

Sahkan hasil

[root@kong ~]# cnt=0; sambil [ $cnt -lt 10 ]; ; selesaihello, perkhidmatan :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

helo, perkhidmatan :hello canary deploy service: v2 in 7002
hello, service :hello perkhidmatan utama: 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 ~]#



Keluaran kenari: Berat trafik versi Canary 50%

melalui pelarasan Berat lalai.conf, dan kemudian laksanakan muat semula nginx -s, laraskan berat versi kenari kepada 50%, dan 50% daripada trafik akan melaksanakan perkhidmatan baharu

Kaedah untuk mengubah suai default.conf

Anda hanya perlu melaraskan berat pelayan di hulu seperti berikut:

upstream nginx_canary {
  server 192.168.163.117:7001 weight=50;
  server 192.168.163.117:7002 weight=50;
}
Salin selepas log masuk

Muat semula tetapan nginx

# nginx -s reload
2018/05/28 05:22:26 [notice] 339#339: signal process started
#
Salin selepas log masuk

确认结果

[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;
}
Salin selepas log masuk
Salin selepas log masuk

重新加载nginx设定

# nginx -s reload
2018/05/28 05:24:29 [notice] 346#346: signal process started
#
Salin selepas log masuk

确认结果

[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;
}
Salin selepas log masuk

重新加载nginx设定

# nginx -s reload
2018/05/28 05:26:37 [notice] 353#353: signal process started
Salin selepas log masuk

确认结果

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

Atas ialah kandungan terperinci Cara menggunakan simulasi nginx untuk penerbitan kenari. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!