Java应用服务器之tomcat会话复制集群配置
会话是识别用户,跟踪用户访问行为的一个手段,通过cookie(存在客户端)或session(存在服务端)来判断本次请求是那个客户端发送过来;常用的会话保持有绑定会话,就是前边我们聊的在代理上通过算法或通过给客户端响应首部加cookie这种方式来保持同一cookie或同一ip地址的请求始终发送到同一后端server进行响应;但是这样的会话绑定的方式存在一个问题,就是当后端某一server宕机,那么之前上面的所有会话信息将消失,那么后续的客户端来请求,代理是否要把请求调度到后端宕机的server呢?如果说调度上去呢,那么用户之前的会话信息又没有了,如果说不调度呢,那么用户将不能够得到服务;所以对于这种情况我们需要把会话都同步到后端所有server上,即便某一台或几台后端server宕机了,不会导致用户的会话信息丢失,同样服务也是可用的;这种冗余的方式保存会话信息,使得用户的会话信息能够在任何一台后端server上都会有;这也意味着只要有用户来请求,前端调度器可以任意把请求调度到后端的某一台server上,然后服务端把本次请求的用户会话信息通过广播的方式,通知给其他后端server,这样一来这个客户端后续来请求,不管调度到后端那一台server上,因为后端server上都有这个客户端之前请求的会话信息,所以不管到那一台都能够识别;对于tomcat来讲,它内部就有一个组件支持这样的功能,它可以基于多播通信的方式,把会话信息同步给后端其他节点,这个组件就是cluster;
示例:使用tomcat cluster组件来定义tomcat的会话复制集群
环境说明
名称 | ip地址 | 端口 |
代理Nginx | 192.168.0.41 | 80 |
应用服务tomcatA | 192.168.0.42 | 8080 |
应用服务tomcatB | 192.168.0.43 | 8080 |
准备测试页面,以及配置tomcatA
提示:以上是myapp里的内容以及文件目录结构
提示:以上配置表示部署一个/myapp的应用,它的文件路径在/webapps/myapp,并且在engine上配置了 jvmRoute=“tomcatA”;
提示:cluster配置需要注意上面打红框的位置,在官方配置文档中,后面的<ClusterListener 的后面没有把标签闭合了,我们在使用时需要给它闭合了,否则会出现语法错,导致tomcat起不来;其次就是我们需要更改接收器的ip地址,默认它是auto,auto表示自动监听本机一个地址,这个地址也可能是127.0.0.1,如果监听在127.0.0.1,那么主机就不能够接收到,其他节点发来的会话信息;说下这个配置文件吧,cluster组件中主要就是定义了DeltaManager的属性,该组件用于处理增量会话的事务,也就是用这个管理的功能实现多节点复制会话信息;其次我们要在其cluster内部定义个chanel,这个组件主要定义集群通信和各成员的一些属性,比如成员关系判定呀,接收器和发送器;Membership组件用于定义成员关系判定的,里面主要定义多播地址和端口等属性,如果多播地址相同,那么就是同一集群的成员,否则不是;Receiver主要用于定义接收器的相关属性,比如接收器监听的地址和端口超时时长,最大线程等等;Sender用于指定发送器,发送器我们这里不需要认为手动定义,用官方给定的示例即可;后面的Interceptor主要定义了tcp报文的检查以及消息摘要,后面两台哦Interceptor主要作用是保证tcp报文的完整和正确性;Deployer主要用于定义部署应用相关属性,它的主要作用是如果我们定义了集群,我们可以在集群成员中的一台server上部署好应用,然后其他成员可以通过网络自动部署;通常我们建议使用这个自动部署的功能;
给我们定义的应用修改器web.xml 在其中加上<distributable>
提示:对于web.xml配置文件,我们可以从/etc/tomcat/中复制一份到自己的应用目录结构里,然后在非注释掉位置加上<distributable/>元素即可
对于tomcatB来说,我们也需要准备好同样的文件,为了区分,我们把index.jsp修改成tomcatB ,在配置文件中我们需要修改接收器的监听地址,以及jvmRoute的值,其他的都可以不变
到此tomcat会话复制集群就配置好了;其实从上面的配置文件可以看大,tomcat的会话复制集群就是利用多播地址通信,一个请求不管到集群那个基点,它都会通过多播通信,把会话信息以组播的方式发送给其他成员;这里建议把接收器的地址专门用张网卡配置好地址;接下来我们启动下tomcatA,tomcatB,然后看看日志是否初始集群成功,并接收到集群成员接收器的地址;
提示:这里注意一点如果tomcat启动特别慢,就是8005端口要等很久才起来,可以尝试安装rng-tools,并启动rngd,这样可以加快tomcat启动
提示:如果在tomcatA的日志中能够看到tomcatB的接收器地址和端口,那么就表示tomcatA已经识别到tomcatB,并把tomcatB当作集群成员加入到集群;同样在tomcatB的日志中能够看到tomcatA的接收器地址和端口,表示tomcatB已经识别tomcatA并把它加入到集群;
配置nginx负载均衡后端两台tomcat server
提示:这里需要主要反代时需要把反代的URI和后面proxy_pass后面的URI相同,否则代理后,会话复制集群不会生效;
验证:检查nginx的配置文件语法,启动nginx访问192.168.0.41/myapp看看有什么变化
提示:可以看到访问192.168.0.41/myapp时sessionid始终没有发生变化,变化的自由后面的jvmRoute的值和页面的值;这说明我们访问nginx时,nginx也基于自己的轮询把请求调度到后端去了,第一次访问时,后端server会响应一个set-cookie的首部,把当前访问的页面的session信息响应给客户端,第二次访问客户端就会把上一次访问相应的cookie带上去访问,这时后端server接受到客户端发送过来的cookie,然后就在自己内存里找对应的session信息;由于后端server是把session信息基于多播通信的方式共享给集群其他节点,所以第二次不管调度到那台server上,对应server都会有该客户端第一次访问服务端的session信息;所以我们第二次访问时,sessionid还是第一次访问服务器的sessionid,后面的tomcatB表示由tomcatB这个jvmRoute处理的这次请求;
Java应用服务器之tomcat会话复制集群配置的更多相关文章
- Java应用服务器之tomcat session server msm搭建配置
在上一篇博客中,我们介绍了tomcat自带的cluster组件配置session replication cluster,回顾请参考https://www.cnblogs.com/qiuhom-187 ...
- 1.Apache+Tomcat负载均衡+集群配置
1.本文Apache+Tomcat集群配置 基于最新的Apache和Tomcat,具体是2011年4月20日最新的Tomcat和Apache集群和负载均衡配置. 准备环境 Apache Apache是 ...
- Mariadb之半同步复制集群配置
首先我们来了解下在mariadb/mysql数据库主从复制集群中什么是同步,什么是异步,什么是半同步:所谓同步就是指主节点发生写操作事件,它不会立刻返回,而是等到从节点接收到主节点发送过来的写操作事件 ...
- Java应用服务器之tomcat基础配置(二)
前文我们聊了下tomcat的配置文件相关格式和组件简介以及webapp目录结构,manger部署和host managera部署,回顾请参考https://www.cnblogs.com/qiuhom ...
- Java应用服务器之tomcat基础配置(一)
前文我们聊到了java相关重要组件和它们之间的关系以及jdk.tomcat部署回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13302938.html:今天我们 ...
- Java应用服务器之tomcat部署
一.相关术语简介 首先我们来了解下tomcat是什么,tomcat是apache软件基金会中的一个项目,由apache.Sun 和其他一些公司及个人共同开发而成.主要作用是提供servlet和jsp类 ...
- Tomcat 8.5集群配置
示例 <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions= ...
- tomcat+apache的集群配置
背景:项目比较大,用户较多,同一时间,用户在线人数较多,为此,整体架构是lvs(2台)+keepalived(2台)+apache(N台)+tomcat(N台) lvs负责分发请求,所有的web请求经 ...
- hadoop集群配置和在windows系统上运用java操作hdfs
安装 配置 概念 hadoop常用shell命令 使用java操作hadoop 本文介绍hadoop集群配置和在windows系统上运用java操作hdfs 安装 http://mirror.bit. ...
随机推荐
- linux网络编程-posix信号量与互斥锁(39)
-posix信号量信号量 是打开一个有名的信号量 sem_init是打开一个无名的信号量,无名信号量的销毁用sem_destroy sem_wait和sem_post是对信号量进行pv操作,既可以使用 ...
- Struts2 执行流程 以及 Action与Servlet比较 (个人理解)
上图提供了struts2的执行流程.如下: 1:从客户端发出请求(HTTPServletRequest). 2:请求经过各种过滤器(filter),注:一般情况下,如SiteMesh等其他过滤器要放在 ...
- 微信小程序上传Word文档、PDF、图片等文件
<view class="main" style="border:none"> <view class="title"&g ...
- Flutter开发初探
目前跨端开发比较热门的就是 React Native 和 Flutter 了,到底该选哪门技术似乎也快成了大前端圈的一个热门话题.对于web前端来说,基于web生态的 React Native 应该是 ...
- DOM-BOM-EVENT(3)
3.Node常用属性 childNodes 获取所有子节点 <div id="wrap"> <div>1111</div> <div> ...
- (私人收藏)Linux命令大全(修正版)
Linux命令大全(修正版) https://pan.baidu.com/s/1tPTv1PzCelBC_Eq-ASAOBg1yp3 文件传输 bye ftp ftpcount ftpshut ftp ...
- java的运行
1.打成war包 war需要部署到tomcat中运行. 2.jar包 A 可执行jar包 java -jar some.jar B 普通jar包 java -cp "dir/*" ...
- pdf流文件转图片
需求:将后台返回的pdf流文件转换成图片与页面其他内容一起打印pdf流文件不能直接在前台显示,需要借助pdf.js+viewer.js. 一般情况下,如果要打印pdf流文件,可以直接在新打开的view ...
- 数据库基础01-SQL基础语法
数据库查询语言(Structured Query Language) 数据库查询语言: DDL(data definition language) -数据定义语言,建库建表 DML (data man ...
- OutOfMemory相关问题(内存溢出异常OOM)
OutOfMemory(内存溢出异常OOM) java.lang.OutOfMemoryError :Thrown when the Java Virtual Machine cannot alloc ...