nginx如何进行蓝绿部署?

821 阅读1分钟

什么是蓝绿部署

蓝绿部署需要有两套系统:一套是正在提供服务系统,标记为“绿色”;另一套是准备发布的系统,标记为“蓝色”。两套系统都是功能完善的,并且正在运行的系统,只是系统版本和对外服务情况不同。

蓝绿部署的目的是减少发布时的中断时间、能够快速撤回发布。

如何使用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;
    }

参考资料: