Tomcat Session ID---会话保持
简单拓补图

一、负载均衡、反向代理
7-1nginx代理服务器配置
[root@dlnginx ~]#yum install epel-release.noarch -y ###安装额外源[root@dlnginx ~]#yum install nginx -y[root@dlnginx ~]#systemctl start nginx.service[root@dlnginx ~]#systemctl status nginx.service



[root@dlnginx ~]#vim /etc/nginx/nginx.conf ###主配置文件upstream tomcat {server 192.168.10.101:8080;server 192.168.10.102:8080;}location ~* \.jsp$ {proxy_pass http://tomcat;}




7-2和7-3同时进行配置
[root@Tomcat1 ~]#cd /data/上传[root@Tomcat1 data]#ls
apache-tomcat-9.0.16.tar(1).gz jdk-8u291-linux-x64.tar(1).gz[root@Tomcat1 data]#tar xf jdk-8u291-linux-x64.tar\(1\).gz -C /usr/local/[root@Tomcat1 data]#ls /usr/local/
bin etc games include jdk1.8.0_291 lib lib64 libexec sbin share src[root@Tomcat1 data]#cd /usr/local/[root@Tomcat1 local]#ls
bin etc games include jdk1.8.0_291 lib lib64 libexec sbin share src[root@Tomcat1 local]#ln -s jdk1.8.0_291/ jdk[root@Tomcat1 local]#ls
bin etc games include jdk jdk1.8.0_291 lib lib64 libexec sbin share src[root@Tomcat1 local]#vim /etc/profile.d/env.shexport JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/[root@Tomcat1 local]#. /etc/profile.d/env.sh [root@Tomcat1 local]#java -version


[root@Tomcat1 data]#tar xf apache-tomcat-9.0.16.tar\(1\).gz -C /usr/local/
[root@Tomcat1 data]#cd /usr/local/
[root@Tomcat1 local]#ls
apache-tomcat-9.0.16 bin etc games include jdk jdk1.8.0_291 lib lib64 libexec sbin share src
[root@Tomcat1 local]#ln -s apache-tomcat-9.0.16/ tomcat
[root@Tomcat1 local]#ls
apache-tomcat-9.0.16 bin etc games include jdk jdk1.8.0_291 lib lib64 libexec sbin share src tomcat
[root@Tomcat1 local]#useradd -s /sbin/nologin tomcat
[root@Tomcat1 local]#chown tomcat:tomcat tomcat/ -R
[root@Tomcat2 local]#cat > /usr/lib/systemd/system/tomcat.service <<EOF
> [Unit]
> Description=Tomcat
> After=syslog.target network.target
>
> [Service]
> Type=forking
> ExecStart=/usr/local/tomcat/bin/startup.sh
> ExecStop=/usr/local/tomcat/bin/shutdown.sh
> RestartSec=3
> PrivateTmp=true
> User=tomcat
> Group=tomcat
>
> [Install]
> WantedBy=multi-user.target
>
> EOF[root@Tomcat2 local]#systemctl daemon-reload
[root@Tomcat2 local]#systemctl start tomcat.service
[root@Tomcat2 local]#ss -ntap |grep 8080
LISTEN 0 100 :::8080 :::* users:(("java",pid=2767,fd=54))
[root@Tomcat2 local]#systemctl status tomcat.service




进入主页面进行配置

检测:


去访问代理服务器会发现,每次调度到192.168.246.8和192.168.246.9上面,sessionID都会改变,我们要让他保持会话连接(sessionID不会变)

客户端访问代理服务器,第一次访问被调度到tomcat1服务器,由于是第一次访问,客户的cookie缓存中不会有sessionid,服务器会生成sessionid 1给 c1客户,c1客户会把sessionid 记录下来客户端第二次访问代理服务器,由于调度器的原因,不能保证一直去访问tomcat1,如果被调度到tomcat2, tomcat2服务器是没有sessionid 1, 它会认为我要生成新的sessionid 给c1客户,c1客户会更新自己的sessionid变成sessionid21.当客户端去访问代理服务器;代理服务器调度给Tomcat1;如果是第一次访问:客户端cookie里面没有sessionID,Tomcat1服务器就给给客户端生成一个sessionID并且发给客户端;客户端会将sessionID存在cookie中;当客户端第二次去访问Tomcat1时,会带着Tomcat1的sessionID,第二次,Tomcat1就不会给客户端生成新的sessionID2.由于代理服务器调度的原因;不会每次都调度给Tomcat1;当调度给Tomcat2时;cookie带的是sessionID1;Tomcat2上要用sessionID2,他就会生成一个新的ID给客户端3.所以,来回调度的时候,每次都是新的sessionID
二、会话保持
方法一:



