nginx+tomcat+redis负载均衡,达到session共享

nginx+tomcat+redis负载均衡

(一)软件版本 


  nginx:nginx-1.12.2

  tomcat:apache-tomcat-7.0.57

  redis:Redis 3.2

(二)配置

  1.nginx

  配置负载均衡服务器

upstream sampou.com {
  server 192.168.0.1:7084;
  server 192.168.0.2:8084;
}
location / {
   proxy_pass http://sampou.com;
  proxy_redirect default;
}

  2.tomcat

  我这里使用了两个tomcat,所以需要配置两个tomcat的端口,不要重复。

  首先,配置conf/context.xml,在Context标签内添加redis支持:  

<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
<Manager className="com.radiadesign.catalina.session.RedisSessionManager"
        host="192.168.0.3"  
        password="123456"
        port="6379"  
        database="0"  
        maxInactiveInterval="60" />

  host:redis服务器IP地址,password:redis服务器密码,port:redis服务器端口(这里使用的是默认端口)。

  tomcat2配置与tomcat1的配置相同,使用的都是同一个redis服务器。

  这里使用了tomcat-redis集成插件,RedisSessionHandlerValve路径要填写对,使用了如下6个jar包:

    tomcat-redis-session-manager-1.2-tomcat-7-java-7.jar

    tomcat-juli.jar

    tomcat-juli-adapters.jar

    commons-pool-1.6.jar

    commons-pool2-2.0.jar

    jedis-2.2.1.jar

  其中jedis-2.2.1.jar高版本的jedis不能用,存在版本兼容的问题,这一点我不太喜欢,而且在版本兼容上费了很大功夫去解决。

  所需jar下载地址

  这些jar文件需要放到tomcat/lib目录下。

(三)redis

  之前在网上找到的都是没有绑定redis的IP和配置密码,但是经过测试,打开浏览器会有问题,但是网页上也提供了四种解决方案,其中两种就是protected-mode设置为“no”,

  另一种就是redis绑定ip或者设置密码,经测试只绑定IP是不可以的还是设置密码才行。

(四)运行

  启动nginx、redis、tomcat服务,浏览器运行就可以看到效果。

  我自己的tomcat下放了一个jsp,记录了session的id

<%@ page language="java" %>
<html>
  <head><title>TomcatA</title></head>
  <body>
 
    <table align="centre" border="1">
      <tr>
        <td>Session ID</td>
        <td><%= session.getId() %></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
     </tr>
    </table>
  </body>
</html>
sessionID:<%=session.getId()%> 
<br> 
SessionIP:<%=request.getServerName()%> 
<br> 
SessionPort:<%=request.getServerPort()%> 
<% 
//为了区分,第二个可以是111
out.println("This is Tomcat Server 111"); 
%>  

 

  以上配置只是简单的达到负载均衡,nginx的高级用法有兴趣的童鞋可以去研究,另外关于redis的session共享问题,我觉得与tomcat的集成不太友好,

  尤其jar就是一个问题。

  对于企业级别的session共享,之后的文章会进一步去研究。

  在这方面有研究的童鞋欢迎指点一二。

posted @ 2017-12-05 20:51  智库online  阅读(528)  评论(0编辑  收藏  举报