Tomcat通过自带的Cluster方式实现Session会话共享

article/2025/9/14 19:10:11

一般来说,在多个tomcat集群业务中,session会话共享是必须的需求,不然前端nginx转发过来的请求不知道之前请求在哪台tomcat节点上,从而就找不到session以至于最终导致请求失败。要实现tomcat session共享有多种方案,今天介绍下使用tomcat自带的cluster方式,在多个tomcat节点间自动实时复制session信息,配置起来很简单。tomcat自带的这种session共享方案,对于规模较小的tomcat集群来说够用了,但这个方案的效率比较低,在大并发下表现并不好。所以大规模的tomcat集群还是建议使用memcache或者redis来实现session共享。

1)基础环境

ip 主机名 应用  端口
192.168.10.200Nginx-nodenginx1.12.280
192.168.10.201Tomcat-node1java8.131、tomcat8.0.538080
192.168.10.202Tomcat-node2java8.131、tomcat8.0.538080

安装省略。。。

[root@Tomcat-node1 conf]# vim server.xml

.......

<Engine name="Catalina" defaultHost="localhost">

找到上面这一行,在此行的下面直接复制以下内容,不用修改,直接复制就可以

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"channelSendOptions="6"><Manager className="org.apache.catalina.ha.session.BackupManager"expireSessionsOnShutdown="false"notifyListenersOnReplication="true"mapSendOptions="6"/><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="192.168.10.201"port="5000"selectorTimeout="100"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.MessageDispatch15Interceptor"/><Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/></Channel><Valve className="org.apache.catalina.ha.tcp.ReplicationValve"filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/><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>

记得多个tomcat都需要配置,同一个集群里面配置信息保持一直就可以了。如果是其他集群,修改一下address就好了。

另一个tomcat节点直接拷贝这个server.xml文件,然后将address修改为192.168.10.202就可以了

 然后还有一个重要配置不要忘记了!否则session将不能实现共享!!

在tomcat项目的WEB-INF/web.xml文件中添加<distributable/>.

直接在底部</web-app>的前面添加既可以

  <distributable/>

修改:/usr/local/tomcat8/webapps/ROOT/index.jsp

<html>
<head>
<title> session test</title>
</head>
<body>
SessionID is <%=session.getId()%>
<BR>
SessionIP is <%=request.getServerName()%>
<BR>
SessionPort is <%=request.getServerPort()%>
<%
out.println("Response from tomcat-node1");
%>
%</body>
%</html>

