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.
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"
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 ~]#
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 ~]#
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; } }
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 ...省略
# 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;
#}
}
#
# 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;
#}
}
#
# nginx -s reload
2018/05/28 05:16:20 [notice] 319#319: signal process started
#
Semua output 10 panggilan adalah v1 dalam 7001
[ root@kong ~]# cnt=0; manakala [ $cnt -lt 10]; : v1 dalam 7001hello, perkhidmatan :hello perkhidmatan utama: v1 dalam 7001hello, 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.confAnda 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;
}
# nginx -s reload 2018/05/28 05:20:14 [notice] 330#330: signal process started #
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 7002hello, service :hello canary deploy service: v2 in 7002helo, 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.confAnda 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;
}
# 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 ~]#
Atas ialah kandungan terperinci Cara menggunakan simulasi nginx untuk penerbitan kenari. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!