ブルー グリーン デプロイメント
ブルー グリーン デプロイメントの焦点は次の機能にあります
1. ブルー バージョンと緑色のバージョンも同時に存在します
2。実際の実行環境は青色または緑色であり、スイッチによって制御されるのはいずれか 1 つだけです
#長所と短所の分析: 利点は、速度とロールバックです。そして欠点も明らかです。 2 セットの環境が同時に存在するため、迅速なロールバックが可能です。環境が 2 セット存在するため、複雑さと必要なリソースが増加します。
また、速度は向上しましたが、実装の過程では、スイッチの制御は、どんなにスイッチング速度が速くても、他の技術を組み合わせなければ完全にシームレスなスイッチングを実現することはできません。
Blue-Green デプロイメントのシミュレーション
次に、nginx のアップストリームを使用して、Blue-Green デプロイメント シナリオを単純にシミュレートします。具体的なシナリオは、青色のバージョンが現在アクティブですが、nginx の設定を調整することで、緑色のバージョンが現在アクティブなバージョンに設定されます。
#事前準備
2 つのポート 7001/7002 で 2 つのサービスを事前に起動し、異なる情報を表示します。便利です tornadoを使って画像を作成しました Dockerコンテナ起動時に渡される各種パラメータはサービスの違いを表示するために使用されます。docker run -d -p 7001:8080 liumiaocn/tornado:latest python /usr/local/bin/daemon.py "hello blue/green service: v1 in 7001" docker run -d -p 7002:8080 liumiaocn/tornado:latest python /usr/local/bin/daemon.py "hello blue/green service: v2 in 7002"
実行ログ
[root@kong ~]# docker run -d -p 7001:8080 liumiaocn/tornado:latest python /usr/local/bin/daemon.py "hello blue/green service: v1 in 7001" 70c74dc8e43d5635983f7240deb63a3fc0599d5474454c3bc5197aa5c0017348 [root@kong ~]# docker run -d -p 7002:8080 liumiaocn/tornado:latest python /usr/local/bin/daemon.py "hello blue/green service: v2 in 7002" 6c5c2ea322d4ac17b90feefb96e3194ec8adecedaa4c944419316a2e4bf07117 [root@kong ~]# curl http://192.168.163.117:7001 hello, service :hello blue/green service: v1 in 7001 [root@kong ~]# curl http://192.168.163.117:7002 hello, service :hello blue/green service: v2 in 7002 [root@kong ~]#
nginxの開始
[root@kong ~]# docker run -p 9080:80 --name nginx-blue-green -d nginx d3b7098c44890c15918dc47616b67e5e0eb0da7a443eac266dbf26d55049216a [root@kong ~]# docker ps |grep nginx-blue-green d3b7098c4489 nginx "nginx -g 'daemon ..." 10 seconds ago up 9 seconds 0.0.0.0:9080->80/tcp nginx-blue-green [root@kong ~]#
nginxコードセグメント
以下の nginx コード スニペットを用意し、nginx の /etc/nginx/conf.d/default.conf に追加します。シミュレーション方法は非常に簡単です。トラフィックがゼロであることを示すには、down を使用します (重みをゼロに設定することはできません)。 nginx) 最初は、トラフィックの 100% が青色のバージョンに送信されました。http { upstream nginx_blug_green { 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_blug_green; } }
default.conf を変更する方法
vim をコンテナにインストールすることで効果を実現できます。また、ローカルで変更して docker cp 経由で渡すこともできます。 、または直接 sed 変更が可能です。 vim をコンテナにインストールする場合は、次の方法を使用します。[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_blug_green { 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_blug_green; } #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 設定をリロードします
# nginx -s reload 2018/05/28 04:39:47 [notice] 321#321: signal process started #
##10 回の呼び出しすべての出力は 7001 の v1 です
[ root@kong ~]# cnt=0; while [ $cnt -lt 10 ]>do
>curl>let cnt>done
こんにちは、サービス : hello blue/green サービス: v1 in 7001
hello、サービス :hello blue/green サービス: v1 in 7001
hello、サービス :hello blue/green サービス: v1 in 7001
hello、サービス : hello blue /green サービス: v1 in 7001
hello、サービス :hello blue/green サービス: v1 in 7001
hello、サービス :hello blue/green サービス: v1 in 7001
hello、サービス :hello blue /greenサービス: 7001 の v1
hello、サービス :hello ブルー/グリーン サービス: 7001 の v1
hello、サービス :hello ブルー/グリーン サービス: 7001 の v1
hello、サービス :hello ブルー/グリーン サービス: 7001 の v1
[root@kong ~]
#Blue-Green デプロイメント: グリーン バージョンに切り替える
default.conf の重みを調整することにより, そして、nginx -s reload を実行します。nginx サービスを停止せずに、動的にグリーン バージョンに切り替えることができます。ターゲットは、7002 ですべてのトラフィックを v2 に出力します
デフォルトの .conf メソッドを変更します
次のように上流のサーバーの重みを調整するだけです。upstream nginx_blug_green {
server 192.168.163.117:7001 down;
server 192.168.163.117:7002 weight=100;
}
# nginx -s reload 2018/05/28 05:01:28 [notice] 330#330: signal process started #
結果を確認します
[root@kong ~]# cnt=0; while [ $cnt -lt 10 ]; docurl ; let cnt ; 完了hello, サービス :hello blue/greenサービス: v2 in 7002
hello, サービス :hello blue/green サービス: v2 in 7002hello, サービス :hello blue/green サービス: v2 in 7002hello, サービス : hello blue/green サービス: v2 で 7002
hello、サービス :hello ブルー/グリーン サービス: v2 で 7002
hello、サービス :hello ブルー/グリーン サービス: v2 で 7002
hello、サービス :hello ブルー/グリーン サービス: v2 で7002
hello、サービス :hello blue/green サービス:7002 の v2
hello、サービス :hello blue/green サービス:7002 の v2
hello、サービス :hello blue/green サービス:7002 の v2
[root@kong ~]
#
以上がBlue-Green デプロイメントに nginx シミュレーションを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。