当前位置: 首页 > news >正文

基于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
    <Resource name="bean/redisson"auth="Container"factory="org.redisson.JndiRedissonFactory"configPath="${catalina.base}/conf/redisson.yaml"closeMethod="shutdown"/>

添加位置可看图:

3、修改context.xml

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

vim /data/application/tomcat1/conf/context.xml
    <ResourceLink name="bean/redisson"global="bean/redisson"type="org.redisson.api.RedissonClient" /><Manager className="org.redisson.tomcat.JndiRedissonSessionManager"readMode="REDIS"jndiName="bean/redisson" />

位置如下图:

4、新增redisson配置文件

# 如果redis是单独安装的,将address地址修改为对应主机地址
vim /data/application/tomcat1/conf/redisson.yamlsingleServerConfig:idleConnectionTimeout: 10000connectTimeout: 10000timeout: 3000retryAttempts: 3retryInterval: 1500password: nullsubscriptionsPerConnection: 5clientName: nulladdress: "redis://127.0.0.1:6379"subscriptionConnectionMinimumIdleSize: 1subscriptionConnectionPoolSize: 50connectionMinimumIdleSize: 24connectionPoolSize: 64database: 0dnsMonitoringInterval: 5000
threads: 16
nettyThreads: 32
codec: !<org.redisson.codec.MarshallingCodec> {}
transportMode: "NIO"
#给两外两个tomcat实例拷贝过去
cp /data/application/tomcat1/conf/redisson.yaml /data/application/tomcat2/conf/redisson.yamlcp /data/application/tomcat1/conf/redisson.yaml /data/application/tomcat3/conf/redisson.yaml

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

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

拷贝到lib库中

cp /root/redisson-all-3.22.0.jar /data/application/tomcat1/lib
cp /root/redisson-all-3.22.0.jar /data/application/tomcat2/lib
cp /root/redisson-all-3.22.0.jar /data/application/tomcat3/libcp /root/redisson-tomcat-8-3.22.0.jar /data/application/tomcat1/lib
cp /root/redisson-tomcat-8-3.22.0.jar /data/application/tomcat2/lib
cp /root/redisson-tomcat-8-3.22.0.jar /data/application/tomcat3/lib

6、 安装redis

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

#配置redis为systemctl启动
cd /lib/systemd/systemvim redis.service

 添加下述内容

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

7、配置nginx负载均衡

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

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

8、配置测试页面

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

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

 #加入下述内容

Session_ID: <%= session.getId() %><BR>
Session_Port: <%= request.getServerPort() %><BR>
Session_URL: <%= request.getRequestURL() %><BR>
<% 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应用的重要手段之一。

http://www.lryc.cn/news/384064.html

相关文章:

  • postgres数据库的流复制
  • Dxf库中的DL_Extrusion类
  • “ONLYOFFICE 8.1版本评测:功能更强大,用户体验更佳”
  • 搜维尔科技:【研究】触觉手套比控制器更能带来身临其境、更安全、更高效的虚拟体验
  • 【小学期】实体类设计——以学生管理系统为例
  • Java测试类
  • python 中面向对象编程:深入理解封装、继承和多态
  • OpenCV练习(2)图像校正
  • Excel中的“点选输入”——次级下拉列表创建
  • 基于 Spring AOP 实现安全检查
  • 【MySQL】数据库事务详解
  • ubuntu链接mysql
  • QStyledItemDelegate 和 QItemDelegate 的作用
  • 3.任务的创建与删除
  • 进程、CPU、MMU与PCB之间的关系
  • 代码随想录算法训练营Day50|1143.最长公共子序列、1035.不相交的线、53.最大子序和、392.判断子序列
  • 国家自然科学基金标书大全(2002-2024)
  • Python代码打包成exe应用
  • CesiumJS【Basic】- #016 多边形面渲染“花了”的问题
  • qt 开发对信号槽进行二次封装,实现信号槽管理接口。
  • 本地项目上传到gitee
  • ONLYOFFICE 8.1版本桌面编辑器测评:超越想象的办公体验!
  • 中介子方程三十四
  • 最新Sublime Text软件安装包分享(汉化版本)
  • AI-智能体基础设施
  • 【docker】docker启动neo4j,并配置内存
  • 面试准备记录
  • 文件管理—linux(基础IO)
  • 【华为OD机试|01】最远足迹(Java/C/Py/JS)
  • conda安装管理配置