ホームページ  >  記事  >  バックエンド開発  >  nginx アプリケーション: Blue-Green デプロイメントに nginx を使用する

nginx アプリケーション: Blue-Green デプロイメントに nginx を使用する

不言
不言オリジナル
2018-06-05 09:41:002790ブラウズ

この記事は主に nginx のアプリケーションを紹介します。Blue-Green デプロイメントに nginx を使用することには一定の参考価値があります。必要な友人はそれを参照してください。

この記事では、Blue-Green デプロイメントと nginx の使用方法を紹介します。ブルー グリーン デプロイメントをシミュレートする最も簡単な方法

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

ブルー グリーン デプロイメントの焦点は次の機能にあります
1. ブルーバージョンとグリーンバージョンが同時に存在します
2. 実際の実行環境は Blue または Green であり、スイッチ制御を通じて Blue-Green デプロイメントをシミュレートします

优点和缺点分析:优点在于它的速度和回滚。而缺点也显而易见。可以快速回滚是因为有两套环境同时存在的缘故,所以复杂度和需要的资源会增多,因为其有两套环境。 
 另外虽然速度有所提高,但是在实现的过程中,开关的控制,无论多快的切换速度,如果不结合其他的技术,还是无法做到完全无缝切换。

次に、nginx アップストリームを使用して、Blue-Green デプロイメント シナリオを単純にシミュレートします。具体的なシナリオは次のとおりです。 nginx 設定を調整することで、青色のバージョンが現在アクティブなバージョンとして設定されます。

バージョン 手順
ルーター ユーザーは、http://localhost:8090を介してこのデプロイメントの下のマイクロサービスにアクセスします
青バージョン 現在アクティブなものは、青バージョンです。ポート 7001 でサービスを提供し、プロンプト情報は「Hello blue/green service: v1 in 7001」です
Green version まもなくリリースされる緑バージョンは、ポート 7002 でサービスを提供し、プロンプト情報は「」ですHello blue/green service: v2 in 7002"

事前準備

異なる情報を表示するには、事前に 2 つのポート 7001/7002 で 2 つのサービスを開始してください。デモンストレーションの便宜のために、トルネードを使用してミラーを作成し、 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:7001Hello, Service :Hello blue/green service: v1 in 7001[root@kong ~]# curl http://192.168.163.117:7002Hello, Service :Hello blue/green service: v2 in 7002[root@kong ~]#

nginxを起動

[root@kong ~]# docker run -p 9080:80 --name nginx-blue-green -d nginxd3b7098c44890c15918dc47616b67e5e0eb0da7a443eac266dbf26d55049216a
[root@kong ~]# docker ps |grep nginx-blue-greend3b7098c4489        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に追加する シミュレーション方法は非常に簡単です。 through 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.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_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 reload2018/05/28 04:39:47 [notice] 321#321: signal process started#

結果を確認

10回の呼び出し後のすべての出力は7001のv1です

[root@kong ~]# cnt=0; while [ $cnt -lt 10 ]> do> curl http://localhost:9080> let cnt++
> done
Hello, Service :Hello blue/green service: v1 in 7001Hello, Service :Hello blue/green service: v1 in 7001Hello, Service :Hello blue/green service: v1 in 7001Hello, Service :Hello blue/green service: v1 in 7001Hello, Service :Hello blue/green service: v1 in 7001Hello, Service :Hello blue/green service: v1 in 7001Hello, Service :Hello blue/green service: v1 in 7001Hello, Service :Hello blue/green service: v1 in 7001Hello, Service :Hello blue/green service: v1 in 7001Hello, Service :Hello blue/green service: v1 in 7001[root@kong ~]#

Blue-グリーンデプロイメント: グリーンバージョンに切り替える

default.conf の重みを調整して nginx -s reload を実行することで、nginx サービスを停止せずに動的にグリーンバージョンに切り替えることができます。ターゲットは、v2 で出力されているすべてのトラフィックになります。 7002

default.conf の変更方法

次のようにアップストリームのサーバーの重みを調整するだけです:

upstream nginx_blug_green {    server 192.168.163.117:7001 down;    server 192.168.163.117:7002 weight=100;
}

nginx 設定をリロード

# nginx -s reload2018/05/28 05:01:28 [notice] 330#330: signal process started#

結果を確認する

[root@kong ~]# cnt=0; while [ $cnt -lt 10 ]; do curl http://localhost:9080; let cnt++; doneHello, Service :Hello blue/green service: v2 in 7002Hello, Service :Hello blue/green service: v2 in 7002Hello, Service :Hello blue/green service: v2 in 7002Hello, Service :Hello blue/green service: v2 in 7002Hello, Service :Hello blue/green service: v2 in 7002Hello, Service :Hello blue/green service: v2 in 7002Hello, Service :Hello blue/green service: v2 in 7002Hello, Service :Hello blue/green service: v2 in 7002Hello, Service :Hello blue/green service: v2 in 7002Hello, Service :Hello blue/green service: v2 in 7002[root@kong ~]#

関連する推奨事項:

nginx アプリケーション: nginx を使用した Canary パブリッシング

以上がnginx アプリケーション: Blue-Green デプロイメントに nginx を使用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。