【电商】nginx+redis+tomcat实现session共享集群

本文记录nginx+redis+tomcat实现session共享的过程

tomcat-redis-session-manager组件:https://github.com/jcoleman/tomcat-redis-session-manager

tomcat-redis-sessoin-manager对tomcat的支持:

(1) tomcat6:支持,要求jdk为1.6, 需要引入tomcat-redis-session-manager-1.2-tomcat-6.jar,不过现在已经处理不维护的状态

(2) tomcat7:支持,jdk可以是1.6或1.7,需要引入tomcat-redis-session-manager-1.2-tomcat-7.jar; 如果引入的是tomcat-redis-session-manager-1.2-tomcat-7-java-7.jar则仅支持JDK1.7

(3) tomcat8:目前不支持, 可以尝试一下https://github.com/chexagon/redis-session-manager(未实际验证)

组件下载:https://github.com/jcoleman/tomcat-redis-session-manager/downloads

使用组件版本

nginx:1.8.0

tomcat两个:6.0.44

redis:2.4.10

JDK:1.6.0_34

(1) 将下面所有依赖的这些jar包放在$TOMCAT_HOME/lib中:

jedis-2.0.0.jar  tomcat-redis-session-manager-1.2-tomcat-6.jar commons-pool-1.5.5.jar

(2) 两个tomcat分别配置conf/context.xml,增加:

Xml代码  

  1. <Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
  2. <Manager className="com.radiadesign.catalina.session.RedisSessionManager"
  3. host="localhost"
  4. port="6379"
  5. database="0"
  6. maxInactiveInterval="60" />
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
<Manager className="com.radiadesign.catalina.session.RedisSessionManager"
         host="localhost"
         port="6379"
         database="0"
         maxInactiveInterval="60" />

另外,分别配置两个tomcat的HTTP监听端口为6181和6182

(3) nginx配置:

Java代码  

  1. upstream cluster_redis {
  2. server localhost:6181;
  3. server localhost:6182;
  4. }
  5. server {
  6. listen 6180;
  7. server_name localhost;
  8. location / {
  9. proxy_pass http://cluster_memcached;
  10. }
  11. }
upstream cluster_redis {
        server localhost:6181;
        server localhost:6182;
   }
   server {
       listen 6180;
       server_name localhost;
       location / {
         proxy_pass http://cluster_memcached;
       }
   }  

这里配置nginx监听端口为6180,并请所有的请求反向代理到6181和6182的tomcat集群.

(4) 测试代码session.jsp:

Jsp代码  

  1. <%@ page import="java.util.Enumeration" %>
  2. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  3. <html>
  4. <head>
  5. <title>session test</title>
  6. <%
  7. String key = request.getParameter("sessionKey");
  8. String value = request.getParameter("sessionValue");
  9. if(key != null && !"".equalsIgnoreCase(key.trim())) {
  10. session.setAttribute(key, value);
  11. }
  12. %>
  13. </head>
  14. <body>
  15. <form action="session.jsp" method="post">
  16. <input type="text" name="sessionKey" value="key1"><input type="text" name="sessionValue" value="value1">
  17. <input type="submit" value="提交">
  18. </form>
  19. <h4>已经存储的session--<%=session.getServletContext().getRealPath("/")%></h4>
  20. <table>
  21. <tr>
  22. <th>key</th>
  23. <th>value</th>
  24. </tr>
  25. <%
  26. Enumeration<String> keys = session.getAttributeNames();
  27. while(keys.hasMoreElements()){
  28. String k = keys.nextElement();
  29. String v = (String)session.getAttribute(k);
  30. %>
  31. <tr>
  32. <td><%=k%></td>
  33. <td><%=v%></td>
  34. </tr>
  35. <%
  36. }
  37. %>
  38. </table>
  39. </body>
  40. </html>
<%@ page import="java.util.Enumeration" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>session test</title>
  <%
    String key = request.getParameter("sessionKey");
    String value = request.getParameter("sessionValue");
    if(key != null && !"".equalsIgnoreCase(key.trim())) {
      session.setAttribute(key, value);
    }
  %>
</head>
<body>
<form action="session.jsp" method="post">
<input type="text" name="sessionKey" value="key1"><input type="text" name="sessionValue" value="value1">
<input type="submit" value="提交">
</form>
<h4>已经存储的session--<%=session.getServletContext().getRealPath("/")%></h4>
<table>
  <tr>
  <th>key</th>
  <th>value</th>
  </tr>
  <%
  Enumeration<String> keys = session.getAttributeNames();
    while(keys.hasMoreElements()){
      String k = keys.nextElement();
      String v = (String)session.getAttribute(k);
      %>
  <tr>
    <td><%=k%></td>
    <td><%=v%></td>
  </tr>
  <%
    }
  %>
</table>
</body>
</html>  