检验: 访问代理服务器

session id固定了,但是服务器也固定了不调度了
方法二:
Apache Tomcat 9 (9.0.87) - Clustering/Session Replication How-To
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"channelSendOptions="8"><Manager className="org.apache.catalina.ha.session.DeltaManager"expireSessionsOnShutdown="false"notifyListenersOnReplication="true"/><Channel className="org.apache.catalina.tribes.group.GroupChannel"><Membership className="org.apache.catalina.tribes.membership.McastService"address="228.0.0.4"port="45564"frequency="500"dropTime="3000"/><Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"address="auto"port="4000"autoBind="100"selectorTimeout="5000"maxThreads="6"/><Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"><Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/></Sender><Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/><Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/></Channel><Valve className="org.apache.catalina.ha.tcp.ReplicationValve"filter=""/><Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/><Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"tempDir="/tmp/war-temp/"deployDir="/tmp/war-deploy/"watchDir="/tmp/war-listen/"watchEnabled="false"/><ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/></Cluster>

把官网中的这个页面内容加入到主配置文件中,把前面写入nginx的ip_hash给删除了,不影响方法二
tomcat2进行配置


在子配置文件中加入下面的阴影部分



7-3 Tomcat2进行配置
和tomcat1是一样的配置方法



检测:访问代理服务器192.168.246.7/index.jsp


