この記事は主に nginx アプリケーションを紹介します。カナリア パブリッシングに nginx を使用することには、特定の参考値があります。必要な友人はそれを参照できます。
この記事では、Blue-Green デプロイメントと nginx の使用方法を紹介します。最も簡単な方法でのカナリア リリース
カナリア リリースの重要なポイントは、試行錯誤です。カナリアの放鳥自体の起源は、人類の産業発展の過程における美しい自然の生き物たちの悲劇的な物語です。カナリアは、鉱山労働者の安全のために命をかけて試行錯誤します。全体的なセキュリティを確保するために、少量のコストが使用されます。カナリアは、特定のバージョンが正常であるかどうかを確認するために、1 パーセントまたは 10 分の 1 などの非常に少量のトラフィックを制御します。異常であれば、その機能は最小限のコストで達成され、リスクは軽減されます。正常であれば、100% に達するまで徐々に重みを増やし、すべてのトラフィックを新しいバージョンにスムーズに切り替えることができます。グレースケール パブリッシングも一般に同様の概念です。グレーは黒と白の間の遷移であり、青または緑のどちらかのグレースケール リリースとカナリア リリースには、両方が同時に存在する期間がありますが、この 2 つの対応するトラフィックは異なります。カナリア リリースがグレースケール リリースと異なる場合、その違いは試行錯誤が目的であり、グレースケール リリースは安定したリリースを目的としていますが、カナリア リリースでは問題はありません。グレースケールリリースの状況下で。
次に、nginx のアップストリームを使用して、カナリアリリースのシナリオを単純にシミュレートします。具体的なシナリオは次のとおりです。現在、メイン バージョンがアクティブになっており、nginx の設定を調整し、Canary バージョンの重みを常に調整することで、最終的にスムーズなリリースが実現されます。
バージョン | 説明 |
---|---|
ルーター | ユーザーは http://localhost:8090 を通じてこのデプロイメントの下でマイクロサービスにアクセスします |
メイン バージョン | サービス内の現在アクティブなメイン バージョンはポート 7001 で提供され、プロンプト メッセージは「Hello main service: v1 in 7001」です |
Canary バージョン | トライアル アンド エラーの Canary バージョン、サービスはポート 7002 で提供され、プロンプト メッセージは「Hello Canarydeployservice:v2in7002" |
異なる情報を表示するために、事前に2つのポート7001/7002で2つのサービスを起動してください。デモンストレーションの便宜上、トルネードを使用してミラーを作成し、パスしましたDocker コンテナーの起動を通じて、サービスの違いを表示するためにさまざまなパラメーターが使用されます。
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 ~]#
以下のnginxコードスニペットを用意し、nginxの/etc/nginx/conf.d/default.confに追加する シミュレーション方法は非常に簡単です。 through down トラフィックがゼロ (nginx では重みをゼロに設定できない) であることを示すために、トラフィックの 100% が最初にメイン バージョンに送信されます。
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; } }
vim をコンテナにインストールすることで効果を実現できます。また、ローカルで変更して docker cp 経由で渡すことも、sed で直接変更することもできます。 vimをコンテナにインストールする場合は、次の方法を使用します
[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回の呼び出し後のすべての出力は7001のv1です
[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 ~]#
default.conf のウェイトを調整して nginx -s reload を実行すると、Canary バージョンのウェイトが 10% に調整され、トラフィックの 10% が実行されます New service
以下のようにアップストリームのサーバーの重みを調整するだけです:
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 ~]#
default.conf の重みを調整してから nginx -s reload を実行すると、カナリア バージョンの重みが 50% に調整され、新しいサービスが実行されます
のみ。上流のサーバーのウェイトを次のように調整する必要があります:
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 ~]#
調整によりデフォルトのウェイトです。 conf を変更して、nginx -s reload を実行し、カナリア バージョンの重みを 90% に調整すると、トラフィックの 90% が新しいサービスを実行します
アップストリームを変更するだけです
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 ~]#
default.confのウェイトを調整し、nginx -s reloadを実行この方法では、カナリア バージョンの重みを 100% に調整すると、トラフィックの 100% が新しいサービスを実行します
次のようにアップストリームのサーバーの重みを調整するだけです:
<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 ~]#
関連する推奨事項:
以上がnginx アプリケーション: nginx を使用したカナリア公開の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。