需要注意的是,tomcat-redis-session-manager组件并不提供redis集群的支持。对该问题,作者的解释是推荐使用twitter的twemproxy或者碗豆荚的codis之类的redis代理服务。

java企业级通用权限安全框架源码 SpringMVC mybatis or hibernate+ehcache shiro druid bootstrap HTML5

【java框架源码下载】

时间: 2024-08-17 05:56:55

【电商】nginx+redis+tomcat实现session共享集群的相关文章

nginx+redis+tomcat实现session共享

本次测试使用的是tomcat7,使用tomcat7的话jdk就一定要使用1.7版本的. 使用组件版本nginx:1.8.0 tomcat两个:7.0.67  redis:2.4.10 JDK:1.7.0_79 (1)将下面所有依赖的这些jar包放在$TOMCAT_HOME/lib中: jedis-2.2.1.jar tomcat-redis-session-manager-1.2-tomcat-7.jar commons-pool-1.6.jar 2) 两个tomcat分别配置conf/cont

【电商】nginx+tomcat+memcached实现session共享集群

在分布式多tomcat web集群环境下,首先要解决的是session的共享问题,一般的实现思路有: (1) session复制:多tomcat之间进行session的同步,集群中的tomcat存储相同的session信息 (2) 共享session存储:将session集中存储在同一个地方,如redis/memcached,甚至DB.tomcat本身的内存中并不存储session (3) session粘性:其实session粘性并不是session共享的方案,而是多tomcat的集群方案,配

基于memcached-session-manager的tomcat session共享集群

MSM的特性: a.支持tomcat 6,tomcat 7,tomcat 8 b.支持sticky session或no-sticky session c.无单点故障 d.tomcat故障转移 e.memcached故障转移 f.附带串行化插件 g.支持异步session存储,拥有更快的性能 sticky sessions粘性会话: 安装了MSM的tomcat会优先使用本机内存保存session,当一个请求结束后,MSM会把session发送到memcached节点上存放以作备份,第二次请求时,

nginx+tomcat+memcached构建session共享集群

一.安装配置tomcat 配置前说明: 系统为centos7 m1.xsllqs.com地址为192.168.1.107 c1.xsllqs.com地址为192.168.1.114 c2.xsllqs.com地址为192.168.1.113 安装tomcat需要配合JDK使用,JDK有oracle JDK和open JDK两种 oracle JDK8的下载地址:http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-down

单台 redis和多台 redis tomcat配置session共享

单台redis: http://www.roncoo.com/article/detail/126625 多台redis http://blog.csdn.net/u010158267/article/details/51285296

构建session共享集群

一.安装配置tomcat 配置前说明: 系统为centos7 m1.xsllqs.com地址为192.168.1.107 c1.xsllqs.com地址为192.168.1.114 c2.xsllqs.com地址为192.168.1.113 安装tomcat需要配合JDK使用,JDK有oracle JDK和open JDK两种 oracle JDK8的下载地址:下载 tomcat的下载地址:http://tomcat.apache.org/ c1.xsllqs.com(192.168.1.114

CentOS7 下 Nginx + Tomcat 实现 Session 共享

在之情的文章中搭建的 centos7 + tomcat + nginx 的环境的基础上, 使用 redis 实现 tomcat 的 session 共享的问题. 一 : 安装 Redis 安装 gcc: yum install -y gcc-c++ 使用 FTP 服务器上传安装包,解压上传的 redis 的包 tar -zxvf redis-3.0.0.tar.gz 进入解压目录 redis-3.0.0 执行 make PREFIX=/usr/local/redis install 把 redi

Java企业级电商项目实战 Tomcat集群与Redis分布式

本套课程包含:java电商项目实战课程 Tomcat集群视频教程 Redis项目实战课程课程目录1-1 课程导学1-2 大型Java项目架构演进解析1-3 一期课程与问答服务回顾1-4 一期项目结构和代码回顾1-5 课程使用系统及技术版本介绍(一期+二期)1-6 二期项目初始化第2章 Lombok框架集成及原理解析本章会对Lombok框架进行介绍,同时会讲解Lombok的原理.并手把手领着小伙伴们实战,引入Lombok以及IDE安装Lombok插件.然后会带着大家实战Coding,讲解@Data

Nginx+tomcat实现session共享

防伪码:人生没有对错,成功永远属于奋斗者 一.如何保持session会话 目前,为了使web能适应大规模的访问,需要实现应用的集群部署.集群最有效的方案就是负载均衡,而实现负载均衡用户每一个请求都有可能被分配到不固定的服务器上,这样我们首先要解决session的统一来保证无论用户的请求被转发到哪个服务器上都能保证用户的正常使用,即需要实现session的共享机制. 在集群系统下实现session统一的有如下几种方案: 1.请求精确定位:sessionsticky,例如基于访问ip的hash策略,