天天看点

基于Redis集群的tomcat集群Session共享

        Tomcat使用Redis缓存Session,集中把Session缓存到Redis服务器中,而不是缓存到服务器的内存中,可以实现集群服务器共享Session。

        应用场景:

            1.当网站接收大量请求时,单一服务器终究无法满足需要处理的负荷量

            2.服务器不稳定(莫名其妙的宕机等),搭建tomcat集群救急。

            3.项目更新迭代时,不影响项目的正常运行

        Tomcat集群中任何一台机器的下线或上线, 能够不影响整个集群对外的一致性.并且具有较好的扩充性还有容错能力。到目前为止,官方支持Tomcat6和Tomcat7,Tomcat8目前还没有正式支持。

实现原理图示:

基于Redis集群的tomcat集群Session共享

默认已经安装了redis和tomcat,没有安装可参考tomcat配置:redis安装    tomcat安装

基于Redis集群的tomcat集群Session共享

nginx配置:

基于Redis集群的tomcat集群Session共享

在Tomcat目录的lib下,添加相关jar包,并修改相关的配置文件(这个支持tomcat 8 以及redis 3.0,参考readMe.txt)

下载链接:TomcatRedisSessionManager

网盘下载:TomcatRedisSessionManager

可以下载TomcatRedisSessionManager-1.0.zip包,解压后包括所需的jar包和配置文件。如下所示:

基于Redis集群的tomcat集群Session共享
基于Redis集群的tomcat集群Session共享
基于Redis集群的tomcat集群Session共享

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等。

基于Redis集群的tomcat集群Session共享
基于Redis集群的tomcat集群Session共享

简单测试: 用自己的index.jsp替换 tomcat/webapps/ROOT/index.jsp 文件

下载 index.jsp

基于Redis集群的tomcat集群Session共享

关闭 Apache-Tomcat-7.0.88-2服务器后,nginx访问的是Apache-Tomcat-7.0.88-1服务器

基于Redis集群的tomcat集群Session共享

还可以获取到Apache-Tomcat-7.0.88-2的session数据,查询redis,会发现redis键值都是加密数据

到这,可以算是结束了吧!

继续阅读