zoukankan      html  css  js  c++  java
  • Tomcat中session共享问题的简单解决办法

    tomcat-redis-session-manager

    使用redis配置tomcat共享session

    结构图:

    分析:

    分布式web server集群部署后需要实现session共享,针对 tomcat 服务器的实现方案多种多样,
    比如 tomcat cluster session 广播、nginx IP hash策略、nginx sticky module等方案,
    本文主要介绍了使用 redis 服务器进行 session 统一存储管理的共享方案。
    

    必要环境:

    • java1.7
    • tomcat7
    • redis2.8

    nginx 负载均衡配置

    1. 修改nginx conf配置文件加入

       upstream tomcat {
           server 200.10.10.67:8110;
           server 200.10.10.67:8120;
           server 200.10.10.44:8110;
           server 200.10.10.66:8110;
       }
      
    2. 配置 相应的server或者 location地址到 http://tomcat

    tomcat session共享配置步骤

    1. 添加redis session集群依赖的jar包到 TOMCAT_BASE/lib 目录下

    2. 修改 TOMCAT_BASE/conf 目录下的 context.xml 文件

       	<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
       	<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
            host="localhost"
            port="6379"
            database="0"
            maxInactiveInterval="60"
            sessionPersistPolicies="PERSIST_POLICY_1,PERSIST_POLICY_2,.."
            sentinelMaster="SentinelMasterName"
            sentinels="sentinel-host-1:port,sentinel-host-2:port,.."/>
      

      属性解释:

      • host redis服务器地址

      • port redis服务器的端口号

      • database 要使用的redis数据库索引

      • maxInactiveInterval session最大空闲超时时间,如果不填则使用tomcat的超时时长,一般tomcat默认为1800 即半个小时

      • sessionPersistPolicies session保存策略,除了默认的策略还可以选择的策略有:

        [SAVE_ON_CHANGE]:每次 session.setAttribute() 、 session.removeAttribute() 触发都会保存. 
        	注意:此功能无法检测已经存在redis的特定属性的变化,
        	权衡:这种策略会略微降低会话的性能,任何改变都会保存到redis中.
        
        [ALWAYS_SAVE_AFTER_REQUEST]: 每一个request请求后都强制保存,无论是否检测到变化.
        	注意:对于更改一个已经存储在redis中的会话属性,该选项特别有用. 
        	权衡:如果不是所有的request请求都要求改变会话属性的话不推荐使用,因为会增加并发竞争的情况。
        
      • sentinelMaster redis集群主节点名称(Redis集群是以分片(Sharding)加主从的方式搭建,满足可扩展性的要求)

      • sentinels redis集群列表配置(类似zookeeper,通过多个Sentinel来提高系统的可用性)

      • connectionPoolMaxTotal

      • connectionPoolMaxIdle jedis最大能够保持idel状态的连接数

      • connectionPoolMinIdle 与connectionPoolMaxIdle相反

      • maxWaitMillis jedis池没有对象返回时,最大等待时间

      • minEvictableIdleTimeMillis

      • softMinEvictableIdleTimeMillis

      • numTestsPerEvictionRun

      • testOnCreate

      • testOnBorrow jedis调用borrowObject方法时,是否进行有效检查

      • testOnReturn jedis调用returnObject方法时,是否进行有效检查

      • testWhileIdle

      • timeBetweenEvictionRunsMillis

      • evictionPolicyClassName

      • blockWhenExhausted

      • jmxEnabled

      • jmxNameBase

      • jmxNamePrefix


    3. 重启tomcat,session存储即可生效

  • 相关阅读:
    mysql索引
    springboot mybatis 后台框架平台 shiro 权限 集成代码生成器
    java 企业网站源码模版 有前后台 springmvc SSM 生成静态化
    java springMVC SSM 操作日志 4级别联动 文件管理 头像编辑 shiro redis
    activiti工作流的web流程设计器整合视频教程 SSM和独立部署
    .Net Core中的ObjectPool
    文件操作、流相关类梳理
    .Net Core中的配置文件源码解析
    .Net Core中依赖注入服务使用总结
    消息中间件RabbitMQ(一)
  • 原文地址:https://www.cnblogs.com/ldy-blogs/p/10401216.html
Copyright © 2011-2022 走看看