nginx应用:使用nginx进行蓝绿部署
这篇文章介绍一下蓝绿部署以及使用nginx如何最简单地模拟一下蓝绿部署的方式
蓝绿部署
蓝绿部署的重点在于如下特点
1. 蓝色版本和绿色版本同时存在
2. 实际运行的环境为蓝或则绿,只能为其中之一,通过开关控制
优点和缺点分析:优点在于它的速度和回滚。而缺点也显而易见。可以快速回滚是因为有两套环境同时存在的缘故,所以复杂度和需要的资源会增多,因为其有两套环境。
另外虽然速度有所提高,但是在实现的过程中,开关的控制,无论多快的切换速度,如果不结合其他的技术,还是无法做到完全无缝切换。
模拟蓝绿部署
接下来我们使用nginx的upstream来简单模拟一下蓝绿部署的场景。具体场景如下, 当前活跃的是蓝色版本,通过调整nginx设定,将绿色版本设定为当前活跃版本。
版本 | 说明 |
---|---|
router | 用户通过http://localhost:8090来访此种部署下的微服务 |
蓝色版本 | 当前活跃的为蓝色版本,在7001端口提供服务,提示信息为“Hello blue/green service: v1 in 7001” |
绿色版本 | 即将发布的绿色版本,在7002端口提供服务,提示信息为“Hello blue/green service: v2 in 7002” |
事前准备
事前在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应用:使用nginx进行蓝绿部署相关推荐
- 使用级联功能实现蓝绿部署和金丝雀发布
点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者:米开朗基杨 来源:公众号「云原生实验室」 上篇文章介绍了 Contour 分布式架构的 ...
- 首富带你畅谈:蓝绿部署、滚动发布、灰度发布/金丝雀发布
首富带你畅谈:蓝绿部署.滚动发布.灰度发布/金丝雀发布 笔者: 张首富 时间: 2019-01-24晚 QQ群: 895291458 博客地址: www.zhangshoufu.com 根据2018年 ...
- 蓝/绿部署 VS 金丝雀部署
在云端或数据中心部署新版本的最佳方式 在生产环境中更新和配置应用程序通常是件令人望而生畏的事.面对如此多的可用选项,应如何选择最适合你的用例的部署策略? 部署策略用于升级或配置正在运行的应用程序.在下 ...
- 灰度发布、蓝绿部署、金丝雀都是啥?
目录 滚动部署 蓝绿发布 为什么还需要蓝绿 金丝雀发布(canary) 金丝雀和蓝绿的对比 灰度发布 A/B Test 实现 kubernetes istio spring cloud 网关 参考 滚 ...
- Kubernetes部署策略:重建、滚动更新、蓝绿部署、金丝雀部署
Kubernetes原生支持重建.滚动更新两种部署策略.通过修改Service的label,切换流量转发可以实现蓝绿部署.金丝雀部署. 部署前的准备 1.需要有一个k8s集群.没有可查看此博客 htt ...
- Contour 学习笔记(二):使用级联功能实现蓝绿部署和金丝雀发布
上篇文章介绍了 Contour 分布式架构的工作原理,顺便简单介绍了下 IngressRoute 的使用方式.本文将探讨 IngressRoute 更高级的用法,其中级联功能是重点. 1. Ingre ...
- 灰度(金丝雀)发布、蓝绿部署、滚动发布
概念 一.灰度(金丝雀)发布 定义 灰度发布又叫金丝雀发布,只升级部分服务,即让一部分用户继续用老版本,一部分用户开始用新版本,如果用户对新版本没什么意见,那么逐步扩大范围,把所有用户都迁移到新版本上 ...
- 微服务部署:蓝绿部署、滚动部署、灰度部署(金丝雀部署)、功能开关发布
简介 产品或项目不可能一步到位,一次性推向用户,故而有版本的存在.在app版本更新或者项目迭代的过程中,不可避免需要发布.发布就是部署:部署就是修改:修改则意味着风险. 目前有很多用于部署的技术,本文 ...
- 微服务部署:蓝绿部署、滚动部署、灰度部署(金丝雀部署)
简介 产品或者项目不可能一步到位,一次性推向用户,故而有版本的存在.在app版本更新或者项目迭代的过程中,不可避免需要发布.发布就是部署/重新部署:部署就是修改:修改则意味着风险. 目前有很多用于部署 ...
最新文章
- Hadoop集群搭建(一:集群安装及网络环境配置)
- [分享]2007年创业给我们的提示
- Leetcode 264. 丑数 II 解题思路及C++实现
- javaandroid知识点汇总整理(不定期更新)
- 科学家利用计算机模型,科学家尝试利用计算机模拟整个宇宙的演化
- 进程间的通信之1-----管道
- Linux系统如何连接和上传文件到服务器上
- java 读取文件 二进制_JAVA中读取文件(二进制,字符)内容的几种方法总结
- 处理机调度的概念,层次
- OPNET网络仿真分析-1.6、OPNET软件使用
- 解决:android源码同步repo sync 时出现的fatal:duplicate path错误
- 项目做PC端页面采用rem适配的使用步骤
- js return加分号_JavaScript 语句后应该加分号么?
- C++默认参数(缺省参数)应该写在哪里,声明还是定义里
- 详解:淘宝大秒杀系统是如何设计的?
- 【分享贴】PCB设计思路
- 同样是VPS,为什么RAKsmart更受欢迎
- python定量城市研究_Python定量城市研究实战
- Grafana 汉化
- 手机app 与pc 软件测试区别,1,web测试,Android测试,Ios测试的共同点与