この記事では、ブルーグリーン デプロイメントと、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)の透かし除去ツールの実装コード
Binlog は、MySQL データの変更を記録するために使用されるバイナリ ログ ファイルです。B...
目次マルチアプリケーションの展開1-Tomcat 構成1.1- プロジェクト構成1.2-サービス構成...
1. 背景1. vSphere の共有ストレージの背景を簡単に紹介するvSphere の重要な機能は...
<br />関連記事: ハイパーリンクを表示して開く方法症状<br />ユー...
さっそくコードを見てみましょう * { マージン: 0; パディング: 0; } 。容器 { マージ...
最も単純な hello world 出力イメージを作成することは最も簡単なスタートですが、実行中のコ...
目次1. 新しいII. 変更element-ui は、Ele.me のフロントエンド チームが開発者...
この記事では、タブ切り替え効果を実現するためのJavaScriptの具体的なコードを参考までに紹介し...
ZFSの歴史Z ファイル システム (ZFS) は、2001 年に Matthew Ahrens と...
目次1. 概要2. Django プロジェクト3. Vueプロジェクト1. 概要プロジェクトで、ダウ...
Linux でディレクトリを切り替えるとなると、誰もが間違いなくcdコマンドを思い浮かべるでしょう。...
地球の円周率と半径、検索ポイントの経度と緯度から、検索ポイントと検索データテーブル間の距離はNキロメ...
今日仕事中に、ビジネス側から次のような質問をされました。テーブルがあり、一意のフィールドを追加する必...
序文: Vue プロジェクトで現在のマウスの座標を取得するにはどうすればよいでしょうか。ここで共有す...
背景PNG 画像は jpg 画像よりも多くのストレージスペースを占有しますが、PNG 画像の品質は大...