这篇文章介绍一下蓝绿部署以及使用nginx如何最简单地模拟一下蓝绿部署的方式
蓝绿部署
蓝绿部署的重点在于如下特点
1. 蓝色版本和绿色版本同时存在 2. 实际运行的环境为蓝或则绿,只能为其中之一,通过开关控制优点和缺点分析:优点在于它的速度和回滚。而缺点也显而易见。可以快速回滚是因为有两套环境同时存在的缘故,所以复杂度和需要的资源会增多,因为其有两套环境。
另外虽然速度有所提高,但是在实现的过程中,开关的控制,无论多快的切换速度,如果不结合其他的技术,还是无法做到完全无缝切换。
模拟蓝绿部署
接下来我们使用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: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中, 模拟方式很简单,通过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; }}
新闻热点
疑难解答