Nginx+Lua实现代码灰度发布
Nginx+Lua实现代码灰度发布
使⽤ Nginx
结合lua
实现代码灰度发布
灰度发布是⼀种将新版本的软件或功能逐步推⼴给⼀⼩部分⽤户,以进⾏测试和评估它们的反应的⽅法。实
际上,它是⼀种渐进式的部署⽅法,可以逐步将新版本或功能逐步发布给不同的⽤户群体,直到所有⽤户都
可以使⽤这个新版本或功能。这种⽅法通常⽤于⼤规模应⽤程序和⽹站,以确保新的功能和修复⼯作的质量,并降低和减少出现故障或负
⾯反应的⻛险。在灰度发布期间,团队可以监测应⽤程序或⽹站的性能并调整它们,以便可以全⾯推⼴给所
有⽤户。
按照⼀定的关系区别,分不分的代码进⾏上线,使代码的发布能平滑过渡上线
1.⽤户的信息cookie等信息区别
2.根据⽤户的ip地址, 颗粒度更⼴
实践架构图
执⾏过程:
1.⽤户请求到达前端代理Nginx, 内嵌的lua模块会解析Nginx配置⽂件中Lua脚本
2.Lua脚本会获取客户端IP地址,查看Memcached缓存中是否存在该键值
3.如果存在则执⾏@java_test,否则执⾏@java_prod
4.如果是@java_test, 那么location会将请求转发⾄新版代码的集群组
5.如果是@java_prod, 那么location会将请求转发⾄原始版代码集群组
6.最后整个过程执⾏后结束
实践环境准备:
系统 | 服务 | 地址 |
---|---|---|
CentOS7 | Nginx+Lua+Memached | 192.168.1.170 |
CentOS7 | Tomcat集群8080_Prod | 192.168.1.152:8080 |
CentOS7 | Tomcat集群9090_Test | 192.168.1.152:9090 |
1.安装两台服务器 Tomcat ,分别启动 8080 和 9090 端⼝
jdk下载
链接: https://pan.baidu.com/s/1rBd5lAIn0Cn-JrgJDy00IQ?pwd=94he 提取码: 94he
192.168.1.152服务器操作
[root@tomcat-node1-20 ~]# pwd
/app/soft
[root@tomcat-node1-20 ~]# ll
-rw------- 1 root root 194151339 4⽉ 28 21:20 jdk-8u231-linux-x64.tar.gz
[root@tomcat-node1-20 ~]# tar xf jdk-8u231-linux-x64.tar.gz -C /app
[root@tomcat-node1-20 ~]# cd /app/ && mv jdk1.8.0_231 jdk1.8
[root@tomcat-node1-20 ~]#cat /etc/profile.d/jdk.sh
export JAVA_HOME=/app/jdk1.8
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
[root@tomcat-node1-20 ~]# chmod +x /etc/profile.d/jdk.sh
[root@tomcat-node1-20 ~]# source /etc/profile
[root@tomcat-node1-20 ~]# java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)
#安装tomcat
[root@tomcat-node1-20 ~]# mkdir /soft/src -p
[root@tomcat-node1-20 ~]# cd /soft/src
[root@nginx ~]# wget https://mirrors.tuna.tsyuanhua.edu.cn/apache/tomcat/tomcat-9/v9.0.74/bin/apache-tomcat-9.0.74.tar.gz --no-check-certificate
[root@tomcat-node1-20 src]# tar xf apache-tomcat-9.0.74.tar.gz -C /soft
[root@tomcat-node1-20 src]# cd ..
[root@tomcat-node1-20 soft]# mv apache-tomcat-9.0.74/ tomcat-8080
[root@tomcat-node1-20 soft]# /soft/tomcat-8080/bin/startup.sh
#启动9090
[root@tomcat-node1-20 soft]# cp -r tomcat-8080 tomcat-9090
[root@tomcat-node1-20 soft]# cd tomcat-9090/conf/
[root@tomcat-node1-20 soft]# vim server.xml
#修改⼀下内容
<Server port="8005" shutdown="SHUTDOWN">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxParameterCount="1000"
/>
#最新的内容
<Server port="8006" shutdown="SHUTDOWN">
<Connector port="9090" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8444"
maxParameterCount="1000"
/>
[root@tomcat-node1-20 conf]# cd ..
[root@tomcat-node1-20 tomcat-9090]# cd bin/
[root@tomcat-node1-20 bin]# sh startup.
sh: startup.: 没有那个⽂件或⽬录
[root@I bin]# sh startup.sh
Usyuan CATALINA_BASE: /soft/tomcat-9090
Usyuan CATALINA_HOME: /soft/tomcat-9090
Usyuan CATALINA_TMPDIR: /soft/tomcat-9090/temp
Usyuan JRE_HOME: /app/jdk1.8
Usyuan CLASSPATH: /soft/tomcat-9090/bin/bootstrap.jar:/soft/tomcat-9090/bin/tomcat-juli.jar
Usyuan CATALINA_OPTS:
Tomcat started.
[root@tomcat-node1-20bin]# netstat -lntup |egrep 9090
tcp6 0 0 :::9090 :::* LISTEN
19153/java
//注意tomcat默认监听在8080端⼝, 如果需要启动9090端⼝需要修改server.xml配置⽂件
#修改9090站点⻚⾯
[root@tomcat-node1-20]# cd /soft/tomcat-9090/webapps/ROOT
[root@@tomcat-node1-20 ROOT]# vim index.jsp
<title>9090-tomcat <%=request.getServletContext().getServerInfo() %></title>