nginx代理,tomcat8.5集群,redis的Session共享实现方法
emmmmm,最近在做一件事情,就是tomcat8.5的session共享,因为之前一直在用tomcat7,使用的jar包也是我之前自己编译的,在tomcat7上用着没任何问题,现在用的8.5,然后按着网上的方法再次编译jar包,但就是各种抛错,就是不成功,最后没办法,只能用jvm-route暂时解决这个问题了,但是jvm-route不是真正意义上的解决了session共享,他只是session的复制粘贴,如果有一个服务器宕了session就失效了,无法会话转移,这不是我想要的。
然后我就向单位的某个开发同事求救,我说我想做tomcat8.5的session共享,session要存到redis里面,几分钟后,同事给我发了一个压缩包,我接收后打开看了一下有很多jar包和一个文本,然后过来叫我吧那些包放到lib目录下,改一下配置文件就可以了,配置完以后重启了一下,正常启动,完美解决了这个问题,下面拿出来分享一下吧。需要使用jvm-route的参考这篇文章,tomcat6.0.0以上就可以用。
我现在的情况是只有N个tomcat组成集群,8.5.15版本,会用到redis,所以刚就装了一个redis,直接从配置开始吧,安装就不写了,之前都写过了。
方法一
下载jar包
下载完成上传到要做集群的服务器$TOMCAT/lib目录下。
修改context.xml
加入以下内容,地址端口按自己的实际情况修改,要做集群的全部添加。
<Manager className="com.lemeng.tomcat.redisson.SingleServerSessionManager"
endpoint="127.0.0.1:6379"
sessionKeyPrefix="_rsm_"
saveOnChange="false"
forceSaveAfterRequest="false"
dirtyOnMutation="false"
ignorePattern=".*\\.(ico|png|gif|jpg|jpeg|swf|css|js)$"
connectionPoolSize="100"
database="1"
timeout="60000"
pingTimeout="1000"
retryAttempts="20"
retryInterval="1000"
/>
配置完成后,重启tomcat即可。现在这样服务器崩只要不全崩就不会影响session。最后看一下redis。
方法二
其实不推荐使用上面的那种方法,主要是jar包太多了,其实三个就能解决问题,下面的包也不是我自己编译的,好像有点不好搞,在某些地方逛意外发现的,没抱希望,结果还真能用,如下。
下载jar包
老样子,还是放到要做集群的服务器$TOMCAT/lib目录下,如果按第一种方式做了,先把之前的jar包全部删掉,因为有冲突。
修改context.xml
加入一下内容
<Valve className="com.naritech.nicole.gump.RedisSessionHandlerValve" />
<Manager className="com.naritech.nicole.gump.RedisSessionManager"
host="127.0.0.1"
port="6379"
database="0"
maxInactiveInterval="60"
/>
加完以后重启tomcat即可,效果和第一种一样。就是jar包相对的少了很多。就这样吧。我就不写测试方法了,这个只是适合tomcat8.5,8.0的没试过,7的就更不用说了,需要7的参考一下这篇文章。
软链接
顺便提一下,因为现在做集群了,涉及到了一些文件共享,使用NFS挂载到指定目录后,然后通过软链接连接到项目里,但是tomcat默认是不支持访问软连接的,需要改点东西,$TOMAT\_HOME/conf/context.xml文件,添加如下内容,重启即可。
tomcat8
<Resources allowLinking="true" />
tomcat7
<Context allowLinking="true" />
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。