この記事では、ブルーグリーン デプロイメントと、nginx を使用してカナリア リリースを最も簡単な方法でシミュレートする方法について説明します。 カナリアリリース/グレースケールリリース カナリアリリースのポイントは試行錯誤です。カナリアの放鳥の起源は、自然の美しい生き物が人間の産業の過程で開発されてきたという悲劇的な物語です。カナリアは、鉱夫たちの安全のために試行錯誤しながら人生を歩んでいます。全体的なセキュリティと引き換えに、非常に少ないコストで実行します。継続的デプロイメントの実践において、カナリアはトラフィック制御です。1 パーセントや 10 分の 1 などの非常に少ないトラフィックを使用して、特定のバージョンが正常かどうかを検証します。正常でない場合は、最も低いコストで機能を実現し、リスクを軽減します。正常であれば、重みを徐々に 100% まで増やし、すべてのトラフィックを新しいバージョンにスムーズに切り替えることができます。グレースケールリリースも、一般的には同様の概念です。グレーは、黒と白の間の遷移です。青でも緑でもないブルーグリーンデプロイメントとは異なり、グレーリリース/カナリアリリースが共存する期間がありますが、対応するトラフィックが異なります。カナリアリリースがグレーリリースと異なる場合、その違いは目的であるはずです。カナリアリリースの目的は試行錯誤ですが、グレーリリースはスムーズなリリースです。カナリアリリースで問題がない場合に行われるスムーズな遷移がグレーリリースです。 カナリアリリースのシミュレーション 次に、nginx のアップストリームを使用して、カナリア リリース シナリオを簡単にシミュレートします。具体的なシナリオは以下のとおりです。現在、メインバージョンがアクティブです。nginx の設定を調整し、カナリアバージョンの重みを継続的に調整することで、最終的にスムーズなリリースが実現します。 準備 2 つのサービスがそれぞれポート 7001/7002 で起動され、異なる情報が表示されます。デモンストレーションの便宜上、tornado を使用してミラーが作成されます。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: 7002 の v2" 実行ログ [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 こんにちは、サービス:こんにちはメインサービス:7001のv1 [root@kong ~]# curl http://192.168.163.117:7002 こんにちは、サービス:こんにちはカナリアデプロイサービス: 7002 の v2 [root@kong ~]# 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 秒前 7 秒前に起動 0.0.0.0:9080->80/tcp nginx-canary [root@kong ~]# nginx コードスニペット 以下の nginx コード スニペットを用意し、nginx の /etc/nginx/conf.d/default.conf に追加します。シミュレーション方法は非常に簡単です。Down はトラフィックがゼロであることを示すために使用されます (nginx では重みをゼロに設定できません)。最初は、トラフィックの 100% がメイン バージョンに送信されます。 http { アップストリーム nginx_canary { サーバー 192.168.163.117:7001 重み=100; サーバー 192.168.163.117:7002 がダウンしています。 } サーバー{ 聞く 80; サーバー名 www.liumiao.cn 192.168.163.117; 位置 / { proxy_pass http://nginx_canary; } } default.conf を変更する方法 これは、コンテナに vim をインストールし、ローカルで変更してから docker cp 経由で渡すか、sed で直接変更することで実現できます。コンテナにvimをインストールする場合は、次の方法を使用します [root@kong ~]# docker exec -it nginx-lb sh # apt-getアップデート ...省略 #apt-get install vim ...省略 修正前 # cat デフォルト.conf サーバー{ 聞く 80; server_name ローカルホスト; #文字セット koi8-r; #access_log /var/log/nginx/host.access.log メイン; 位置 / { ルート /usr/share/nginx/html; インデックス index.html index.htm; } #エラーページ 404 /404.html; # サーバーのエラーページを静的ページ /50x.html にリダイレクトします # エラーページ 500 502 503 504 /50x.html; 場所 = /50x.html { ルート /usr/share/nginx/html; } # PHP スクリプトを 127.0.0.1:80 で listen している Apache にプロキシします # #場所 ~ \.php$ { # プロキシパス http://127.0.0.1; #} # PHP スクリプトを 127.0.0.1:9000 で待機している FastCGI サーバーに渡します # #場所 ~ \.php$ { #ルートhtml; #fastcgi_pass 127.0.0.1:9000; # fastcgi_index インデックス.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; #fastcgi_params を含めます。 #} # Apacheのドキュメントルートが.htaccessファイルへのアクセスを拒否する # nginxのものと一致します # #場所 ~ /\.ht { # すべて拒否; #} } # 後 # cat デフォルト.conf アップストリーム nginx_canary { サーバー 192.168.163.117:7001 重み=100; サーバー 192.168.163.117:7002 がダウンしています。 } サーバー{ 聞く 80; サーバー名 www.liumiao.cn 192.168.163.117; #文字セット koi8-r; #access_log /var/log/nginx/host.access.log メイン; 位置 / { nginx を /usr/share/html にコピーします。 #インデックス index.html index.htm; proxy_pass http://nginx_canary; } #エラーページ 404 /404.html; # サーバーのエラーページを静的ページ /50x.html にリダイレクトします # エラーページ 500 502 503 504 /50x.html; 場所 = /50x.html { ルート /usr/share/nginx/html; } # PHP スクリプトを 127.0.0.1:80 で listen している Apache にプロキシします # #場所 ~ \.php$ { # プロキシパス http://127.0.0.1; #} # PHP スクリプトを 127.0.0.1:9000 で待機している FastCGI サーバーに渡します # #場所 ~ \.php$ { #ルートhtml; #fastcgi_pass 127.0.0.1:9000; # fastcgi_index インデックス.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; #fastcgi_params を含めます。 #} # Apacheのドキュメントルートが.htaccessファイルへのアクセスを拒否する # nginxのものと一致します # #場所 ~ /\.ht { # すべて拒否; #} } # nginx設定を再読み込み # nginx -s リロード 2018/05/28 05:16:20 [通知] 319#319: シグナル処理が開始されました # 結果を確認する 10回の呼び出しすべてが7001でv1を出力しました
カナリアリリース: カナリアバージョンのトラフィックの重みは 10% です default.conf の重みを調整してから nginx -s reload を実行すると、カナリア バージョンの重みが 10% に調整され、トラフィックの 10% で新しいサービスが実行されるようになります。 default.conf を変更する方法 アップストリームのサーバーの重みを次のように調整するだけです。 アップストリーム nginx_canary { サーバー 192.168.163.117:7001 重み=10; サーバー 192.168.163.117:7002 重み=90; } nginx設定を再読み込み # nginx -s リロード 2018/05/28 05:20:14 [通知] 330#330: シグナル処理が開始されました # 結果を確認する
カナリアリリース: カナリアバージョンのトラフィックの重みは 50% default.conf の重みを調整してから nginx -s reload を実行すると、カナリア バージョンの重みが 50% に調整され、トラフィックの 50% で新しいサービスが実行されるようになります。 default.conf を変更する方法 アップストリームのサーバーの重みを次のように調整するだけです。 アップストリーム nginx_canary { サーバー 192.168.163.117:7001 重み=50; サーバー 192.168.163.117:7002 重み=50; } nginx設定を再読み込み # nginx -s リロード 2018/05/28 05:22:26 [通知] 339#339: シグナル処理が開始されました # 結果を確認する
カナリアリリース:カナリアバージョンのトラフィックの重みは90% default.conf の重みを調整してから nginx -s reload を実行すると、カナリア バージョンの重みが 90% に調整され、トラフィックの 90% で新しいサービスが実行されるようになります。 default.conf を変更する方法 アップストリームのサーバーの重みを次のように調整するだけです。 アップストリーム nginx_canary { サーバー 192.168.163.117:7001 重み=10; サーバー 192.168.163.117:7002 重み=90; } nginx設定を再読み込み # nginx -s リロード 2018/05/28 05:24:29 [通知] 346#346: シグナル処理が開始されました # 結果を確認する
カナリアリリース: カナリアバージョンのトラフィックの重みは 100% です default.conf の重みを調整してから nginx -s reload を実行すると、カナリア バージョンの重みが 100% に調整され、トラフィックの 100% で新しいサービスが実行されるようになります。 default.conf を変更する方法 アップストリームのサーバーの重みを次のように調整するだけです。 アップストリーム nginx_canary { サーバー 192.168.163.117:7001 がダウンしています。 サーバー 192.168.163.117:7002 重み=100; } nginx設定を再読み込み # nginx -s リロード 2018/05/28 05:26:37 [通知] 353#353: シグナル処理が開始されました 結果を確認する
要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。 以下もご興味があるかもしれません:
|
<<: ショートビデオ(Douyin)の透かし除去ツールの実装コード
HTML を学ぶメリットは何ですか? 1: ウェブサイトやブログのウェブ構造を簡単に変更できます。...
この記事の例では、簡単な計算機を実装するための小さなプログラムの具体的なコードを参考までに共有してい...
:is と :where とは何ですか? :is()と:where()は、セレクターを作成するとき...
目次序文1. エラーログ2. バイナリログ1. バイナリログを有効にする2. バイナリログ形式3. ...
目次導入Intel CPUをサポートApple M1のサポートテスト導入このプロジェクトでは最近、P...
1. イベントが有効になっているかどうかを確認する'%sche%' のような変数を表...
この記事では、二次リンクを実現するためのReactの具体的なコードを参考までに共有します。具体的な内...
この記事では、MySQL 5.7 で追加された json フィールド タイプの使用方法を例を使って説...
休憩中に、眠気を完全に吹き飛ばす電話がかかってきました。「開発者が更新 SQL を書くときに whe...
目次基本設定エントリファイル main.jsアプリ.vue表紙ヘッダー検索バー本体当プロジェクトでは...
フロントエンド開発者としては、IEの落とし穴は避けて通れません。他のブラウザはいいのにIEは壊れてい...
この記事は、参考のためにMySQL 8.0.18のインストールと設定のグラフィックチュートリアルを記...
マウスが画像の上を通過したときに画像のハイパーリンクを変更する方法:コードをコピーコードは次のとおり...
binlog は、すべての mysql dml 操作を記録するバイナリ ログ ファイルです。 bin...
導入Memcached は分散キャッシュ システムです。Memcached には認証とセキュリティ制...