Tomcat集群和session会话同步管理

实现Tomcat服务器上不同Web项目间session共享的解决方案 本文还有配套的精品资源,点击获取 简介:在Java Web开发中,Tomcat作为应用服务器处理HTTP请求并托管Web应用程序。部署多个Web项目在同一服务器时,session共享能提升用户体验。本文探讨了几种session共享方法:通过共享Cookie、使用ServletContextListener、实现单点登录(SSO)、配置共享Manager组件、使用分布式ses... 阅读详情

这两天搭建了一个tomcat集群的小demo,过程中的一些的小坑,在这里给大家说一下。


1.前言

当我们的项目并发量特别大,单一服务器无法满足的时候,或者一个服务器宕机,系统就无法运行的时候这里我们就可以搭建一个集群服务了,因为集群有一定的扩充性和容错能力.

1.1 集群(Cluster):是一组独立的计算机系统构成一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信。应用程序可以通过网络共享内存进行消息传送,实现分布式计算机。

1.2 负载均衡(Load Balance):先得从集群讲起,集群就是一组连在一起的计算机,从外部看它是一个系统,各节点可以是不同的操作系统或不同硬件构成的计算机。如一个提供Web服务的集群,对外界来看是一个大Web服务器。不过集群的节点也可以单独提供服务。

特点和作用

0.1 高可靠性(HA):利用集群管理软件,当主服务器故障时,备份服务器能够自动接管主服务器的工作,并及时切换过去,以实现对用户的不间断服务。

0.2 负载平衡:即把负载压力根据某种算法合理分配到集群中的每一台计算机上,以减轻主服务器的压力,降低对主服务器的硬件和软件要求。

总体来说集群就是把一个项目发布在多个服务器上面,然后实现压力分散处理,或者当一台服务器宕机的时候 其它服务器可以进行接替,这个项目还可以正常运行。

本文中采用的负载均衡技术为  反向代理负载均衡 (如Apache+JK2+Tomcat这种组合)

使用代理服务器可以将请求转发给内部的Web服务器,让代理服务器将请求均匀地转发给多台内部Web服务器之一上,从而达到负载均衡的目的。这种代理方式 与普通的代理方式有所不同,标准代理方式是客户使用代理访问多个外部Web服务器,而这种代理方式是多个客户使用它访问内部Web服务器,因此也被称为反 向代理模式。


如图  当用户访问我们的服务器时,会先通过apache server进行服务转发,然后将每一个单独的服务转发给独立的tomcat服务器,然后由单独的服务器进行处理并且进行回应。

2.配置负载均衡

环境搭建  jdk 1.8,tomcat  8(版本随意,但是需要两个哟),apache 2.4.3 ,mod_jk. (要特别注意是 apache,和mod_jk的版本要一模一样某种会出现异常)

 jk的下载地址 http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/windows/ 

 apache-server 安装完成后,可以在浏览器中输入 http://localhost/ 来测试,如果出现 ” It works!”或者有页面 则表示安装成功。 aoache的启动的命令为 

httpd -k start

3.安装好上面得到环境后进行配置

 3.1对apache24目录下的conf目录下的httpd.conf进行添加

# Load mod_jk2 module  这里为要使用的jk的文件,jk文件下载好后要把它放在 apache目录下的modules中

LoadModule jk_module modules/mod_jk.so

# Where to find workers.properties( 引用 workers 配置文件 )

JkWorkersFile conf/workers.properties

# Where to put jk logs(log 文件路径,此路径可以自己创建 )

JkLogFile logs/mod_jk2.log

# Set the jk log level [debug/error/info](log 级别 )

JkLogLevel info

# Select the log format(log 格式 )

JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

# JkOptions indicate to send SSL KEY SIZE,

JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories

# JkRequestLogFormat set the request format

JkRequestLogFormat "%w %V %T"

# Send JSPs for context / to worker named loadBalancer(URL 转发配置,匹配的 URL 才转发到 tomcat 进行处理 )

