• 基于redisson实现tomcat集群session共享


    目录

    1、环境

    2、修改server.xml

    3、修改context.xml

    4、新增redisson配置文件

    5、下载并复制2个Jar包到Tomcat Lib目录中

    6、 安装redis

    7、配置nginx负载均衡

    8、配置测试页面

    9、session共享测试验证


    前言:

    上篇中,Tomcat session复制及session共享技术-CSDN博客

    这个方法是官方推荐的一个方法,但是也有一定局限性,下面是使用redisson实现session共享方法。

    1、环境

    tomcat部署方法在这篇博文中,本实验环境步骤基于Tomcat多实例配置-CSDN博客

    服务ip 系统
    nginx192.168.226.20rocky_linux9.4
    tomcat1192.168.226.20:8080rocky_linux9.4
    tomcat2192.168.226.20:8081rocky_linux9.4
    tomcat3192.168.226.20:8082 rocky_linux9.4

    确保防火墙、selinux关闭,时间同步。

    2、修改server.xml

     在server.xml中配置,所有tomcat实例都配置,注意修改实例的路径

    vim /data/application/tomcat1/conf/server.xml +40
    1. "bean/redisson"
    2. auth="Container"
    3. factory="org.redisson.JndiRedissonFactory"
    4. configPath="${catalina.base}/conf/redisson.yaml"
    5. closeMethod="shutdown"/>

    添加位置可看图:

    3、修改context.xml

    所有tomcat实例都配置,注意修改实例的路径

    vim /data/application/tomcat1/conf/context.xml
    1. "bean/redisson"
    2. global="bean/redisson"
    3. type="org.redisson.api.RedissonClient" />
    4. "org.redisson.tomcat.JndiRedissonSessionManager"
    5. readMode="REDIS"
    6. jndiName="bean/redisson" />

    位置如下图:

    4、新增redisson配置文件

    1. # 如果redis是单独安装的,将address地址修改为对应主机地址
    2. vim /data/application/tomcat1/conf/redisson.yaml
    3. singleServerConfig:
    4. idleConnectionTimeout: 10000
    5. connectTimeout: 10000
    6. timeout: 3000
    7. retryAttempts: 3
    8. retryInterval: 1500
    9. password: null
    10. subscriptionsPerConnection: 5
    11. clientName: null
    12. address: "redis://127.0.0.1:6379"
    13. subscriptionConnectionMinimumIdleSize: 1
    14. subscriptionConnectionPoolSize: 50
    15. connectionMinimumIdleSize: 24
    16. connectionPoolSize: 64
    17. database: 0
    18. dnsMonitoringInterval: 5000
    19. threads: 16
    20. nettyThreads: 32
    21. codec: ! {}
    22. transportMode: "NIO"
    1. #给两外两个tomcat实例拷贝过去
    2. cp /data/application/tomcat1/conf/redisson.yaml /data/application/tomcat2/conf/redisson.yaml
    3. cp /data/application/tomcat1/conf/redisson.yaml /data/application/tomcat3/conf/redisson.yaml

    5、下载并复制2个Jar包到Tomcat Lib目录中

    1. cd /root/
    2. wget https://repo1.maven.org/maven2/org/redisson/redisson-all/3.22.0/redisson-all-3.22.0.jar
    3. wget https://repo1.maven.org/maven2/org/redisson/redisson-tomcat-8/3.22.0/redisson-tomcat-8-3.22.0.jar

    拷贝到lib库中

    1. cp /root/redisson-all-3.22.0.jar /data/application/tomcat1/lib
    2. cp /root/redisson-all-3.22.0.jar /data/application/tomcat2/lib
    3. cp /root/redisson-all-3.22.0.jar /data/application/tomcat3/lib
    4. cp /root/redisson-tomcat-8-3.22.0.jar /data/application/tomcat1/lib
    5. cp /root/redisson-tomcat-8-3.22.0.jar /data/application/tomcat2/lib
    6. cp /root/redisson-tomcat-8-3.22.0.jar /data/application/tomcat3/lib

    6、 安装redis

    1. #下载redis
    2. cd && wget http://download.redis.io/releases/redis-5.0.10.tar.gz
    3. #解压
    4. tar xzf redis-5.0.10.tar.gz -C /data/application/
    5. cd /data/application/ && mv redis-5.0.10/ redis
    1. #下载编译工具
    2. cd redis/ && yum install -y gcc make
    3. #编译 注:如果报错请将刚才解压的安装包删除掉,再次重新解压并进行make安装即可。
    4. make
    1. cp redis.conf redis.conf.bak
    2. vim redis.conf
    1. #修改如下
    2. bind 0.0.0.0   #只监听内网IP,大约在69行
    3. daemonize yes       #开启后台模式将on改为yes,大约在136行
    4. timeout 300        #连接超时时间,大约在113行
    5. port 6379 #端口号,大约在96行
    6. dir /data/application/redis/data  #本地数据库存放持久化数据的目录该目录-----需要存在,大约在263行
    7. pidfile /var/run/redis_6379.pid   #定义pid文件,大约在158行
    8. logfile "/var/log/redis.log"   #定义log文件,大约在171行
    1. #创建存放数据的目录
    2. mkdir /data/application/redis/data

    1. #配置redis为systemctl启动
    2. cd /lib/systemd/system
    3. vim redis.service

     添加下述内容

    1. [Unit]
    2. Description=Redis
    3. After=network.target
    4. [Service]
    5. ExecStart=/data/application/redis/src/redis-server /data/application/redis/redis.conf --daemonize no
    6. ExecStop=/data/application/redis/src/redis-cli -h 127.0.0.1 -p 6379 shutdown
    7. [Install]
    8. WantedBy=multi-user.target
    1. #启动redis
    2. systemctl restart redis

    7、配置nginx负载均衡

    由于本实验是基于Tomcat多实例配置-CSDN博客

    因此,nginx负载均衡是已经配置好了得,这里再打开验证一下

    8、配置测试页面

    所有tomcat实例都配置,注意修改实例的路径

    vim /data/application/tomcat1/webapps/ROOT/session.jsp

     #加入下述内容

    1. Session_ID: <%= session.getId() %>
    2. Session_Port: <%= request.getServerPort() %>
    3. Session_URL: <%= request.getRequestURL() %>
    4. <% out.println("This tomcat server 192.168.226.20:8080");%>

    注意端口来区分不同实例 

    9、session共享测试验证

    http://192.168.226.20/session.jsp

     对比访问可以发现,即便后端服务器改变,session也不会再变化了。

    基于Redis的Session共享解决了以下几个主要问题:

    1. 横向扩展和负载均衡:在传统的Web应用中,为了处理大量请求和保证高可用性,通常会使用多台服务器来横向扩展应用。然而,会话(Session)状态通常保存在单个服务器的内存中,这就导致了当请求被负载均衡到不同服务器时,会话状态无法被共享,用户需要重新登录或者状态丢失。使用Redis作为会话存储后,不同服务器上的应用实例可以通过Redis共享同一份会话数据,从而实现了跨服务器的会话共享,保证了用户的无缝访问体验。

    2. 内存利用率提升:传统的会话管理方式是将会话状态存储在每个应用服务器的内存中。随着应用服务器数量的增加,会话状态的内存占用也会成倍增加,而且每个服务器的内存使用不均可能导致资源浪费。将会话状态存储在Redis等专门的内存数据库中,可以有效地减少每个应用服务器的内存压力,提高内存利用率。

    3. 会话持久化和可靠性:Redis支持将数据持久化到磁盘,可以配置成持久化到磁盘的数据库中,从而保证会话数据的可靠性。即使应用服务器重启或者故障,用户的会话状态也可以得到恢复,不会丢失,提升了应用的可靠性和容错性。

    4. 分布式应用的统一管理:对于分布式、微服务架构的应用来说,使用统一的会话存储可以简化管理和维护工作。开发人员无需在多个服务或多个服务器上分别管理会话状态,统一的存储和管理会话状态可以降低复杂度,提高开发和维护效率。

    综上所述,基于Redis的Session共享通过提供可靠的分布式存储解决方案,解决了传统会话管理中的单点故障、内存浪费和管理复杂度等问题,是构建高性能、可伸缩性和可靠性Web应用的重要手段之一。

  • 相关阅读:
    Java老人护理上门服务类型系统小程序APP源码
    Qt第六十六章:展示数据的标签
    【kubernetes】kubernetes中的调度
    洛谷P2939 [USACO09FEB]Revamping Trails G 题解
    HTML-09.表单项标签
    SSL证书品牌参差不齐?品牌太多不知道怎么选择?
    智慧城市-疫情流调系列2.1-Prompt-UIE信息抽取,解决抽取结果不准的问题
    持续部署:提高敏捷加速软件交付(内含教程)
    基于ssm的潮牌运动服饰数码商城管理系统(idea+spring+springmvc+mybatis+jsp)
    SpringCloud 微服务注册中心 Eureka - Client
  • 原文地址:https://blog.csdn.net/Lzcsfg/article/details/139964704