转自http://blog.csdn.net/grhlove123/article/details/48047735
本文记录nginx+Redis+tomcat实现session共享的过程
nginx安装:http://blog.csdn.net/grhlove123/article/details/47834673
redis安装:http://blog.csdn.net/grhlove123/article/details/47783471
准备两个tomcat,修改相应的端口
名称IP端口tomcat版本JDKtomcat110.10.49.2380807.0.401.7.0_25tomcat210.10.49.1580817.0.401.7.0_25
修改nginx.conf加上:
[html] view plain copy upstream backend { server 10.10.49.23:8080 max_fails=1 fail_timeout=10s; server 10.10.49.15:8081 max_fails=1 fail_timeout=10s; } 修改nginx.conf的location成 [html] view plain copy location / { root html; index index.html index.htm; proxy_pass http://backend; } 启动nginx。
下载tomcat-redis-session-manager相应的jar包,主要有三个:
wget https://github.com/downloads/jcoleman/tomcat-redis-session-manager/tomcat-redis-session-manager-1.2-tomcat-7-Java-7.jar wget http://central.maven.org/maven2/redis/clients/jedis/2.5.2/jedis-2.5.2.jar wget http://central.maven.org/maven2/org/apache/commons/commons-pool2/2.0/commons-pool2-2.0.jar
下载完成后拷贝到$TOMCAT_HOME/lib中
修改两tomcat的context.xml:
[html] view plain copy <Context> <!-- Default set of monitored resources --> <WatchedResource>WEB-INF/web.xml</WatchedResource> <!-- Uncomment this to disable session persistence across Tomcat restarts --> <!-- <Manager pathname="" /> --> <!-- Uncomment this to enable Comet connection tacking (provides events on session expiration as well as webapp lifecycle) --> <!-- <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" /> --> <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" /> <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager" host="10.10.49.20" port="6379" database="0" maxInactiveInterval="60" /> </Context> 在tomcat/webapps/test放一个index.jsp
[html] view plain copy <%@ page language="java" %> <html> <head><title>TomcatA</title></head> <body> <table align="centre" border="1"> <tr> <td>Session ID</td> <td><%= session.getId() %></td> </tr> <tr> <td>Created on</td> <td><%= session.getCreationTime() %></td> </tr> </table> </body> </html> sessionID:<%=session.getId()%> <br> SessionIP:<%=request.getServerName()%> <br> SessionPort:<%=request.getServerPort()%> <% //为了区分,第二个可以是222 out.println("This is Tomcat Server 1111"); %>
启动tomcat,发现有异常:com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve 类找不到
分别打开三个jar包,确实没有这个类,解决可以参考:
http://blog.csdn.net/qinxcb/article/details/42041023
通过访问http://10.10.49.20/test/
刷新:
可以看到虽然Server从1111变为2222,但session的创建时间没有变化,这就完成了session共享。
另外,Nginx+Tomcat+Memcached集群Session共享
Memcached配置
必备的JAR包:
memcached-session-manager-1.6.5.jar、memcached-session-manager-tc7-1.6.5(tomcat6 请选tc6)、javolution-5.4.3.1.jar、msm-javolution-serializer-1.6.5.jar、spymemcached-2.10.3.jar 这些JAR都可以在:http://code.google.com/p/memcached-session-manager/downloads/list 这里下载到,网速慢,FQ吧~ couchbase-client-1.4.4.jar 下载地址:http://packages.couchbase.com/clients/java/1.4.4/Couchbase-Java-Client-1.4.4.zip 这个JAR在这个zip文件中 将Memcached的安装包解压到目录下,文件夹重命名为X:/memcached以管理员身份进入X:/memcached,执行命令memcached.exe –d install,现在memcached已经作为系统服务可以随机启动,默认端口:11211下面介绍几个常用的Memcached命令: 查看memcached的服务是否已经启动:tasklist /fi "imagename eq memcached.exe" memcached参数使用介绍 -p 监听的端口 -l 连接的IP地址, 默认是本机 -d start 启动memcached服务 -d restart 重起memcached服务 -d stop|shutdown 关闭正在运行的memcached服务 -d install 安装memcached服务 -d uninstall 卸载memcached服务 -u 以的身份运行 (仅在以root运行的时候有效) -m 最大内存使用,单位MB。默认64MB -M 内存耗尽时返回错误,而不是删除项 -c 最大同时连接数,默认是1024 -f 块大小增长因子,默认是1.25 -n 最小分配空间,key+value+flags默认是48 -h 显示帮助 Memcached的Tomcat配置【 处理Session同步的问题】 首先,将之前下载的JAR包全部拷贝到两个Tomcat的lib下。 接着,配置两个Tomcat的context.xml的文件:在Context标签内加入如下内容 [html] view plain copy <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:localhost:11211"<!-- Memcached只有一个节点,现在这么写就OK --> requestUriIgnorePattern=".*/.(png|gif|jpg|css|js)$" sessionBackupAsync="false" sessionBackupTimeout="100" transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" copyCollectionsForSerialization="false"/>