不管调度7-2还是7-3,sessionID都保持一致,都不变化了。
相关文章:
Tomcat Session ID---会话保持
简单拓补图 一、负载均衡、反向代理 7-1nginx代理服务器配置 [rootdlnginx ~]#yum install epel-release.noarch -y ###安装额外源[rootdlnginx ~]#yum install nginx -y[rootdlnginx ~]#systemctl start nginx.service[rootdlnginx ~]#systemctl status nginx.service [ro…...
Session会话绑定
1.需求原因 用户的请求,登录的请求,经过负载均衡后落到后面的web服务器上,登录的状态/信息也会记录在web服务器上,就会导致不通的web服务器上,登录状态不统一,造成用户频繁需要登录 2.目标:如何实现会话保持/会话共享 方案一:登录状态写入cookie中.(wor…...
win7、win10、win11 系统能安装的.net framework 版本以
win7、win10、win11 系统能安装的.net framework 版本分别是多少?以及能安装的最高版本是多少? 以下是各Windows系统能够安装和支持的.NET Framework版本及其最高可安装版本的概述: Windows 7: 自带 .NET Framework 3.5.1&#x…...
RediSearch比Es搜索还快的搜索引擎
1、介绍 RediSearch是一个Redis模块,为Redis提供查询、二次索引和全文搜索。要使用RediSearch,首先要在Redis数据上声明索引。然后可以使用重新搜索查询语言来查询该数据。RedSearch使用压缩的反向索引进行快速索引,占用内存少。RedSearch索…...
mybatis-plus 的saveBatch性能分析
Mybatis-Plus 的批量保存saveBatch 性能分析 目录 Mybatis-Plus 的批量保存saveBatch 性能分析背景批量保存的使用方案循环插入使用PreparedStatement 预编译优点:缺点: Mybatis-Plus 的saveBatchMybatis-Plus实现真正的批量插入自定义sql注入器定义通用…...
python异常:pythonIOError异常python打开文件异常
1.python读取不存在的文件时,抛出异常 通过 open()方法以读“r”的方式打开一个 abc.txt 的文件(该文件不存在),执行 open()打开一个不存在的文件时会抛 IOError 异常,通过 Python 所提供的 try...except...语句来接收…...
电话机器人语音识别用哪家更好精准度更高。
语音识别系统的选择取决于你的具体需求,包括但不限于识别精度、速度、易用性、价格等因素。以下是一些在语音识别领域表现较好的公司和产品: 科大讯飞:科大讯飞是中国最大的语音识别技术提供商之一,其语音识别技术被广泛应用于各…...
【Unity动画】Unity如何导入序列帧动画(GIF)
Unity 不支持GIF动画的直接播放,我们需要使用序列帧的方式 01准备好序列帧 02全部拖到Unity 仓库文件夹中 03全选修改成精灵模式Sprite 2D ,根据需要修改尺寸,点击Apply 04 创建一个空物体 拖动序列上去 然后全选所有序列帧,拖到这个空物体…...
uniapp APP 上传文件
/*** 上传文件*/uploadPhoneFile:function(callback,params {}) {let fileType [.pdf,.doc,.xlsx,.docx,.xls]// #ifdef APP-PLUSplus.io.chooseFile({title: 选择文件, filetypes: [doc, docx], // 允许的文件类型 multiple: false, // 是否允许多选 },(e)>{const tem…...
arcgis数据导出到excel
将arcgis属性数据导出到excel: 1) 工具箱\系统工具箱\Conversion Tools.tbx\Excel\Excel 转表 2)用excel打开导出的图层文件中后缀为.dbf的数据(方便快捷,但是中文易乱码)...
吴恩达深度学习环境本地化构建wsl+docker+tensorflow+cuda
Tensorflow2 on wsl using cuda 动机环境选择安装步骤1. WSL安装2. docker安装2.1 配置Docker Desktop2.2 WSL上的docker使用2.3 Docker Destop的登陆2.4 测试一下 3. 在WSL上安装CUDA3.1 Software list needed3.2 [CUDA Support for WSL 2](https://docs.nvidia.com/cuda/wsl-…...
R语言:microeco:一个用于微生物群落生态学数据挖掘的R包:第七:trans_network class
# 网络是研究微生物生态共现模式的常用方法。在这一部分中,我们描述了trans_network类的所有核心内容。 # 网络构建方法可分为基于关联的和非基于关联的两种。有几种方法可以用来计算相关性和显著性。 #我们首先介绍了基于关联的网络。trans_network中的cal_cor参数…...
ubuntu下在vscode中配置matplotlibcpp
ubuntu下在vscode中配置matplotlibcpp 系统:ubuntu IDE:vscode 库:matplotlib-cpp matplotlibcpp.h文件可以此网址下载:https://github.com/lava/matplotlib-cpp 下载的压缩包中有该头文件,以及若干实例程序。 参考…...
Vue面试题,背就完事了
1.vue的生命周期有哪些及每个生命周期做了什么? Vue.js 的生命周期可以分为以下几个核心阶段,每个阶段都伴随着特定的钩子函数(生命周期钩子)来执行相应的操作: 创建阶段: beforeCreate:实例被创建后、数…...
centos创建并运行一个redis容器 并支持数据持久化
步骤 : 创建redis容器命令 docker run --name mr -p 6379:6379 -d redis redis-server --appendonly yes 进入容器 : docker exec -it mr bash 链接redis : redis-cli 查看数据 : keys * 存入一个数据 : set num 666 获取数据 : get num 退出客户端 : exit 再退…...
nvm安装和使用保姆级教程(详细)
一、 nvm是什么 : nvm全英文也叫node.js version management,是一个nodejs的版本管理工具。nvm和npm都是node.js版本管理工具,为了解决node.js各种版本存在不兼容现象可以通过它可以安装和切换不同版本的node.js。 二、卸载之前安装的node: …...
跳绳计数,YOLOV8POSE
跳绳计数,YOLOV8POSE 通过计算腰部跟最初位置的上下波动,计算跳绳的次数...
阿里云ecs服务器配置反向代理上传图片
本文所有软件地址: 链接:https://pan.baidu.com/s/12OSFilS-HNsHeXTOM47iaA 提取码:dqph 为什么要使用阿里云服务器? 项目想让别人通过外网进行访问就需要部署到我们的服务器当中 1.国内知名的服务器介绍 国内比较知名的一些…...
免费阅读篇 | 芒果YOLOv8改进110:注意力机制GAM:用于保留信息以增强渠道空间互动
💡🚀🚀🚀本博客 改进源代码改进 适用于 YOLOv8 按步骤操作运行改进后的代码即可 该专栏完整目录链接: 芒果YOLOv8深度改进教程 该篇博客为免费阅读内容,直接改进即可🚀🚀…...
GetLastError()返回值及含义
https://www.cnblogs.com/ericsun/archive/2012/08/10/2631808.html 〖0〗-操作成功完成。 〖1〗-功能错误。 〖2〗-系统找不到指定的文件。 〖3〗-系统找不到指定的路径。 〖4〗-系统无法打开文件。 〖5〗-拒绝访问。 〖6〗-句柄无效。 〖7〗-存储控制块被损坏。 〖8〗-存储空…...
微信H5页面如何通过wx-open-launch-weapp标签跳转小程序?完整配置指南
微信H5跳转小程序全链路实战:从零配置wx-open-launch-weapp标签 在移动互联网生态中,微信H5与小程序的无缝跳转已成为提升用户体验的关键技术节点。许多开发者首次接触wx-open-launch-weapp标签时,往往会在业务域名验证、HTTPS部署等环节遭遇…...
Java Eclipse JDK 1.8.0_25安装与配置全指南
1. JDK 1.8.0_25的下载与安装 如果你是刚接触Java开发的新手,可能会被各种版本的JDK搞得一头雾水。别担心,JDK 1.8.0_25(也就是Java 8的一个子版本)至今仍是企业开发中最常用的稳定版本之一。我当年刚开始学Java时,导师…...
PDF-Parser-1.0一键部署教程:5分钟搞定文档解析神器,小白也能轻松上手
PDF-Parser-1.0一键部署教程:5分钟搞定文档解析神器,小白也能轻松上手 1. 为什么你需要这个文档解析工具? 你是不是经常遇到这样的烦恼? 下载了一份重要的PDF报告,想把里面的表格数据整理到Excel里,结果…...
从‘能工作’到‘优秀’:手把手教你为你的Buck/Boost电路挑选和优化MOSFET驱动
从‘能工作’到‘优秀’:手把手教你为Buck/Boost电路挑选和优化MOSFET驱动 在开关电源设计中,MOSFET的选择和驱动优化往往是决定整体效率的关键因素。许多工程师能够设计出"能工作"的电路,但要达到"优秀"的性能指标&…...
手把手教学:用LongCat动物百变秀快速生成动物拟人化表情包和头像
手把手教学:用LongCat动物百变秀快速生成动物拟人化表情包和头像 1. 为什么选择LongCat动物百变秀 在当今社交媒体时代,个性化的动物表情包和头像已经成为网络交流的重要组成部分。LongCat动物百变秀是一款基于美团开源模型的本地化AI图像编辑工具&…...
Wan2.2-I2V-A14B与数据库联动:自动化生成电商商品动态详情页视频
Wan2.2-I2V-A14B与数据库联动:自动化生成电商商品动态详情页视频 1. 电商视频制作的痛点与机遇 电商平台每天都有大量新品上架,传统的商品详情页视频制作方式面临巨大挑战。一个中型电商平台每月可能新增上千款商品,如果每款商品都需要人工…...
ESP32无线心情记录仪设计与物联网应用
1. 基于ESP32的无线心情记录仪设计与实现1.1 项目背景与功能概述现代工程师工作压力大,情绪波动频繁,需要有效的情绪管理工具。本项目设计了一款基于无线射频技术的情绪记录装置,通过物理按键触发和云端数据记录的方式,帮助用户量…...
gcoord与proj4js对比分析:选择最适合你的地理坐标库
gcoord与proj4js对比分析:选择最适合你的地理坐标库 【免费下载链接】gcoord 地理坐标系转换工具 项目地址: https://gitcode.com/gh_mirrors/gc/gcoord 在Web地图开发中,地理坐标系转换是一个常见需求。gcoord和proj4js都是优秀的JavaScript坐标…...
别再死磕ECharts了!试试这个Vue关系图谱插件relation-graph,上手快效果好
从ECharts到relation-graph:Vue关系图谱开发的效率革命 如果你正在使用Vue开发需要展示复杂关系网络的应用,可能已经尝试过ECharts的关系图功能。但当你需要更专业的交互体验、更直观的数据表达时,relation-graph这个专为Vue设计的关系图谱插…...
从“三次握手”到文件落地:用Wireshark抓包带你彻底搞懂C++ Socket文件传输全过程
从“三次握手”到文件落地:用Wireshark抓包带你彻底搞懂C Socket文件传输全过程 当你在浏览器下载文件时,是否好奇过数据是如何跨越网络准确无误地到达你的电脑?本文将带你用C实现一个完整的TCP文件传输程序,并通过Wireshark抓包工…...
