当前是只针对tomcat8的部署,
如果你们的服务器是tomcat7.x或7以下的版本,请看这个帖子:https://blog.csdn.net/hua1586981/article/details/78132710
目的
搭建好nginx负载均衡后,实现反向代理的集群功能,当用户访问网站时,负载均衡会自动在多台服务器之间来回交替的调用,以确保达到负载均衡的效果,
问题
但是这里有一个问题,就是session会话的保存,笔者在搭建好nginx集群后,访问网站是没问题的,但登录之后再刷新页面,发现还是没登陆的状态,就这样反复登录了几次都是未登录的状态,百度了解到,原来是session会话的问题,你在A服务器登录的,当你刷新页面后,nginx自动代理到了B服务器,但是你的session会话在A服务器中是已登录的状态,在B服务器是未登录的。所以就需要你在登录一次。
如图:
解决办法就是利用redis缓存来统一保存各服务的session会话,用户访问A服务后,服务器会将用户的会话状态保存到redis缓存中,这时候用户刷新页面,切换到B服务,B服务器会先去redis缓存中找是否已经有这个用户的会话状态,如果有了,直接取出来用,如果没有 在创建一个
文字描述到此结束,上教程。。。
利用redis实现会话共享
1、说明
此demo用的是tomcat8,不同的tomcat版本会有不同的jar包。将会给到tomcat7的jar包和tomcat8的jar包。因为现在网上插件不支持tomcat8。我提供的插件jar包是更改源码后的jar。所以是OK的啦。此处注意:下载的jar包是放在tomcat/lib目录下哦,并非工程的lib目录下呢~
也可自行修改 RedisSessionManager.java 文件
源码下载地址:https://github.com/jcoleman/tomcat-redis-session-manager
2、下载jar包
3、配置
更改tomcat/conf下context.xml文件【context】节点下加如下代码【两个tomcat配置文件都要改哦】:
注:这是配置redis的链接信息,如果没有密码可以把passowrd项去掉
注:这里是tomcat8的配置代码,也就是此博客所用到的配置
<Valve className="com.demo.redis_session.RedisSessionHandlerValve" />
<Manager className="com.demo.redis_session.RedisSessionManager"
#这里是redis服务器地址
host="192.168.50.140"
#这里是redis端口,redis默认端口是6379
port="6379"
#这里是redis数据库中的标识,标识第0个,默认使用0即可
database="0"
#redis过期时间默认设置为60,单位是秒,session过期时间为30分钟,所以设置为1800对应30分钟
maxInactiveInterval="1800"/>
配置完记得重启服务器。
4、运行查看效果
填写test.jsp页面已验证是否成功
这是阿里云服务器上jsp
<html>
<head>
</head>
<body>
<h4 style="margin:10px;">11aliyun-sessionId = <%=session.getId() %> </h4>
</body>
</html>
这是腾讯云服务器上的jsp
<html>
<head>
</head>
<body>
<h4 style="margin:10px;">tenxunyun-sessionId = <%=session.getId() %> </h4>
</body>
</html>
查看页面效果,第一次刷新,是阿里云的服务器
第二次刷新,是腾讯云的
我们可以看到,他们的sessionid是一样的,这样就实现了session共享
转载于https://blog.csdn.net/hua1586981/article/details/78132710