ホームページ  >  記事  >  運用・保守  >  Blue-Green デプロイメントに nginx シミュレーションを使用する方法

Blue-Green デプロイメントに nginx シミュレーションを使用する方法

WBOY
WBOY転載
2023-06-03 12:31:03895ブラウズ

ブルー グリーン デプロイメント

ブルー グリーン デプロイメントの焦点は次の機能にあります

  • 1. ブルー バージョンと緑色のバージョンも同時に存在します

  • 2。実際の実行環境は青色または緑色であり、スイッチによって制御されるのはいずれか 1 つだけです

#長所と短所の分析: 利点は、速度とロールバックです。そして欠点も明らかです。 2 セットの環境が同時に存在するため、迅速なロールバックが可能です。環境が 2 セット存在するため、複雑さと必要なリソースが増加します。
また、速度は向上しましたが、実装の過程では、スイッチの制御は、どんなにスイッチング速度が速くても、他の技術を組み合わせなければ完全にシームレスなスイッチングを実現することはできません。

Blue-Green デプロイメントのシミュレーション

次に、nginx のアップストリームを使用して、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 設定をリロードします

# 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 7002
hello, サービス :hello blue/green サービス: v2 in 7002

hello, サービス : 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 サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。