用Redis存储Tomcat集群的Session

Tomcat集群Session共享:Redis集中存储方案全解析 在分布式架构中,Session管理是保障用户体验一致性的核心技术之一。当应用从单机扩展到多节点集群时,由于负载均衡会将请求分发到不同服务器,而Session默认存储在服务器本地内存,导致用户登录状态频繁丢失、购物车数据错乱等问题。本文将深入讲解Session与Cookie的配合原理,分析为何IP_HASH无法根治Session不一致,并介绍一种基于Redis的集中式Session存储方案——tomcat-redis-session-manager。该方案通过替换Tomcat的Manager组件,将Sessi 阅读详情

本人花了不少时间来寻求一种方法,把新开发的代码推送到到生产系统中部署,生产系统要能够零宕机、对使用用户零影响。

我的设想是使用集群来搞定,通过通知负载均衡Nginx,取下集群中的Tomcat节点,然后对Tomcat上的应用进行升级,再通知负载均衡Nginx,把Tomcat节点重新加载上去。依次这么做,把集群中的所有Tomcat都替换一次即可。

那么问题来了,在取下Tomcat节点和加载新Tomcat节点时如何做到对用户无影响呢?方法很简单,共享Session。

下面,我们用实例来说明此方案。我们的例子使用了一台Nginx做负载均衡,后端挂接了两台Tomcat,且每台Tomcat的Session 会话都保存到Redis数据库中。其中,Nginx配置为non-sticky运行模式,也即每一个请求都可以被分配到集群中的任何节点。当要上线新代码 时,只需简单地取下Tomcat实例,此时所有的访问用户会被路由到活动的Tomcat实例中去,而且由于会话数据都是保存在Redis数据库中,所以活 跃用户并不会受影响。当Tomcat更新完毕,又可以把此节点加入到Nginx中。

安装Nginx

# sudo rpm -ivh nginx-1.4.2-1.el6.ngx.x86_64.rpm

修改配置文件/etc/nginx/nginx.conf,并添加下面的内容:

