>  기사  >  백엔드 개발  >  nginx 애플리케이션: 블루-그린 배포를 위해 nginx 사용

nginx 애플리케이션: 블루-그린 배포를 위해 nginx 사용

不言
不言원래의
2018-06-05 09:41:002741검색

이 글에서는 주로 nginx의 응용을 소개합니다: blue-green 배포를 위해 nginx를 사용하는 것은 어느 정도 참고할만한 가치가 있습니다. 이제 필요한 친구들이 참고할 수 있도록 공유하겠습니다.

이 글에서는 blue-green 배포와 nginx 사용 방법을 소개합니다. 블루-그린 배포를 시뮬레이션하는 가장 간단한 방법

블루-그린 배포

블루-그린 배포의 초점은 다음 기능에 있습니다
1. 블루 버전과 그린 버전이 동시에 존재합니다
2. 실제 실행 환경은 블루 또는 그린 중 하나만 가능합니다. 스위치 제어를 통한 블루-그린 배포 시뮬레이션

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

다음으로 nginx 업스트림을 사용하여 블루-그린 배포 시나리오를 간단히 시뮬레이션합니다. 구체적인 시나리오는 다음과 같습니다. nginx 설정을 조정하면 파란색 버전이 현재 활성화된 버전으로 설정됩니다.

Version Instructions
router 사용자는 http://localhost:8090
블루 버전 을 통해 이 배포에서 마이크로서비스에 액세스합니다. , 제공 서비스는 포트 7001에서 서비스를 제공하며 프롬프트 정보는 "Hello blue/green service: v1 in 7001"입니다.
Green 버전 그린 버전은 곧 출시될 예정이며 포트 7002에서 서비스를 제공하며 프롬프트 정보는 "Hello blue/green service: v2 in 7002"

미리 준비하세요

7001/7002 두 포트에서 두 서비스를 미리 시작하면 서로 다른 정보가 표시됩니다. 시연의 편의를 위해 토네이도를 이용해 거울을 만들고 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 ~]#

Start 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 트래픽이 0임을 나타내기 위해(nginx에서는 가중치를 0으로 설정할 수 없음) 처음에는 트래픽의 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번 호출 후 모든 출력은 v1 in 7001

[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

를 사용한 카나리아 게시

위 내용은 nginx 애플리케이션: 블루-그린 배포를 위해 nginx 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.