实战场景 - 灰度发布

灰度发布的作用:按照一定的关系区别,分部分的代码进行上线,使代码的发布能平滑过渡上线
实现方式:
  1、用户的信息cookie等信息区别
  2、根据用户的IP地址

安装memcached:yum -y install memcached

准备好两个tomcat,9090代表生产环境,8080代表预发布环境

为避免冲突,修改tomcat9090的端口号

这里分别在同个tomcat/webapp/ROOT/下放了同样内容的jsp文件

把8080下的jsp问价内容改一下区别于9090

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<HTML>
  <HEAD>
    <TITLE>JSP Test Page</TITLE>
  </HEAD>
  <BODY>
    <%
      Random rand = new Random();
      out.println("<h1>Test server:</h1>");
      out.println("<h1>Random number:</h1>");
      out.println(rand.nextInt(99)+100);
    %>
  </BODY>
</HTML>

启动两个tomcat

查看进程

查看端口

启动memcached

查看进程

查看端口号

安装lua调用memcache的模块

写个脚本执行

wget https://github.com/agentzh/lua-resty-memcached/archive/v0.11.tar.gz
tar -zxvf v0.11.tar.gz
mkdir /usr/local/share/lua
mkdir /usr/local/share/lua/5.1/
cp -r lua-resty-memcached-0.11/lib/resty /usr/local/share/lua/5.1/

运行脚本,如果出现404,则手动去脚本里那个网站下载安装包并手动执行脚本里面的安装步骤

准备好一个lua脚本,放在/opt/app/lua下

clientIP = ngx.req.get_headers()["X-Real-IP"]
if clientIP == nil then
  clientIP = ngx.req.get_headers()["x_forwarded_for"]
end
if clientIP == nil then
  clientIP = ngx.var.remote_addr
end
  local memcached = require "resty.memcached"
  local memc, err = memcached:new()
  if not memc then
    ngx.say("failed to instantiate memc: ", err)
    return
  end
  local ok, err = memc:connect("127.0.0.1", 11211)
  if not ok then
    ngx.say("failed to connect: ", err)
    return
  end
  local res, flags, err = memc:get(clientIP)
  ngx.say("value key: ",res,clientIP)
  if err then
    ngx.say("failed to get clientIP ", err)
  return
  end
  if res == "1" then
    ngx.exec("@server_test")
  return
  end

  ngx.exec("@server")

编辑配置文件

把原来的location删掉,添加新的location

location /hello {
  default_type 'text/plain';
  content_by_lua 'ngx.say("hello, lua")';
}
location /myip{
  default_type 'text/plain';
  content_by_lua '
    clientIP = ngx.req.get_headers()["x_forwarded_for"]
    ngx.say("IP:",clientIP)
    ';
}
location /{
  default_type "text/html";
  content_by_lua_file /opt/app/lua/dep.lua;
}

location @server{
  proxy_pass http://127.0.0.1:9090;
}

location @server_test{
  proxy_pass http://127.0.0.1:8080;
}

由于这里没有写后台代码,所以使用telnet命令手动setip到memcached里面,实现指定IP访问预发布环境

如果出现以下问题

解决方法: 安装telnet服务
centos、ubuntu安装telnet命令的方法.
yum list telnet* 列出telnet  相关的安装包
yum install telnet-server    安装telnet服务
yum install telnet.*    安装telnet客户端

依次输入以下内容,即可把192.168.56.1加入到访问预发布环境的IP列表中

telnet 127.0.0.1 11211
set 192.168.56.1 0 0 1
1

这里如果要退出的话,按ctrl+]
再输入quit就可以了

检查语法,并重载
nginx -tc /etc/nginx/nginx.conf
nginx -s reload -c /etc/nginx/nginx.conf

访问location

用前面set好的IP访问

切换IP访问