http {

upstream tomcat  {

server localhost:8080;

server localhost:8081;

}

include      /etc/nginx/mime.types;

default_type  application/octet-stream;

修改配置文件/etc/nginx/conf.d/default.conf并替换location部分的内容:

location / {

proxy_pass  http://tomcat;

}

重启Nginx

# sudo service nginx restart

接下来,安装两个Tomcat实例。由于我们是在同一台服务器上做的演示,要让两台Tomcat不发生冲突,需要修改第二个Tomcat实例的 端口号。由于Nginx配置为non-sticky运行模式,对每个请求采用的是Round-robin负载均衡方式,这意味着它会为每个请求都抽奖一个 新会话。

接着,下载并安装Redis。步骤省略,很简单。

最后,我们需要配置Tomcat,让Tomcat把会话Session保存到Redis数据库。

我们要使用tomcat-redis-session-manager这样的第三方库,主页见:

https://github.com/jcoleman/tomcat-redis-session-manager

要注意此库并非开箱即用的,使用时需要做一些调整。你需要下载源码,并在更新了依赖库的版本后,重建项目。比如我使用了commons- pool2-2.2.jar和jedis-2.6.1.jar依赖库。要记住把这些jar文件复制到每一个Tomcat实例的lib子目录下。

在更新了commons-pool、jedis和tomcat版本这些库后,你可以使用build.gradle来构建整个项目。构建完毕后, 复制新生成的tomcat-redis-session-manager-1.2.jar到每一个Tomcat实例的lib子目录下。并在修改每一个 Tomcat实例的context.xml配置文件:

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />

<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"

host="localhost"

port="6379"

database="0"

maxInactiveInterval="60" />

重启Tomcat实例。可以检查到Redis确实保存了Tomcat的会话。然后我们对Tomcat实例取下或恢复时,访问用户确实没受影响。

Blender软件导出地形到Gazebo中 Blender软件导出地形到Gazebo中,并配置纹理、刚度、高度。 阅读详情

相关推荐

NFT图片批量合成及稀有度计算工具

一、制作背景 -当前NFT作品制作的大多方式都是使用部件拼接的形式,然后从大量的可能性结果取优; 二、解决问题 拼接合成的组合数量十分巨大,手工合成费时费力; 合成中对各个部件的使用次数不容易控制,部位出现的概率对作品的稀有度及评分影响较大; 对于生成的作品各个部位的信息(包括来源和使用率)统计繁琐,不利于对作品的介绍中体现; 三、程序功能介绍 1、功能自定义部位稀有度批量合成NFT作品 步骤一:创建各个合成部件文件夹,将图片放到文件夹内 步骤二:软件上设置各个部件对于的图片文件夹及出现的概率 步骤二

Keeping111的博客 4638

使用Redis存储Nginx+Tomcat负载均衡集群的Session

环境:Cent OS 7.0(虚拟机环境)、Nginx 1.9.8、Redis 3.2.1 一、背景 在使用Nginx+Tomcat实现负载均衡的时候,由于Nginx对不同的请求分发到某一个Tomcat,Tomcat在运行的时候分别是不同的容器里,因为会出现session不同步或者丢失的问题。 二、Nginx安装与配置 1、Nginx安装网上的资源对于安装Nginx的介绍比较多,例如简单的为: (1) 获取nginx,在http://nginx.org/download/上可以获取当前新的版本下载,例如:w

xiaoxijinger的博客 295

Ultralytics YOLO模块自定义与替换实战技巧

本文详细介绍了在Ultralytics YOLO框架中进行模块自定义与替换的实战技巧。通过从零开始添加全新模块(如注意力模块)到进阶替换现有模块(如增强版卷积),并涵盖模块注册、YAML配置、模型融合及ONNX导出等关键步骤,帮助开发者深度定制YOLO模型,以应对复杂检测任务与部署需求。

numpy6sculptor的博客 930

SpirngBoot2.13+Tomcat集群+redis5.0存储session

前言:本文章为慕课网上Java企业级电商项目架构演进之路Tomcat集群与Redis分布式的学习笔记. 目录 第一章 思路与配置概要 1.1 思路概要 1.2 配置概要 第二章 springboot连接操作redis数据库 2.1 引入redis的包 2.2 对redis进行配置 2.3 获得redis连接池 2.4 操作redis数据库 第三章 应用配置与nginx服务器与r...

仰望星空 364

UDP协议详解——使用Socket通信

UDP(UserDatagramProtocol)是一个简单的面向消息的传输层协议,尽管UDP提供标头和有效负载的完整性验证(通过校验和),但它不保证向上层协议提供消息传递,并且UDP层在发送后不会保留UDP 消息的状态。因此,UDP有时被称为不可靠的数据报协议。如果需要传输可靠性,则必须在用户应用程序中实现。UDP使用具有最小协议机制的简单无连接通信模型。UDP提供数据完整性的校验和,以及用于在数据报的源和目标寻址不同函数的端口号。它没有握手对话,因此将用户的程序暴露在底层网络的任何不可靠的方面。

qq_3517289697的博客 3385

Kalibr标定避坑指南:如何用AprilGrid板快速完成双目IMU标定

本文详细介绍了使用AprilGrid板进行Kalibr双目IMU联合标定的实战技巧,包括标定工具选型、数据采集优化、标定流程及结果验证。通过AprilGrid板的唯一标识性和抗遮挡优势,结合IMU静止标定和运动激励设计,显著提升标定精度。文章还提供了常见报错处理和高级优化技巧,帮助开发者高效完成传感器标定。

sunny的博客 282

Redis存储Tomcat7集群的Session

  Redis存储Tomcat7集群的Session   首先请先安装redis,请参考文章 http://stephen830.iteye.com/blog/2289017   然后,将下面的4个jar文件放到tomcat的lib目录下(我上传了一份在下面的附件中) commons-pool2-2.2.jar jedis-2.5.2.jar tomcat-juli.jar ...

stephen830 168

深入解析YT8521S千兆以太网PHY芯片的设计与调试要点

本文深入解析了YT8521S千兆以太网PHY芯片的设计与调试要点。重点剖析了硬件设计中的电源方案、RGMII接口电平配置(尤其是1.8V电平方案)以及PCB布局布线等关键细节,并提供了从硬件检查、驱动配置到性能测试的完整调试流程,帮助工程师规避常见陷阱,实现稳定可靠的千兆网络连接。

weixin_29190573的博客 688

蓝易云 - 使用Redis存储Nginx+Tomcat负载均衡集群的Session的详细配置

这些配置使用了Tomcat的Redis Session Manager和Redis Session Handler Valve来实现将Session存储到Redis中。通过以上配置,你可以将Nginx和Tomcat集群中的Session存储到Redis中,实现负载均衡和高可用性。希望这些信息对你有帮助!这里的Tomcat服务器IP和端口号是集群中各个Tomcat实例的地址和端口号。这些配置将请求代理转发到Tomcat集群中的服务器,并保持客户端的真实IP地址。

高性价比服务器就选:蓝易云 502

Qemu开发ARM篇-3、qemu运行uboot演示

在上一篇文章中,我们搭建了交叉编译工具链,并成功进行了uboot的交叉编译,在该篇中,我们将演示如何利用qemu运行上一篇中交叉编译的uboot程序。

sinat_33909696的博客 1212

从零开始:C#上位机集成YOLO完成摄像头目标追踪(保姆级教程)

新手入门C#上位机+YOLO做摄像头目标追踪,最忌讳的是“只抄代码,不懂逻辑”。这个教程不仅给了完整代码,还把核心原理和踩坑点都讲清楚了,新手跟着走,不仅能跑通demo,还能理解为什么这么写。如果你们在运行时遇到具体问题,比如模型导出失败、代码报错,都可以在评论区留言,我会一一解答。后续也可以出一期工业相机+YOLO目标追踪的教程,帮助大家把demo落地到实际生产中。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1030

Redis存储Tomcat集群的Session

如何   做到把新开发的代码推送到到生产系统中部署,生产系统要能够零宕机、对使用用户零影响。 设想   是使用集群来搞定,通过通知负载均衡Nginx,取下集群中的Tomcat节点,然后对Tomcat上的应用进行升级,再通知负载均衡Nginx,把Tomcat节点重新加载上去。依次这么做,把集群中的所有Tomcat都替换一次即可。 那么问题来了   在取下Tomcat节点和加载新Tomcat

lopisinhii的博客 236

Simulink仿真模块 - Signal Conversion

目录 说明 实例 创建总线信号的连续副本 ​将虚拟总线转换为非虚拟总线​ 将非虚拟总线转换为虚拟总线 将Muxed信号转换为矢量 模块特性 Signal Conversion:将信号转换为新类型,而不改变信号值 在仿真库中的位置为: Simulink / Signal Attributes HDL Coder / Signal Attributes 模型为: 说明 Signal Conversion模块可将信号从一种类型转换为另一种类型。要选择要...

jk_101的博客 3421
上一篇: Tomcat性能优化
下一篇: Tomcat在eclipse下无法访问或丢包
da2015
博客等级 码龄12年 4粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值