tomcat7 + redis + nginx 实现session共享

来源:互联网 发布:环保行业 知乎 编辑:程序博客网 时间:2024/06/06 00:38


本文中是在一台Linux的虚拟机上,有一台Nginx做负载均衡,后端挂接了两台Tomcat服务器,且每台Tomcat的Session会话都保存到Redis数据库中。

所有的tomcat都是从redis读、写会话数据。

当某个tomcat宕机了,Nginx会自动把请求转到活动的tomcat中;

当增加tomcat服务时,所有的请求会话是从redis中获取的,能够获取用户的session所有信息。

这样就可以无缝的将用户请求切换到新的服务中,对用户来说是无感知的。


1、数据准备


tomcat7、redis3.0.4、 nginx


必要jar包准备:

commons-pool2-2.4.2.jar

jedis-2.9.0.jar

tomcat7-redis-session-manager-2.0.0.jar  github下载


用于Session测试的test.war包

一个简单的session增删查的web程序


上述jar包的下载地址:https://pan.baidu.com/s/1jHMyOwm


2、redis 搭建


《 redis hello world 及设置 》



3、nginx 负载均衡


《nginx 的反向代理和负载均衡入门》


4、Tomcat 配置


4.1、配置Context.xml


在《nginx 的反向代理和负载均衡入门》  基础上,配置Context.xml,添加如下内容,具体的host和port由自己的环境决定。

两个tomcat的Context.xml 都要配置哦。

下面这是redis单机的tomcat配置

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />  <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"   host="localhost"   port="6379"   database="0"   maxInactiveInterval="60" />


Sentinel配置:

<!-- Sentinel 配置 --><Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />        <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager" maxInactiveInterval="60"sentinelMaster="mymaster"sentinels="127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381,127.0.0.1:26382"/>
其外如果有redis设置了密码,则要配置password="密码"等参数。

4.2 lib 配置

在上面的3个jar包放到两个 tomcat/lib 包下


4.3 启动服务

 重启两个 tomcat。确保存tomcat正确运行,没有报错。

redis、nginx服务也确保在正常运行。



5、测试


5.1 部署test.war


将test.war放到两个tomcat 的 webapps 下面,重启tomcat服务


5.2 访问 test 服务


访问地址: http://tomcat.taotao.com/test/




5.3 在test 测试session


不停地刷新地址,nginx 请求转到tomcat1、或tomcat2,在网页上可以看到访问地址是变化的,但是session ID是不变的。

向session中添加或删除 key-value值,尽管访问地址变化着,但是session ID 及session中存放的其它的值是不变。







0 0