openresty+lua灰度发布的简单实验

五迷三道 提交于 2019-12-02 21:37:18

如题,本文是笔者使用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 为流量比率

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!