Tomcat7集群共享Session 基于redis进行统一管理
背景:
很多时候,生产环境,需要多个tomcat协作,那么session的统一管理是一个首先需要解决的问题。session的统一管理有很多解决方案,比如存储至数据库、memcache、redis。那么我想给大家介绍的是将session存储至redis这个方案。
先要感谢开源项目 tomcat-redis-session-manager,感谢作者
实验环境:
操作系统:windows 7 64位
Redis版本:Redis 2.8.2101(Redis安装方法这里不介绍了,请自行Google、Baidu)
Tomcat版本:tomcat7.0.64(2个tomcat实例,注意同一台机器上试的话,启动另一个tomcat实例的时候需要修改端口号,如果是不同机器上的tomcat,那就不用修改了)
JDK版本:jdk1.7.0_80(生产环境请使用servre版本)
请求监听端口 | Shutdown监听端口 | AJP监听端口 | |
tomcat_1 | 8080 | 8005 | 8009 |
tomcat_2 | 8090 | 8015 | 8019 |
准备:
tomcat_1端口按照默认配置(不改server.xml)
tomcat_2端口改为下面的配置(修改server.xml)
<Server port="8015" shutdown="SHUTDOWN"><Service name="Catalina"> <Connector port="8090" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" /> ....<Connector port="8019" protocol="AJP/1.3" redirectPort="8443" /> ....</Service> </Server>
tomcat_1,tomcat_2都要修改contenxt.xml
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" /><Manager className="com.radiadesign.catalina.session.RedisSessionManager"host="localhost" port="6379" database="0" maxInactiveInterval="60" />
下载所需jar包(为了方便大家,我在附件里上传了所有的jar包)
1)redis的java客户端
https://github.com/xetorthio/jedis
2) tomcat-redis-session-manager的jar包,我用的是自己编译的(作者只给了gradle,⊙﹏⊙b汗没有maven的,我把它改成了maven工程的),见附件,源码也给到大家。
3) apache-commons-pool2
http://commons.apache.org/proper/commons-pool/download_pool.cgi
将下载好的jar包,放到tomcat_1\lib及tomcat_2\lib目录下,
开始实验:
首先开启redis服务 redis-server.exe redis.windows.conf
开启redis命令行客户端以便监视redis的状态变化,redis-cli -p 6379 monitor(如果有密码则 redis-cli -p 6379 -a mypass monitor)
分别通过catalina.bat run 开启tomcat_1,tomcat_2
在命令行终端,看到了如下信息,表明redis的session manager初始化成功
... 十月 15, 2015 4:52:39 下午 com.radiadesign.catalina.session.RedisSessionManager startInternal 信息: Attached to RedisSessionHandlerValve 十月 15, 2015 4:52:39 下午 com.radiadesign.catalina.session.RedisSessionManager initializeSerializer 信息: Attempting to use serializer :com.radiadesign.catalina.session.JavaSerializer 十月 15, 2015 4:52:39 下午 com.radiadesign.catalina.session.RedisSessionManager startInternal 信息: Will expire sessions after 1800 seconds 十月 15, 2015 4:52:39 下午 org.apache.catalina.startup.HostConfig deployDirectory 信息: Deployment of web application directory E:\WorkFolder\Temp\Redis-Session\apache-tomcat1-8080\webapps\manag 十月 15, 2015 4:52:39 下午 org.apache.catalina.startup.HostConfig deployDirectory 信息: Deploying web application directory E:\WorkFolder\Temp\Redis-Session\apache-tomcat1-8080\webapps\ROOT 十月 15, 2015 4:52:39 下午 org.apache.catalina.startup.TldConfig execute 信息: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a co 十月 15, 2015 4:52:39 下午 com.radiadesign.catalina.session.RedisSessionManager startInternal 信息: Attached to RedisSessionHandlerValve 十月 15, 2015 4:52:39 下午 com.radiadesign.catalina.session.RedisSessionManager initializeSerializer 信息: Attempting to use serializer :com.radiadesign.catalina.session.JavaSerializer 十月 15, 2015 4:52:39 下午 com.radiadesign.catalina.session.RedisSessionManager startInternal 信息: Will expire sessions after 1800 seconds ...
然后我们分别在tomcat_1/webapp/ROOT,tomcat_2/webapp/ROOT下放setsession.jsp,getsession.jsp
setsession.jsp内容:
<%session.setAttribute("name","jaychang");session.setAttribute("id","1001"); %>
getsession.jsp内容:
<%=session.getAttribute("id")%> ID:<%=session.getAttribute("name")%> NAME:<%=session.getAttribute("id")%>
好了,至此,你应该也明白了,现在要干嘛了,那么重点来了,见证奇迹的时刻到了!
打开浏览器,输入 http://127.0.0.1:8080/setsession.jsp回车
D741CDC41F66331883AAB70DC6252046就是SESSIONID
值为
\xac\xed\x00\x05w\b\x00\x00\x01Pj\xc8\xf5\xb2sr\x00\x0ejava.lang.Long;\x8b\xe4\x90\xcc\x8f#\xdf\x02\x00\x01J\x00\x05valuexr\x00\x10java.lang.Number\x86\xac\x95\x1d\x0b\x94\xe0\x8b\x02\x00\x00xp\x00\x00\x01Pj\xc8\xf5\xb2sq\x00~\x00\x00\x00\x00\x01Pj\xc8\xf5\xb2sr\x00\x11java.lang.Integer\x12\xe2\xa0\xa4\xf7\x81\x878\x02\x00\x01I\x00\x05valuexq\x00~\x00\x01\x00\x00\a\bsr\x00\x11java.lang.Boolean\xcd r\x80\xd5\x9c\xfa\xee\x02\x00\x01Z\x00\x05valuexp\x01q\x00~\x00\asq\x00~\x00\x00\x00\x00\x01Pj\xc8\xf5\xb4t\x00 D741CDC41F66331883AAB70DC6252046sq\x00~\x00\x04\x00\x00\x00\x02t\x00\x04namet\x00\bjaychangt\x00\x02idt\x00\x041001
最后我们看到了...jaychang ...1001
好了,那我们再看看getsession.jsp,先看tomcat_1的getsession.jsp
看下redis变化,get "D741CDC41F66331883AAB70DC6252046"
再看看tomcat_2的getsession.jsp,页面上获取到了
再看看redis的变化,又一次get "D741CDC41F66331883AAB70DC6252046"
获取的sessionId是同一个,说明成功了
参考:
https://github.com/jcoleman/tomcat-redis-session-manager
https://support.pivotal.io/hc/en-us/articles/206085337-How-to-setup-Redis-Session-Manager-on-tcServer-Tomcat
http://www.cnblogs.com/lengfo/p/4260363.html
Tomcat7集群共享Session 基于redis进行统一管理相关推荐
- Tomcat7集群共享Session 基于redis进行统一管理(转)
背景: 很多时候,生产环境,需要多个tomcat协作,那么session的统一管理是一个首先需要解决的问题.session的统一管理有很多解决方案,比如存储至数据库.memcache.redis.那么 ...
- 集群共享session;shiro实现session共享;springboot实现redis共享session;
shiro实现共享session;springboot集成redis共享session;集群环境下shiro共享session 一.实现session共享 1. 聊聊session共享 2. shir ...
- tomcat集群共享session
[前言] 无数人撞的头破血流告诉我们的一个经验是一个网站如果不做负载后果是不堪设想:负载一是对请求进行分压不至于大流量过来把机器压垮,即使部分机器Down掉网站仍可用(高可用,防止单点故障). [负载 ...
- asp.net mvc 用Redis实现分布式集群共享Session。
1.这两天研究Redis搞分布式session问题,网上找的资料都是用ServiceStack.Redis来实现的,但是在做性能测试的时候发现最新的v4版本有限制每小时候最多请求6000次,因为官网开 ...
- Redis + Tomcat + Nginx 集群实现 Session 共享
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者 | 蕃薯耀 链接 | www.cnblogs.com/fan ...
- Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享
转载自 Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享 一.Session共享使用tomcat-cluster-redis-session-mana ...
- Nginx+Tomcat+Memcached实现tomcat集群和session共享
Nginx+Tomcat+Memcached实现tomcat集群和session共享 [http://blog.csdn.net/shimiso/article/details/8979044] 为什 ...
- Nginx+tomcat集群的session共享问题
请求负载过程中会话信息不能丢失.那么需要在多个tomcat中session需要共享.所以需要进行相关问题的解决 配置Tomcat的session共享可以有三种解决方案: 第一种:是以负载均衡服务器本身 ...
- 用Redis存储Tomcat集群的Session
用Redis存储Tomcat集群的Session 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 前段时间,我花了不少时间来寻求一种方法,把新开发的代码推 ...
最新文章
- C++简单使用Jsoncpp来读取写入json文件
- ios 团购信息客户端demo(三)
- dotweb——go语言的一个微型web框架(二)启动dotweb
- Spring MVC-09循序渐进之文件上传(基于Servlet3.0+Html5客户端上传文件)
- TDD:MS自带的单元测试 之 线程模型和执行顺序
- 常见浏览器兼容性问题及解决方案
- python-字符串转义符号
- JQuery中trim函数的具体实现代码
- 嘉年华回顾丨周振兴带你解密POLARDB产品架构与实现
- 学习笔记-数据结构与算法之栈与队列
- python语言输入中文_selenium+python 语言编写问题,在执行时无法输入中文用户名...
- win8下Oracle 12c 创建新用户并分配表空间
- matlab矩阵的函数,MATLAB矩阵运算函数
- 魅族自动化测试架构之路
- Axure学习之简介
- 点击reset按钮失效,不能清空输入框。
- Kubernetes CICD发布架构流程思路
- YYC松鼠短视频系统v3.5版本--稳定版本---优化性能以及各处接口返回以及部分ui页面细节
- [LTE 架构]4G核心网EPC都有什么花花肠子 # 承载、附着、MME\SGW\PGW,EPS
- 2016/5/21 Seperate by *