Tomcat集群使用redis实现session共享
准备
本文对Redis做session共享的方案进行验证。使用一个Apache服务器与两个tomcat服务器搭建负载均衡。
打包Tomcat-Redis-Session
-
下载源码 https://github.com/jcoleman/tomcat-redis-session-manager
-
新建maven工程。
-
修改pom.xml文件。
添加依赖
1
2
3
4
5
6
7
8
9
10<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-catalina</artifactId>
<version>7.0.27</version>
</dependency>使用JDK1.7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<build>
<plugins>
<!-- compiler插件, 设定JDK版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
<showWarnings>true</showWarnings>
</configuration>
</plugin>
</plugins>
</build> -
导入源码, 打包得到
tomcat-redis-session.jar
将上面下载下来的源码包中的src,拷贝到工程中的相应位置。
1
mvn clean package -Dmaven.test.skip=true
获取其它依赖包
下载jedis-2.7.3.jar
和commons-pool2-2.4.1.jar
配置Tomcat
准备n台tomcat。
添加jar包
将上面得到的tomcat-redis-session.jar
, jedis-2.7.3.jar
和commons-pool2-2.4.1.jar
放入到tomcat目录下的lib/
目录下。
配置端口
如果n台tomcat部署在同一台机器上,为避免端口占用,就要修改conf/server.xml
中的端口:SHUTDOWN端口,HTTP端口,AJP端口。
这里的两台tomcat的端口如下:
- HTTP: 8081 – AJP: 8009
- HTTP: 8080 – AJP: 8019
配置context.xml文件
修改每台tomcat的conf/context.xml
文件,在Context
节点中按实际情况添加如下配置。
1 |
|
配置Apache
这里使用的Apache2.4.x。
配置httpd.conf
修改Apache目录下的conf/httpd.conf
,
-
打开proxy, banlancer相关的模块
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_express_module modules/mod_proxy_express.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_html_module modules/mod_proxy_html.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_http2_module modules/mod_proxy_http2.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule speling_module modules/mod_speling.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule xml2enc_module modules/mod_xml2enc.so -
配置VirtualHost
在
httpd.conf
文件中取消下行的注释1
Include conf/extra/httpd-vhosts.conf
修改
conf/extra/httpd-vhosts.conf
根据实际情况添加下面的VirtualHost
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#虚拟机配置,负载均衡配置 注意空格
<VirtualHost *:80>
DocumentRoot "d:/Apache24/htdocs"
ProxyPass / balancer://cluster/ stickysession=JSESSIONID|jsessionid nofailover=On
ProxyPassReverse / balancer://cluster/
ErrorLog "logs/error-tung.log"
CustomLog "logs/access-tung.log" common
</VirtualHost>
#The ProxyRequests directive should usually be set off when using ProxyPass.
ProxyRequests Off
<proxy balancer://cluster>
BalancerMember ajp://localhost:8009 loadfactor=1 smax=5 max=20 ttl=120 retry=300 timeout=15
BalancerMember ajp://localhost:8019 loadfactor=1 smax=5 max=20 ttl=120 retry=300 timeout=15
ProxySet lbmethod=byrequests
</proxy> -
重启apache
导入项目
为了验证sessionid是否相同,只需新建一个最简单的web工程,然后在某个jsp中输出如下内容即可。
1 |
|
Tomcat集群使用redis实现session共享
http://www.tung7.com/茶话闲谈/tomcat_redis_session_share.html