若nginx配置如下:

  upstream tomcat-lb {server 192.168.10.201:8080;server 192.168.10.202:8080;}server {listen  80;server_name www.kevin.com;location / {proxy_pass http://tomcat-lb;proxy_set_header  X-Real-IP $remote_addr;proxy_set_header  REMOTE-HOST $remote_addr;proxy_set_header  Host $host;proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;}location ~ .*\.(gif|jpg|png|htm|html|css|ico|flv|swf)(.*) {proxy_pass http://tomcat-lb;proxy_redirect off;proxy_set_header Host $host;proxy_cache cache_one;proxy_cache_valid 200 302 1h;proxy_cache_valid 301 1d;proxy_cache_valid any 10m;expires 30d;proxy_cache_key $host$uri$is_args$args;}
}

访问http://www.kevin.com,不断刷新页面,发现页面信息会改变,但是SessionID一直保持不变!! 
关闭192.168.10.201或192.168.10.202两个中的任意一个tomcat服务,访问页面,不断刷新,SessionID都会一直保持不变!! 


http://chatgpt.dhexx.cn/article/uJwLa8Ep.shtml

相关文章

redhat 7.9 部署war包(二)之 环境安装 jdk,tomcat等

tomcat服务器环境搭建 redhat 7.9系统中搭建tomcat8.5.88服务器端在redhat中安装tomcat8一.传输文件到虚拟机中二.设置系统环境变量 JAVA_HOME三.启动tomcat8 部署war包 redhat 7.9系统中搭建tomcat8.5.88服务器端 本篇文章介绍&#xff0c;如何在redhat7.9环境下安装java web…

tomcat看源码

一.环境搭建 1.官网下载tomcat9 2.idea打开 新建pom文件 <!-- pom.xml --> <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-inst…

centos 6.2 mysql和tomcat的配置_基于CentOS 6.8平台的Tomcat+MySQL+JDK环境搭建

部署环境 Server&#xff1a;CentOS 6.8 x86_64 Tomcat&#xff1a;9.0.0.M9 MySQL&#xff1a;5.7.14 JDK&#xff1a;8u102 部署准备 使用浏览器访问Apache Tomcat官网 http://tomcat.apache.org/ 下载目前最新9版本 9.0.0.M9版本tar.gz安装包 下载Apache Commons Daemon&…

Windows下配置Tomcat集群

为什么要用Tomcat集群 可以提高整体web服务器性能&#xff0c;将动态页面交给tomcat处理&#xff0c;将静态文件交给apache处理&#xff0c;可以大大提高服务器的静态文件处理性能。 可以实现web服务器的负载均衡&#xff0c;服务器可采用集群的方式来响应客户端请求。Apache的…

tomcat连接mysql及JDBC详解

一、Tomcat简介 1、Tomcat简介 Tomcat 是 Apache 软件基金会&#xff08;Apache Software Foundation&#xff09;的 Jakarta 项目中的一个核心项目&#xff0c;由 Apache、Sun 和其他一些公司及个人共同开发而成。由于有了 Sun 的参与和支持&#xff0c;最新的 Servlet 和JS…

tomcat配置url跳转_web和tomcat的区别

在Web2.0的浪潮中&#xff0c;各种页面技术和框架不断涌现&#xff0c;为服务器端的基础架构提出了更高的稳定性和可扩展性的要求。近年来&#xff0c;作为开源中间件的全球领导者&#xff0c;JBoss在J2EE应用服务器领域已成为发展最为迅速的应用服务器。在市场占有率和服务满意…

Windows下安装配置Tomcat

Windows下安装配置Tomcat 下载 到官网下载目标Tomcat版本&#xff1a;https://tomcat.apache.org/ 下载完成后&#xff0c;进入目标目录下 解压到安装目录 配置 配置环境变量&#xff1a; 变量名为&#xff1a;CATALINA_HOME 变量值为&#xff1a;D:\software\tapache-t…

Linux系统安装配置tomcat详细教程

准备工作 在Xshell控制台依次安装&#xff1a; Linux服务器和window互传文件工具 yum install lrzsz解压命令 yum install unzip安装jdk1.8 yum install -y java-1.8.0-openjdk-devel.x86_64安装 下载tomcat的压缩文件&#xff0c;我以apache-tomcat-8.5.87.zip为例。 将…

Tomcat 环境搭建和管理

Tomcat 概念 Tomcat 是 Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目&#xff0c;由 Apache、Sun 和其他一些公司及个人共同开发而成&#xff0c;由于有了 Sun的参与和支持&#xff0c;最新的 Servlet 和 JSP规范总是能在Tomcat 中得到体现&a…

如何将mpg格式转换为mp4格式?

如何将mpg格式转换为mp4格式&#xff1f;mpg是什么格式文件呢&#xff1f;mpg全称MPEG&#xff0c;即动态图像专家组&#xff0c;是运动图像压缩算法的国际标准&#xff0c;这种专业的解释可能很多人看不懂&#xff0c;简单的说mpg就是一种视频文件格式。属于不常用的视频文件格…

mpg格式转换为mp4格式

如何将mpg格式转换为mp4格式&#xff1f;mpg的全称是Moving Pictures Experts Group&#xff0c;也被称为mpeg&#xff0c;是运动图像压缩算法的国际标准&#xff0c;简单的说mpg就是一种视频格式&#xff0c;mpg格式说过经过编码处理的图像文件越小&#xff0c;所占用的存储空…

Java使用mpxj导入.mpp格式的Project文件(甘特图)

最近换工作了&#xff0c;主要的项目都是企业内部为支撑的管理平台&#xff0c;刚入入职没多久&#xff0c;遇到了一个需求&#xff0c;就是导入微软的Project文件&#xff0c;踩过不少坑&#xff0c;所以记录一下&#xff0c;后续还有从数据库导出Project引导文件&#xff0c;…

引用型变量的赋值

内存分类 栈内存&#xff1a;空间较小&#xff0c;用来存储变量在堆内存的地址。 堆内存&#xff1a;空间大&#xff0c;用来存储变量的真实数据。 引用型变量数据引用&#xff1a;首先根据变量访问栈内存&#xff0c;再根据栈内存中的地址指向找到在堆内存中的变量数据。 当…

java对象与对象引用变量

Java对象及其引用 先搞清楚什么是堆&#xff0c;什么是栈。 Java开辟了两类存储区域&#xff0c;对比二者的特点 存储区域存储内容优点缺点回收栈基本类型的变量和对象的引用变量存取速度比堆要快&#xff0c;仅次于寄存器&#xff0c;栈数据可以共享存在栈中的数据大小与生…

变量的引用_概念

理解了变量的引用之后, 对于我们理解在python 中的函数的参数传递和以及函数的返回值都是非常由帮助的. 当一个python 程序运行的时候, 变量和数据都是保存在内存中的. 变量的引用这个概念, 就是介绍一下当一个python 程序运行时, 变量和数据是怎样保存的, 并且保存的是什么内…

C++中引用变量详解

目录 一、什么是引用&#xff1f; 二、引用的注意事项 三、引用的本质 四、常量引用 五、引用的使用场景​​​​​​​ 六、引用和指针的区别 一、什么是引用&#xff1f; 引用实际上是给一个变量起别名&#xff0c;编译器不会为引用变量开辟一个新的内存空间&#xff…

C++变量引用

本篇介绍的变量引用与之前介绍的指针不是同一概念&#xff0c;它们有本质的区分&#xff1a; 1&#xff09;不存在空引用。引用必须连接到一块合法的内存。 2&#xff09;一旦引用被初始化为一个对象&#xff0c;就不能被指向到另一个对象。指针可以在任何时候指向到另一个对…

Java_引用变量

目录 1.认识 null ​编辑 2.数组的应用 3.数组作为函数的参数 4.数组作为函数的返回值 5.数组练习 数组转字符串 6.数组拷贝 (1)通过函数Arrays.copyOf()进行拷贝&#xff1a; (2)通过函数System.arraycopy()进行拷贝&#xff1a; (3)拷贝范围Arrays.copyOfRange() (4)比…

C++中的引用变量详解

文章目录 声明及定义代码引用变量的特点图片解释引用变量的本质引用变量的用途int & 和 const int & 的区别引用变量和宏定义&#xff08;#define&#xff09;的区别 声明及定义 [const] int& 变量名 右值 注意&#xff1a;[]内的是可选的。即这里的const限定词是…

引用变量及其作用

首先&#xff0c;先来明白一下什么是引用变量。 一个变量可以声明为一个引用&#xff0c;它起着该变量的别名的作用。对引用进行操作&#xff0c;实际上就是对被引用的变量进行操作。 引用运算符&#xff1a;&&#xff1b; 定义的一般形式&#xff1a;数据类型 &引用变…