• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    使用nginx模拟进行蓝绿部署的方式

    这篇文章介绍一下蓝绿部署以及使用nginx如何最简单地模拟一下蓝绿部署的方式

    蓝绿部署

    蓝绿部署的重点在于如下特点

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

    模拟蓝绿部署

    接下来我们使用nginx的upstream来简单模拟一下蓝绿部署的场景。具体场景如下, 当前活跃的是蓝色版本,通过调整nginx设定,将绿色版本设定为当前活跃版本。

    事前准备

    事前在7001/7002两个端口分别启动两个服务,用于显示不同信息,为了演示方便,使用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中无法将weight设置为零),开始的时候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次调用全部输出的都是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 7001
    Hello, Service :Hello blue/green service: v1 in 7001
    Hello, Service :Hello blue/green service: v1 in 7001
    Hello, Service :Hello blue/green service: v1 in 7001
    Hello, Service :Hello blue/green service: v1 in 7001
    Hello, Service :Hello blue/green service: v1 in 7001
    Hello, Service :Hello blue/green service: v1 in 7001
    Hello, Service :Hello blue/green service: v1 in 7001
    Hello, Service :Hello blue/green service: v1 in 7001
    Hello, Service :Hello blue/green service: v1 in 7001
    [root@kong ~]#

    蓝绿部署:切换到绿色版本

    通过调整default.conf的weight,然后执行nginx -s reload的方式,在不停止nginx服务的方式下可动态的切换到绿色版本,目标将会将全部的流量都输出v2 in 7002

    修改default.conf的方法

    只需要将upstream中的server的权重做如下调整:

    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 ]; do curl http://localhost:9080; let cnt++; done
    Hello, Service :Hello blue/green service: v2 in 7002
    Hello, Service :Hello blue/green service: v2 in 7002
    Hello, Service :Hello blue/green service: v2 in 7002
    Hello, Service :Hello blue/green service: v2 in 7002
    Hello, Service :Hello blue/green service: v2 in 7002
    Hello, Service :Hello blue/green service: v2 in 7002
    Hello, Service :Hello blue/green service: v2 in 7002
    Hello, Service :Hello blue/green service: v2 in 7002
    Hello, Service :Hello blue/green service: v2 in 7002
    Hello, Service :Hello blue/green service: v2 in 7002
    [root@kong ~]#

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

    上一篇:使用nginx模拟进行金丝雀发布的方式
    下一篇:Docker 的健康检测机制
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    使用nginx模拟进行蓝绿部署的方式 使用,nginx,模拟,进行,蓝绿,