Nginx详解二十四:Nginx深度学习篇之灰度发布的更多相关文章

  1. Nginx详解二十:Nginx深度学习篇之HTTPS的原理和作用、配置及优化

    一.HTTPS原理和作用: 1.为什么需要HTTPS?原因:HTTP不安全1.传输数据被中间人盗用.信息泄露2.数据内容劫持.篡改 2.HTTPS协议的实现对传输内容进行加密以及身份验证 对称加密:加 ...

  2. Nginx详解二十二:Nginx深度学习篇之Lua解释器安装及基础语法

    解释器 Lua:Lua是一个简洁.轻量.可扩展的脚本语言 Nginx+Lua优势充分的结合Nginx的并发处理epoll优势的Lua的轻量实现简单的功能切高并发的场景 安装Lua 1.安装解释器:yu ...

  3. Nginx详解二十三:Nginx深度学习篇之Nginx+Lua开发环境搭建

    Nginx+Lua开发环境 1.下载LuaJIT解释器wget http://luajit.org/download/LuaJIT-2.0.2.tar.gztar -zxvf LuaJIT-2.0.2 ...

  4. Nginx详解二十八:Nginx架构篇Nginx+Lua的安全waf防火墙

    Nginx+Lua的安全waf防火墙 看一下别人写好的:https://github.com/loveshell/ngx_lua_waf 先安装git:yum -y install git 在/opt ...

  5. Nginx详解二十一:Nginx深度学习篇之配置苹果要求的openssl后台HTTPS服务

    配置苹果要求的证书: 1.服务器所有的连接使用TLS1.2以上的版本(openssl 1.0.2) 2.HTTPS证书必须使用SHA256以上哈希算法签名 3.HTTPS证书必须使用RSA2048位或 ...

  6. Nginx详解二十九:基于Nginx的中间件架构设计

    基于Nginx的中间件架构 一:了解需求 1.定义Nginx在服务体系中的角色 1.静态资源服务 2.代理服务 3.动静分离 2.静态资源服务的功能设计 3.代理服务 二:设计评估 三:配置注意事项

  7. Nginx详解二十六:Nginx架构篇之性能优化

    一.性能优化考虑点 1.当前系统结构瓶颈 通过压力测试观察指标.日志检测.性能分析 2.了解业务模式 接口业务类型.系统层次化结构 3.性能与安全 二.ab接口压力测试工具 1.安装:yum -y i ...

  8. Nginx详解二十五:Nginx架构篇之Nginx常见的问题

    Nginx常见的问题 1.相同server_name多个虚拟主机优先级访问,是按读取文件的优先级来排序 在/opt/app/下准备3个code文件夹,下面放入3个html文件,里面的内容分别是code ...

  9. Nginx详解二十七:Nginx架构篇之安全篇

    1.常见的恶意行为:爬虫行为和恶意抓取.资源盗用 解决方案: 基础防盗链功能:不让恶意用户能轻易爬去网站对外数据 secure_link_module模块:对数据安全性提高,加密验证和失效性,适合核心 ...

随机推荐

  1. python selenium+phantomJS自动化测试环境

    0x00配置phantomJS 1. 在windows平台下 此种方法是弹浏览器进行自动化测试的. 1.下载谷歌的驱动 https://chromedriver.storage.googleapis. ...

  2. bootstrap-table前端修改后台传来的数据重新进行渲染

    使用bootstrap-table显示数据,后台传回数据以后,可能需要对其做调整,如需要前端为数据添加单位 回到顶部 调整数据代码 $("#"+tableId).bootstrap ...

  3. SpringBoot 使用 MyBatis 分页插件 PageHelper 进行分页查询

    前言:本文档使用的是 SpringBoot,如果是 Spring 还需要在 MyBatis 配置 xml 中配置拦截器,并且 PageHelper 是针对 MyBatis 的,MyBatis 的集成不 ...

  4. Qemu-KVM管理

    内容: 一.KVM基本配置 二.KVM网络的桥接 三.创建虚拟机 四.虚拟机的关闭和启动 关于KVM: 1).KVM是开源软件,全称是kernel-based virtual machine(基于内核 ...

  5. CentOS7.4安装部署KVM虚拟机

    命令:virt-manager 可以查看已经安装的虚拟机 参考文档:1.https://blog.csdn.net/qq_39452428/article/details/80781403

  6. Configuring Automatic Restart of an Oracle Database

    https://docs.oracle.com/cd/E11882_01/server.112/e25494/restart.htm#ADMIN12708

  7. 使用服务器参数文件(SPFILE)管理初始化参数

    传统上,Oracle数据库的初始化参数存储在文本初始化参数文件中.为了更好的可管理性,您可以选择在二进制服务器参数文件中维护初始化参数,该文件在数据库启动和关闭期间保持不变.本节介绍服务器参数文件,并 ...

  8. (转载)ECCV 2018:IBN-Net:打开域适应的新方式

    (本文转自极视角) 本文由香港中文大学发表于ECCV2018,论文探索了IN和BN的优劣,据此提出的IBN-Net在语义分割的域适应任务上取得了十分显著的性能提升. 论文地址:https://arxi ...

  9. qunee 开发清新、高效的拓扑图组件 http://www.qunee.com/

    qunee  开发清新.高效的拓扑图组件  http://www.qunee.com/ RoadFlow:  http://www.cqroad.cn/ 村暖花开

  10. 二层环路保护,RRPP多环的配置

    作者:邓聪聪 组网需求: 局域网中,由A/B/C/D构成RRPP域1换网络结构,要求环网机构中的任意两条线路中断都不能影响业务. 配置思路: 环路由两部分组成,ring1.ring2,B为环1的主节点 ...