nginx+tomcat做负载均衡时Session共享验证过程

nginx 作为目前最流行的开源反向代理HTTP Server,用于实现资源缓存、web server负载均衡等功能,由于其轻量级、高性能、高可靠等特点在互联网项目中有着非常普遍的应用,相关概念网上有丰富的介绍。分布式web server集群部署后需要实现session共享,针对 tomcat 服务器的实现方案多种多样,比如 tomcat cluster session 广播、nginx IP hash策略、nginx sticky module等方案,本文主要介绍了使用 redis 服务器进行 session 统一存储管理的共享方案。

  相关应用结构参照下图:

  nginx+tomcat做负载均衡时Session共享验证过程_第1张图片

1、准备环境(以windows 64位系统环境为例)

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

redis  下载:https://github.com/ServiceStack/redis-windows

redisson-all 下载:https://github.com/redisson/redisson/tree/master/redisson-tomcat

redisson-tomcat 下载:https://github.com/redisson/redisson/tree/master/redisson-tomcat

tomcat 自备

2、开干

a、为了在一台机器上做测试,可以复制两个tomcat,并在同一台机器上启动两个tomcat。将下载的redisson-all与redisson-tomcat分别放到tomcat的lib文件下

nginx+tomcat做负载均衡时Session共享验证过程_第2张图片

nginx+tomcat做负载均衡时Session共享验证过程_第3张图片

b、将两个tomcat都配置到环境变量

nginx+tomcat做负载均衡时Session共享验证过程_第4张图片

c、修改catalina.bat 将文件中所有默认出现的CATALINA_HOME,分别对应的换成CATALINA_HOME1,CATALINA_HOME2

d、在tomcat顶级目录下新建redisson.conf.里面配置成 singleServerConfig: address: "redis://127.0.0.1:6379"

nginx+tomcat做负载均衡时Session共享验证过程_第5张图片

nginx+tomcat做负载均衡时Session共享验证过程_第6张图片

e、两个tomcat的context.xml文件中都加入

           configPath="${catalina.base}/redisson.conf" readMode="MEMORY" updateMode="DEFAULT"/>


f、将两个tomcat设置成不同的端口(我的是8080和8081),在webapps下面新建www文件夹,并在www文件夹下新建index.jsp文件,文件的内容分别

<%@ pagelanguage="java" %>

    Tomcat-1
   
        <%
        out.println("This is Tomcat-1");
        %>
       
                
        sessionID:<%=session.getId()%>
       

        SessionIP:<%=request.getServerName()%>
       

        SessionPort:<%=request.getServerPort()%>
   

<%@ pagelanguage="java" %>

    Tomcat-2
   
        <%
        out.println("This is Tomcat-2");
        %>
       
                

        sessionID:<%=session.getId()%>
       

        SessionIP:<%=request.getServerName()%>
       

        SessionPort:<%=request.getServerPort()%>
   

通过以上步骤tomcat的相关部署完结,下面是nginx负载均衡设置

nginx的负载均衡配置,网上很多,大家可以搜索一下,这里仅附上我的配置,供参考

   upstream bimatrix_server {
        server 127.0.0.1:8080;  
        server 127.0.0.1:8081;  


    }


  location ~ /www
  {
    proxy_set_header Connection '';
    proxy_http_version 1.1;
    chunked_transfer_encoding off;
    proxy_buffering off;
    proxy_pass    http://bimatrix_server;
    client_max_body_size 8M;
    client_body_buffer_size 128k;


  }


nginx+tomcat做负载均衡时Session共享验证过程_第7张图片

3、启动

将redis,nginx,两个tomcat都启动

nginx+tomcat做负载均衡时Session共享验证过程_第8张图片

nginx+tomcat做负载均衡时Session共享验证过程_第9张图片

nginx+tomcat做负载均衡时Session共享验证过程_第10张图片

4、见证奇迹,访问http://localhost/www/

nginx+tomcat做负载均衡时Session共享验证过程_第11张图片

nginx+tomcat做负载均衡时Session共享验证过程_第12张图片

nginx+tomcat做负载均衡时Session共享验证过程_第13张图片

nginx+tomcat做负载均衡时Session共享验证过程_第14张图片

结果告诉我们,同一个浏览器访问nginx同一地址,被分配到了不同tomcat,但是seesion是一样的。验证成功


你可能感兴趣的:(WEB)