基于Redis集群的tomcat集群Session共享
Tomcat使用Redis缓存Session,集中把Session缓存到Redis服务器中,而不是缓存到服务器的内存中,可以实现集群服务器共享Session。
应用场景:
1.当网站接收大量请求时,单一服务器终究无法满足需要处理的负荷量
2.服务器不稳定(莫名其妙的宕机等),搭建tomcat集群救急。
3.项目更新迭代时,不影响项目的正常运行
Tomcat集群中任何一台机器的下线或上线, 能够不影响整个集群对外的一致性.并且具有较好的扩充性还是容错能力。到目前为止,官方支持Tomcat6和Tomcat7,Tomcat8目前还没有正式支持。
实现原理图示:
默认已经安装了redis和tomcat,没有安装可参考tomcat/redis/nginx的安装
tomcat配置:
nginx配置:
在Tomcat目录的lib下,添加相关jar包,并修改相关的配置文件(这个支持tomcat 8 以及redis 3.0,参考readMe.txt)
下载链接:TomcatRedisSessionManager
网盘下载:TomcatRedisSessionManager
可以下载TomcatRedisSessionManager-1.0.zip包,解压后包括所需的jar包和配置文件。如下所示:
1) 将上面jar包拷贝到各个tomcat的lib目录下, 将redis-data-cache.properties拷到tomcat的conf目录下。
2) 配置文件修改
(1) 修改redis-data-cache.properties配置文件如下:
# redis hosts ex: 127.0.0.1:6379, 127.0.0.2:6379, 127.0.0.2:6380, ....
redis.hosts=10.0.192.64:6379 (redis服务器IP及端口号)
# Redis Password
redis.password= redis (REDIS配置文件中设置的密码)
# set true to enable redis cluster mode (集群设置为true)
redis.cluster.enabled=false
(2)在tomcat/conf/context.xml文件中增加以下两行:
<Valve className="com.r.tomcat.session.management.RequestSessionHandlerValve"/>
<Manager className="com.r.tomcat.session.management.RequestSessionManager"/>
(3)设置tomcat/conf/web.xml 中 session有效期(感觉这个不很重要,默认设置的时间是30,大约在591行)
<session-config>
<session-timeout>60<session-timeout>
<session-config>
启动:先启动redis,再启动 tomcat集群,nginx等。
简单测试: 用自己的index.jsp替换 tomcat/webapps/ROOT/index.jsp 文件
关闭 Apache-Tomcat-7.0.88-2服务器后,nginx访问的是Apache-Tomcat-7.0.88-1服务器
还可以获取到Apache-Tomcat-7.0.88-2的session数据,查询redis,会发现redis键值都是加密数据
到这,可以算是结束了吧!