什么是蓝绿部署
蓝绿部署需要有两套系统:一套是正在提供服务系统,标记为“绿色”;另一套是准备发布的系统,标记为“蓝色”。两套系统都是功能完善的,并且正在运行的系统,只是系统版本和对外服务情况不同。
蓝绿部署的目的是减少发布时的中断时间、能够快速撤回发布。
如何使用nginx进行蓝绿部署
假设有两个相同服务,分别运行在127.0.0.1:7001和127.0.0.1:7002,我们通过127.0.0.1:7000对外提供服务。
在http块中设置upstream blue_green_service,使用down来表示禁用的服务,使用weight=100表示启用的服务。
http {
upstream blue_green_service {
server 127.0.0.1:7001 weight=100;
server 127.0.0.1:7002 down;
}
...
}
配置api和对外的服务:
server {
listen 7000;
location /api {
proxy_pass http://blue_green_service;
}
location / {
root /usr/share/nginx/html/web;
index index.html index.htm;
}
}
测试nginx配置文件,重新加载nginx
nginx -t
nginx -s reload
之后访问 http://localhost:7000/ ,可以在7001程序中发现请求日志。
之后修改upstream blue_green_service配置如下:
upstream blue_green_service {
server 127.0.0.1:7001 down;
server 127.0.0.1:7002 weight=100;
}
测试,重新加载,就可以发现流量流到了7002端口的服务去了。
最简单的蓝绿部署
其实最简单的办法,就是启动第二个服务后,直接修改location配置块的proxy_pass为第二个服务的端口就行了。
location /api {
proxy_pass http://127.0.0.1:7002;
}
参考资料: