JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

运维篇—基于Nginx+Lua实现的灰度发布

wys521 2024-10-04 07:18:03 精选教程 20 ℃ 0 评论

灰度发布也叫 A/B 测试,原理是一套系统在实现了负载均衡,全国节点都部署了系统之后,可以在新功能上线后,让一小部分用户先使用,从中收集使用信息来做对比和发现bug,及时调整,最终分发到全国的节点。

而在目前很多公司都会使用nginx作为前端服务器,为后端服务器提供负载技术。当我们需要对后端服务器进行升级时,我们只想让内部测试人员访问到新升级的服务器上,生产环境用户仍使用未升级的稳定环境。此时就可以使用nginx配合Lua模块来实现一定程度的条件控制。(本文中就是以IP作为限制)

安装环境

服务器 1: 192.168.1.214 (安装apache作为后端服务器)

服务器 2: 192.168.1.215(安装apache作为后端服务器)

服务器 3: 192.168.1.216 (安装nginx+lua 前端服务器)

1.安装nginx

准备工作

yum install -y pcre pcre-devel

yum install -y zlib zlib-devel

yum install -y openssl openssl-devel

下载地址:http://nginx.org/en/download.html

本文中使用是nginx-1.12.2版本

cd /data

wget http://nginx.org/download/nginx-1.12.2.tar.gz

tar -zvxf nginx-1.12.2.tar.gz

cd nginx-1.12.2

./configure --prefix=/data/nginx --with-http_stub_status_module --with-http_ssl_module

make && make install

2.安装Lua模块

2.1安装LuaJIT

下载地址:http://luajit.org/

wget http://luajit.org/download/LuaJIT-2.0.4.tar.gz

tar zxvf LuaJIT-2.0.4.tar.gz

cd LuaJIT-2.0.4

make install PREFIX=/usr/local/luajit

echo "/usr/local/luajit/lib" > /etc/ld.so.conf.d/usr_local_luajit_lib.conf

ldconfig

export LUAJIT_LIB=/usr/local/luajit/lib

export LUAJIT_INC=/usr/local/luajit/include/luajit-2.0

2.2安装ngx_devel_kit

下载地址https://github.com/simpl/ngx_devel_kit/tags

wget https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gz

tar -zvxf v0.3.0.tar.gz

mv ngx_devel_kit-0.3.0/ ngx_devel_kit

2.3安装lua-nginx-module

下载地址:https://github.com/openresty/lua-nginx-module/tags

wget https://github.com/openresty/lua-nginx-module/archive/v0.10.11rc3.tar.gz

tar -zvxg v0.10.11rc3.tar.gz

mv lua-nginx-module-0.10.11rc3/ lua-nginx-module

2.4 重新编译NGINX安装支持lua模块

cd /data/nginx-1.12.2

#具体模块路径安装时请修改

./configure --prefix=/data/nginx --with-http_stub_status_module --with-http_ssl_module --with-ld-opt="-Wl,-rpath,/usr/local/luajit/lib" --add-module=/data/ngx_devel_kit --add-module=/data/lua-nginx-module

make && make install

3.编写lua脚本实现根据请求来源IP地址,匹配对应的location

cd /data/nginx

mkdir lua

cd lua

vim ip_gray.lua

#######以下为lua脚本

local ip_config = ngx.shared.config;

ClienIP=ngx.req.get_headers()["X-Real-IP"]

if ClientIP == nil then

ClientIP = ngx.req.get_headers()["x_forworded_for"]

end

if ClientIP == nil then

ClientIP = ngx.var.remote_addr

end

for line in io.lines("/data/nginx/lua/ipList.conf") do

if not ip_config:get(line) then

ip_config:set(line, "0")

end

end

if ip_config:get(ClientIP) == "0" then

ngx.exec("@test_env")

else

ngx.exec("@product_env")

end

#########以上为lua脚本

创建存放测试IP地址文件

vim ipList.conf

192.168.1.13

192.168.1.14

4.修改Nginx配置nginx.conf

下图为主要配置

配置完毕后重启Nginx,可在ipList.conf中添加IP地址测试,添加后nginx无需reload,删除则需要reload。

lua_code_cache on | off 开启或关闭Lua代码缓存 生产环境一定要打开

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表