nginx集群负责均衡利用redis实现共享session会话状态,针对tomcat8

当前是只针对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

猜你喜欢

转载自blog.csdn.net/qq_27184497/article/details/82626126
今日推荐