本文将继续单机架构升级集群系列博文, 记录tomcat的Session共享工作的记录,希望能帮助到需要的朋友们,也欢迎大牛们批评指正!!
背景
在博文( https://my.oschina.net/u/2342969/blog/995598 )中描述了本次架构升级的背景
在博文( https://my.oschina.net/u/2342969/blog/1036702 )中记录了redis主从集群搭建
在博文(https://my.oschina.net/u/2342969/blog/1162829 )中记录了 nginx+keepalived主从集群高可用搭建工作
以上博文有需要的朋友们可以观阅
本文将记录 tomcat的Session共享工作, 在此参考了 spring官网文档(
http://docs.spring.io/spring-session/docs/1.3.1.RELEASE/reference/html5/#httpsession-redis-xml
)
概述
基于以前博文可以了解到,现阶段,我们是一台nginx、2台tomcat
在我们未做session共享的情况下,使用的nginx的iphash策略,以致停掉一个tomcat_A,所有请求都会集中到另外一台tomcat_B 并需要重新登陆, tomcat_A启动后,已经请求道tomcat_B的请求量还是不会减少,
做了session共享的应用,是基于 tomcat sessionmanager 做的,依赖tomcat版本,需要修改服务器配置,以致如需换应用服务器还需要重新搭建
现优化方案,基于spring session,将session共享做到应用层,净化服务器配置,便于应用迁移。
环境准备
- centOs:6.5
-
nginx : 1.5.8
-
redis:版本任意(本文使用的2.8)
注意事项
- spring session依赖spring mvc
- 本文基于redis实现session共享
基于lettuce完成
pom依赖
在maven项目pom.xml 增加以下依赖
<dependencies>
<!-- ... -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>1.3.1.RELEASE</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>biz.paluch.redis</groupId>
<artifactId>lettuce</artifactId>
<version>3.5.0.Final</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.4.RELEASE</version>
</dependency>
</dependencies>
session共享spring配置
在项目增加spring-session.xml
目录如下: src/main/webapp/WEB-INF/spring/spring-session.xml
<context:annotation-config/> <!--开启注解配置-->
<!--springSession 配置-->
<bean id="sessionConfiguration" class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
<!--修改session的有效时间 以秒为单位,默认值是1800,便于测试修改为60秒-->
<property name="maxInactiveIntervalInSeconds" value="60"></property>
</bean>
<!-- 如不使用P命名空间或者属性注入 默认redis ip为localhost,port为6379 -->
<bean class="org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory"
p:hostName="12