Nginx + Tomcat7 + redis session一致性问题

Posted 一剑侵心

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx + Tomcat7 + redis session一致性问题相关的知识,希望对你有一定的参考价值。

        nginx 作负载均衡时,由于是每次都需要把请求分发到不同的机器,同一个用户在一台机器上创建了 session,下一次的请求很有可能会转发到另外一台机器,会造成 session 丢失。我们可以使用 Redis 来保存 session。具体步骤如下:

1.  https://files.cnblogs.com/files/langfanyun/redislib.7z  下载解压后,把 jar 包都放在Tomcat 的 lib 目录下;

2. 编辑 Tomcat下的 conf/context.xml 文件,加入如下配置:

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

   其中 host 为 Redis 的服务器地址。

3. 修改 Tomcat 下的 conf/server.xml 文件,在 <Engine>节点添加 jvmRoute 属性,不同机器上的Tomcat 设置不同的值:

       <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm2">

4. 修改 Tomcat 下的 webapps/ROOT/ 下的 index.jsp 文件,把<body>里的内容改成如下。不同机器上的此文件,添加一些不同的值,以区分不同的机器。

<body>
        SessionID: <%=session.getId()%><br/>
        SessionIP: <%=request.getServerName()%><br>
        tomcat1
    </body>

5. 启动 Redis 服务器和各个 Tomcat,访问时,多刷新几次,可以看到 sessionID 的值一样,但是其它内容不一样。说明实际上是访问了不同的 Tomcat 下的应用 。

以上是关于Nginx + Tomcat7 + redis session一致性问题的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat +redis +nginx 搭建高性能负载均衡 集群

Tomcat7中使用nginx+redis实现session共享。将jar包引入后,在context.xml中引入文件,出现异常,报错!

Tomcat-redis-Nginx

windows下tomcat7+nginx1.8负载均衡

nginx+tomcat+redis完成session共享

nginx+tomcat+redis的集群+session共享