针对之前的nginx+tomcat的负载均衡机制,因为会出现session丢失的问题,特研究了下redis的session共享;下载JDK7、tomcat7以备后续测试;
一、下载tomcat-redis-session的源码自行打包:https://github.com/jcoleman/tomcat-redis-session-manager
这里要对tomcat-redis-session打包做一下特殊记录:
上图中的构建pom.xml。
<?xml version="1.0" encoding="GB2312"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.hik</groupId>
<artifactId>tomcat-redis-session</artifactId>
<!--<packaging>war</packaging>-->
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-catalina</artifactId>
<version>7.0.27</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
由于我们的环境都是基于7系列来运行的,所以必须保持一致;
二、下载安装redis(linxu版本)
wget http://redis.googlecode.com/files/redis-2.4.6.tar.gz
解压:
tar –zxvfredis-2.4.6.tar.gz
编译
需要说明的事,redis的安装非常简单,已经有现成的Makefile文件,直接运行make命令即可。
make
make install
安装成功后直接启动redis:redis-server/etc/redis.conf,如图
新开窗口redis-cli测试:
Set a 123
Get a 得到123 安装成功可以使用
三、上边源码自己打包生成tomcat-redis-session.jar包,从网上下载jedis-2.7.2.jar commons-pool2-2.4.1.jar;将这3个包放入tomcat\lib目录下;
四、配置tomcat\conf下的context.xml文件
将以下代码添加进context.xml里边
<!-- tomcat-redis-session共享配置 -->
<ValveclassName="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve"/>
<ManagerclassName="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="localhost"
port="6379"
database="0"
maxInactiveInterval="60" />
五、tomcat测试session共享配置
准备两个tomcat模拟,每个配置都跟上边一样,然后
Tomcat18080 webapp/index.jsp修改:<% request.getSession().setAttribute(“a”,”123”);%>
Tomcat28090 webapp/index.jsp 修改:<% out.print(request.getSession().getAttribute(“a”))%>
六、测试整个环境:
服务器记得先启动redis!
启动tomcat1,访问http://localhost:8080/index.jsp
启动tomcat2,访问 http://localhost:8090/index.jsp,可看到页面显示123,证明session共享成功。
七、可能会出现的错误
Tomcat可能启动不正常,最大的原因是jar包没用对应的版本,本人测试可以用的相关jar版本是commons-pool2-2.3,jedis-2.7.2。
tomcat-redis-session-manager-master.jar如果不能用就按文档自己重新打包。如果有其他错误(比如java.lang.UnsupportedClassVersionError)
的话就去检查下启动指定jdk是否为1.7,
如果报错xml文件如果读取错误(Invalid byte 1 of 1-byte UTF-8 sequence)就修改context.xml中 encoding="GB2312"?>,
其他错误基本上都跟jar版本和运行环境相关,请认真检查。