如题,本文是笔者使用openresty 和lua脚本实现的简单灰度发布系统,记录下来。
一、安装
参考openresty 官方网站安装openresty即可
建议参考文章https://www.cnblogs.com/zdz8207/p/Nginx-Lua-OpenResty.html
1.下载软件包
wget https://openresty.org/download/openresty-1.13.6.2.tar.gz
2.解压
tar zxcf openresty-1.13.6.2.tar.gz
cd openresty-1.13.6.2/
进入插件目录cd bundle/
3.安装LuaJIT
cd LuaJIT-2.1-20180420/
make clean && make && make install
ln -sf luajit-2.1.0-alpha /usr/local/bin/luajit
4.安装ngx_openresty、(ngx_cache_purge、nginx_upstream_check_module安装参考上面的url)
root@user:/usr/servers/ngx_openresty-1.9.7.1/bundle# cd ..
root@user:/usr/servers/ngx_openresty-1.9.7.1# ./configure --prefix=/usr/servers --with-http_realip_module --with-pcre --with-luajit --add-module=./bundle/ngx_cache_purge-2.3/ --add-module=./bundle/nginx_upstream_check_module-0.3.0/ -j2
root@user:/usr/servers/ngx_openresty-1.9.7.1# make && make install
二、安装好以后直接就可以配置实践了,openresty将lua都集成好了,nginx配置文件无需特殊声明引入lua file。
1.nginx.conf 添加两个灰度发布的环境 #grey 灰度环境地址 #prd生产环境地址
upstream grey {
server 127.0.0.1:8080;
}
upstream prd {
server 139.162.116.84:8080;
}
添加对应location
location @grey{
proxy_pass http://grey
}
location @prd{
proxy_pass http://prd
}
在server 里根location指定lua文件
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
default_type 'text/html';
content_by_lua_file /root/openresty/nginx/conf/lua_conf/grey.lua;
}
[root@luka77 ~]# cd openresty/nginx/conf/lua_conf/
[root@luka77 lua_conf]# ls
grey.lua
[root@luka77 lua_conf]# cat grey.lua
foreign_env = 'grey'
china_env = 'prd'
abtest_num = 50 流量比率
local num = math.random(100);
if (num <= abtest_num) then
ngx.log(ngx.INFO,'use foreign environment',foreign_env)
ngx.exec("@"..foreign_env)
else
ngx.log(ngx.INFO,'use foreign environment',china_env)
ngx.exec("@"..china_env)
end
[root@luka77 lua_conf]#
目前实现的是一个按照流量百分比控制的灰度分流控制~
abtest_num 为流量比率
来源:oschina
链接:https://my.oschina.net/u/2342806/blog/1934804