JkMount /*.jsp controller

# JkMount /*.* loadBalancer

3.2 在conf目录下创建 workers.properties文件 

 #server 列表,tomcat1,tomcat2为自己的tomcat服务器,这里的tomcat1,tomcat2下面有解释

worker.list = controller,tomcat1,tomcat2

# tomcat1(ajp13 端口号,在tomcat下server.xml配置,默认8009)

worker.tomcat1.port=8009

#tomcat 的主机地址,如不为本机,请填写ip地址

worker.tomcat1.host=localhost

worker.tomcat1.type=ajp13

#server 的加权比重,值越高,分得的请求越多

worker.tomcat1.lbfactor = 1

# tomcat2

worker.tomcat2.port=9009

worker.tomcat2.host=localhost

worker.tomcat2.type=ajp13

worker.tomcat2.lbfactor = 1

# controller( 负载均衡控制器)

worker.controller.type=lb

# 指定分担请求的tomcat

worker.controller.balanced_workers=tomcat1,tomcat2

#worker.controller.sticky_session=true

3.3在上面的配置完成之后我们可以修改tomcat的配置了 


第二个的端口一定和要上面的端口一样

配置完成之后就可以写一个测试了

创建一个web项目然后写一个页面,页面中添加

这个我们就可以进行测试了,先启动apache 服务,然后把项目加载到每一个tomcat服务中,启动tomcat1,tomcat2,eclipse为例


然后访问 http://localhost/你自己的项目名/测试页面.jsp

这个时候我们就可以看到tomcat1控制台中打印了上面输入的信息,我们刷新一下就可以在tomcat2控制台看到相应的信息,坐到这里我们的tomcat集群就完成了但是只完成负载均衡,这里的session没有实现共享,下面我们来详细的讲一下 session的共享

4. session共享配置

这个时候需要在tomcat1和tomcat2中进行配置了下面的配置在两个tomcat服务器的server.xml文件中都要进行修改

<Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"

managerClassName="org.apache.catalina.cluster.session.DeltaManager"

expireSessionsOnShutdown="false"

useDirtyFlag="true"

notifyListenersOnReplication="true">

<Membership

className="org.apache.catalina.cluster.mcast.McastService"

mcastAddr="228.0.0.4"

mcastPort="45564"

mcastFrequency="500"

mcastDropTime="3000"/>

<Receiver

className="org.apache.catalina.cluster.tcp.ReplicationListener"

tcpListenAddress="auto"

tcpListenPort="4001"  //这里的端口要注意,两个tomcat的端口不能一样哟

tcpSelectorTimeout="100"

tcpThreadCount="6"/>

<Sender

className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"

replicationMode="pooled"

ackTimeout="15000"

waitForAck="true"/>

<Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"

filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>

<Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer"

tempDir="/tmp/war-temp/"

deployDir="/tmp/war-deploy/"

watchDir="/tmp/war-listen/"

watchEnabled="false"/>

<ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/>

</Cluster>

Engine 增加 jvmRoute 属性设置, jvmRoute 的值来自于 workers.properties 文件所设置的服务器名称。


然后在test页面中进行添加测试代码



最后一步在web.xml中加入


配置完成。

依次启动apache,tomcat1,tomcat2服务器

刷新页面在页面中输入名称和值,会发现


然后在刷新一下页面


两个tomcat服务确实实现session共享,我们把8080端口先关闭



然后刷新页面


这就说明了再次说明了集群下的服务器一个宕机了,项目还是进行访问

再次开启8080端口的tomcat服务,然后刷新页面


还可以继续得到请求。

总结

. Mod_JK2负载均衡与故障复原,决定把Apache httpd当成web服务器,而且使用mod_jk2将请求传送给Tomcat,则可以使用mod_jk2的负载均衡与容错功能。在集群系统中,带有 mod_jk2的Apache httpd可以做的事情包括:

A 将请求分配至一或多个Tomcat实例上你可以在mod_jk2的workers.properties文件中,设定许多Tomcat实例,并赋于每个实例一个lb_factor值,以作为请求分配的加权因子。 
B. 侦测Tomcat实例是否失败当Tomcat实例的连接器服务不再响应时,mod_jk2会及时侦测到,并停止将请求送给它。其他的Tomcat实例则会接受失效实例的负载。 
C. 侦测Tomcat实例在失效后的何时恢复因连接器服务失效,而停止将请求分配给Tomcat实例之后,mod_jk2会周期性地检查是否已恢复使用性,并自动将其加入现行的Tomcat实例池中。


其实无论是分布式,数据缓存,还是负载均衡,无非就是改善网站的性能瓶颈,在网站源码不做优化的情况下,负载均衡可以说是最直接的手段了。其实抛开这个名 词,放开了说,就是希望用户能够分流,也就是说把所有用户的访问压力分散到多台服务器上,也可以分散到多个tomcat里,如果一台服务器装多个 tomcat,那么即使是负载均衡,性能也提高不了太多,不过可以提高稳定性,即容错性。当其中一个主tomcat当掉,其他的tomcat也可以补上, 因为tomcat之间实现了Session共享。待tomcat服务器修复后再次启动,就会自动拷贝所有session数据,然后加入集群。这样就可以不 间断的提供服务。如果要真正从本质上提升性能,必须要分布到多台服务器。

以上的测试为在一台服务器上进行测试,多台服务器的测试也可以实现,不过文中的ip就要进行对应的更改了.

只要思想不滑坡,办法总比困难多!

详解Tomcat集群如何同步会话 本篇文章主要介绍了Tomcat集群如何同步会话,Tocmat集群中最重要的交换信息就是会话消息,有兴趣的同学可以了解一下。 立即下载

相关推荐

nnDetection复现Luna16 附模型

淘论文发现nnDetection框架对肺结节的检测效果挺好,便跑了跑复现了下, 作者诚不欺人,确实挺好, 并附上我依据文档训练的模型。

HeavenWalker 2597

分布式Session共享多种方案,SpringSession;tomcat+redis集群

session共享解决方案

qq_44765647的博客 2273

WinForm制作文件传输助手,Tcp局域网传输文件,传输速度受限于宽带和硬盘速度上限

文件传输助手为什么会出现,是因为项目上有些特殊的地方限制太多了,连插硬盘都需要关软件,联网又要开很不方便,网络限制一般软件只能局域网通信,还要开特定的端口等,你才能在电脑上通信,这样和机房的服务器远程的时候文件就不好拿过去,又不可能每次都去开机房的门。现在这个功能比较简单,只能单文件发送,但是其实比U盘硬盘方便,一般的六类网线传输压缩包在50M/s以上,U盘硬盘复制就不行了,特别如果是像我们学校这种网络结构,一个学校都在一个局域网,那真的方便!普通的局域网用特定IP和端口,通信也是很方便的。

m0_69233031的博客 1672

tomcat集群之session同步 问题

tomcat 集群 之session同步 打开tomcat 修改conf/server.xml文件 找到 这个标签,在这个标签里面添加 &lt;Manager className="org.apache.catalina.ha.session.BackupManager" expireSessionsOnShutdown="false" ...

qq_35001835的博客 849

java modbus通讯协议_Modbus通 讯 协 议

电磁流量计Modbus通 讯 协 议(版本号:9000-K V9.1.1)2020年01月01日通讯协议针对KFD电磁流量计工业应用设计,版本:9000-K V9.1.1,该版本主要用于实时数据采集、流量测量、流量累计控制及部分参数的修改。一、主机系统通讯部件要求1.国际标准RS-485通讯接口部件,不小于11Bytes 的通信缓冲区(FIFO),支持1200、2400、4800、96...

weixin_39956612的博客 1012

tree_sitter多语言解析器配置实战指南

本文是一份详细的Tree-sitter多语言解析器配置实战指南。文章从零开始,手把手指导如何搭建Python环境、安装指定版本的tree-sitter库、下载并编译多种语言的语法规则,最终构建一个统一的解析器库。通过实战代码演示了如何初始化解析器、解析代码并遍历语法树,旨在帮助开发者高效处理多语言代码分析任务,并分享了高级技巧与常见问题排坑经验。

weixin_29245767的博客 267

Session一致性解决方案之多个tomcat实现session共享

一:多个tomcat实现session共享 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片

qq_27622081的博客 770

CRC校验查表法详解

CRC校验的查表法理解算法原理基础计算查表法原理及计算查表法中的表CRC校验中数据逆序CRC校验中的其它参数 算法原理 CRC(Cyclic Redundance Check)循环冗余校验,是基于某个多项式计算出一组校验码,用于核对数据传输过程中是否被更改或传输错误 基础计算 假设需要检验的数据 g :10100111,这串二进制码可以表示为代数多项式g(x) = x^7 + x^5 + x^2 + x +1, 而作为除数的多项式 h(x) 可以自由选择或者按照国际标准选择,一般h(x)的阶数如果是m

boom的博客 1万+

tomcat使用Spring-Session实现session同步

前言: nginx实现提供了Ip_hash的方式实现了tomcat的集群,但未实现session的同步,当被分配的tomcat节点挂掉了,改系统的session信息将丢失,因此选用以下两种方式。 1.tomcat Cluster实现session同步,这种方式是通过多个节点间定时的同步每个节点session中的信息来实现session同步的,这种效率低,同时依赖tomcat这种平台,不推荐使用...

zh127368zh的博客 1654

YOLOv11改进策略【Neck】| GFPN 超越BiFPN 通过跳层连接和跨尺度连接改进v11颈部网络

本文记录的是利用颈部结构优化YOLOv11的目标检测网络模型。利用改进后的颈部网络,通过跳层连接,避免了在进行反向传播时的梯度消失问题,并且引入跨尺度连接,可以实现不同级别和层次的特征充分融合,获取足够的高层语义信息和低层空间信息交换,从而在大规模变化场景下提高检测性能。GIRAFFEDET: A HEAVY-NECK PARADIGM FOR OBJECT DETECTION-GFPN包含了上述的跳层连接(dense-link和log2nlog _{2} nlog2​n-link)以及跨尺度连接(Quee

Limiiiing的博客 3007

基于ZYNQ PL的AD7606数据采集与FFT实时频谱分析:从硬件到创新实现

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kKnmpgJm-1750295287594)(https://example.com/fft_plot.png)]本文涉及代码已在Xilinx ZCU102开发板与AD7606评估板上验证通过,采样率支持200KSPS@8通道,FFT计算延迟<1ms。传统MCU+DSP方案难以兼顾速度与功耗,而ZYNQ的PL+PS架构为这一问题提供了完美解决方案。本文实现的ZYNQ PL方案突破了传统处理器的性能瓶颈,通过。

QQ_778132974的博客 339

tomcat集群, 负载均衡, session同步

关键字: tomcat集群, 负载均衡, session同步 (一)环境说明 (1)服务器有4台,一台安装apache,三台安装tomcat (2)apache2.0.55、tomcat5.5.15、jk2.0.4、jdk1.5.6或jdk1.4.2 (3)ip配置,一台安装apache的ip为192.168.0.88,三台安装tomcat的服务器ip分别为192.168.0.1/2/4

yxpjx的专栏 1068

「深度学习之优化算法」笔记(二)优化算法的分类

但是由于生物的局限性,人们所创造出的算法也会有局限性:我们所熟知的生物都生存在三维空间,在这些环境中,影响生物生存的条件比较有限,反应到算法中就是这些算法在解决较低维度的问题时效果很好,当遇到超高维(维度>500)问题时,结果可能不容乐观,没做过实验,我也不敢乱说。当然,他们的目的不是在最佳狩猎位置集合,他们的目的是在过去的途中看是否能发现更加好的狩猎位置,去往已经到过的狩猎地点再次狩猎是没有意义的,因为每个位置获取食物的难易程度是固定的。如果他们的策略是“不跟随最优解”,那么他们的策略是什么呢?

quanzhan_King的博客 1371

集群服务器Session同步及一种基于Memcached的session同步

1 Session的集群管理 事实上,网站总是有状态的。每一个登录信息、用户信息常常被存储在session内部。而当一个网站被部署在不止一台服务器的时候,就会遇到session同步的问题。事实上即使一个很小的网站,也要至少有两台服务器互为备份,分单流量是必须得,更重要的是无缝切流量升级。为了保证服务的不间断又要进行网站的维护升级,切流量是最简单的。那么如何保证切流量的时候session也会跟

惟愿无事 3439

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

tomcat使用memcached完成集群(session共享实现方式)

百度搜索:tomcat memcached session 转载他人 http://blog.youkuaiyun.com/a__java___a/article/details/8738932 一.安装memcached 1.windows下安装memcached 需要到一个网站下载memcached的for win 32版本.在memcached的官方网站我是找不到的.我看了下,提供...

u011660647的博客 154

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

集群中几种session同步解决方案的比较

集群中session安全和同步是个最大的问题,下面是我收集到的几种session同步的方案,希望能通过分析其各自的优劣找出其适应的场景。 1. 客户端cookie加密 这是我以前采用的方式,简单,高效。比较好的方法是自己采用cookie机制来实现一个session,在应用中使用此session实现。 问题:session中数据不能太多,最好只有个用户id。 参考实现:http://rollerw...

fedora 683

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Tomcat自带集群Session共享配置

一、说明 由于我们的服务器操作系统大部分均为CentOS ,原有服务器使用CentOS 6.x,后续新增服务器使用CentOS 7.x,CentOS 6.x和CentOS 7.x命令行操作有比较大区别,本文以CentOS 7.x以基础环境。虽然并不推荐使用Tomcat自带的集群Session共享功能,因为其基于组播的会话数据同步会占用大量的JVM资源和网络,但对于小规模的Tomcat集群来说还是方便的,比如2-4台Tomcat服务器。其简单的实现,可以使用Nginx作负载均衡,反向代理到后方的多台Tomc

拓封8000 1290

SpringBoot使用Redis实现Tomcat集群的session同步操作

SpringBoot使用Redis实现Tomcat集群的session同步操作

qq_45926602的博客 674

Tomcat部署项目及Tomcat间会话同步

本文讲解了Tomcat部署项目的前期配置以及部署项目的方法;同时讲解了两个Tomcat的会话同步设置方式。

Java.L的博客 929

实践中整理出tomcat集群和负载均衡

实践中整理出tomcat集群和负载均衡(一)环境说明(1)服务器有4台,一台安装apache,三台安装tomcat(2)apache2.0.55、tomcat5.5.15、jk2.0.4、jdk1.5.6或jdk1.4.2(3)ip配置,一台安装apache的ip为192.168.0.88,三台安装tomcat的服务器ip分别为192.168.0.1/2/4(二)安装过程(1)在三台要安装

baggio785的专栏 3815

Tomcat集群应用同步 —— 源码分析

相信大家对Tomcat的集群部署都不陌生,以往,我们手动搭建一个Tomcat的集群环境,然后手动部署每个Tomcat上面的应用,保证他们都是相同的应用程序包,以便负载均衡的时候不会出现问题但是问题来了,如果我们项目源码修改了,重新打包,这时候就要给每个Tomcat单独替换里面的war包,相当麻烦!Tomcat给我们提供了一种十分简单的解决方案:应用同步欢迎指出我的错误!

weixin_42132143的博客 1495

如何在Tomcat中配置和使用Session共享!

当用户首次访问Web应用程序时,Tomcat会创建一个新的会话,并生成一个唯一的Session ID来标识这个会话。默认情况下,每个Web应用程序都有自己的Session存储空间,这意味着不同应用程序之间无法直接共享Session数据。为了实现Session共享,我们需要进行一些配置上的调整。配置Tomcat以实现Session共享要实现Session共享,我们可以使用Tomcat的Manager接口和JMX(Java Management Extensions)使用Tomcat Manager接口。

乔木的博客 2547

解决两台tomcat服务器之间的session共享问题

为了解决两个tomcat之间的session共享,我们采用将session存入redis中,而这一操作实际上就是序列化和反序列化。在解决这个问题后,发现了一个新的问题,上代码: 红框里的判断,在用了redis存储后返回的是false,如果不用redis存储,则是true,发现这个问题也是因为sit环境和uat环境不一致,sit环境部署了两台tomcat,所以需要做session共享。 原因...

shimmerkaiye的博客 1922

Tomcat Session总结及底层实现

@Author 风一样的码农 @HomePageUrl http://www.cnblogs.com/chenpi/ @Copyright 转载请注明出处,谢谢~ 阅读目录 什么是Session Session的目的 实现机制 Tomcat中的session实现 第一次访问时新建session(此部分为原创) session存在的问题 ...

Littlemotor 5592

[Tomcat]关于 tomcat 集群中 session 共享的三种方法

前两种均需要使用 memcached 或redis 存储 session ,最后一种使用 terracotta 服务器共享。 建议使用 redis,不仅仅因为它可以将缓存的内容持久化,还因为它支持的单个对象比较大,而且数据类型丰富, 不只是缓存 session,还可以做其他用途,一举几得啊。 1、使用 filter 方法存储 这种方法比较推荐,因为它的服务器使用范围比较多,不仅限于t...

疯一样的女子 329

Tomcat session复制及session共享技术

为什么要做session复制或共享Session共享是指在多个服务器之间共享用户会话数据的能力,这对于构建高可用性和可伸缩性的Web应用程序至关重要。实现Session复制或Session共享的目的是为了在多个Tomcat实例之间实现Session的无缝转移和共享,以提供更高的可伸缩性、负载均衡和容错性。

Lzcsfg的博客 2155
下一篇: Tomcat简单剖析
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值