tomcat 8 群集_Tomcat群集系列第3部分:会话复制
tomcat 8 群集
这是Tomcat群集系列的第三部分。 在本文中,我们将讨论如何在tomcat集群环境中设置会话复制。 会话复制使群集环境具有高可用性和完整的故障转移功能。
[查看下面的视频以获得更好的理解]
在我以前的文章中,我们讨论了有关设置简单负载均衡器以及如何制作会话关联性概念的内容。
如何在tomcat中设置会话复制
在进行会话复制之前,我们需要了解2个重要概念
- 多播
- Tomcat中的会话管理器
多播
多播是将一条消息发送到选定的一组收件人。 在此,tomcat群集使用多播来标识群集中那些实例的实例。
集群有2种类型
- 静态Tomcat集群
- 动态Tomcat集群
在静态集群中 ,不需要多播,因为我们每个Tomcat都静态地定义/配置了其他实例。 但是动态集群我们没有定义任何东西。 因此,该集群中的每个tomcat都如何识别其他tomcat实例。
因此,这里使用多播概念。 每个tomcat首先加入单个组播组 。 并定期发送心跳信号。 因此其他tomcat实例接收到这些信号并将该成员添加到集群中。
Tomcat中的会话管理器
会话管理器用于创建和管理代表应用程序的会话。 在Servlet规范中request.getSession(); 提到了容器(tomcat)负责创建会话。 在这里,tomcat为此使用了会话管理器。
会话管理器有4种类型
- 标准经理
- 持久经理
- 台达经理
- 备份管理器
标准经理
它是tomcat使用的默认管理器。 即使在Web应用程序中未提及我们,tomcat也使用此管理器来管理会话。 如果您要自定义此标准管理器,则在context.xml文件中添加<Manager>标记。
<Manager className=“org.apache.catalina.session.StandardManager” />
在这里org.apache.catalina.session.StandardManager是标准管理器的完全限定的类名。
恒久经理
该管理器将在一段时间后将会话信息存储到持久位置。 这里有两种类型的商店。
- 文件存储
- JDBC存储
文件存储有助于将所有会话信息存储在基础文件系统(本地HDD或共享文件系统,例如NFS等)的单独文件中。
JDBC Store帮助将会话信息存储到关系数据库。
因此,使用Persistent Manager,我们可以实现tomcat集群。 但它不是实时交换的。 它在一定时间间隔后推送信息。 因此,如果在该时间间隔之前发生了任何严重事件(崩溃),则内存中的会话数据将消失。
三角洲经理
在本文中,我们将使用此管理器。 它会将会话复制到所有其他实例。 因此,该经理通常使用集群环境。 但不适用于大型集群。
备份管理器
该管理器通常使用集群环境。 它像三角洲马槽。 但它将完全复制到另一个实例(备份实例)。 它的作用就像一个实例是Primary,另一个实例是Backup。
在Tomcat群集中进行会话复制的步骤
在这里,我将从上次会话亲和性职位中我刚离开的地方继续。 因此,请检查该帖子并确保正确设置了jumRoute。 所以步骤是
- 启用多播路由
- 在conf / server.xml文件中为所有实例添加<Cluster>条目。
- 启用可分发的Web应用程序
1.启用多播路由
在Linux环境中,大多数系统内核都能够处理多播地址。 但是我们需要在内核路由表中添加路由条目。
sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
eth0是我的以太网接口。 因此,请根据您的界面进行更改
在多播地址中属于D类地址范围(224.0.0.0至239.255.255.255)。 因此我们通知内核是否有人访问这些地址,然后它通过eth0接口。
2.在conf / server.xml文件中为所有实例添加<Cluster>条目。
这对于tomcat集群非常重要。 在所有tomcat实例中,我们需要在conf / server.xml文件中添加<Cluster>标记。
<Cluster className='org.apache.catalina.ha.tcp.SimpleTcpCluster'/>
我们可以在<Engine>标记或<Host>标记内部添加此<Cluster>标记。
这里的SimpleTcpCluster是Tomcat Cluster的实现
这个标签看起来很简单,但是里面有很多标签。 如果我们省略,则采用默认值。 如果要进行任何定制(例如更改多猫地址,接收地址端口),则需要使用完整的<Cluster>标签
这是完整的<Cluster>
<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'/>
<Sender className='org.apache.catalina.tribes.transport.ReplicationTransmitter'><Transport className='org.apache.catalina.tribes.transport.nio.PooledParallelSender'/></Sender><Receiver className='org.apache.catalina.tribes.transport.nio.NioReceiver'address='auto'port='4000'autoBind='100'selectorTimeout='5000'maxThreads='6'/><InterceptorclassName='org.apache.catalina.tribes.group.interceptors.TcpFailureDetector'/><InterceptorclassName='org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor'/></Channel>
<Valve className='org.apache.catalina.ha.tcp.ReplicationValve' filter=''/><Valve className='org.apache.catalina.ha.session.JvmRouteBinderValve'/><ClusterListener className='org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener'/><ClusterListener className='org.apache.catalina.ha.session.ClusterSessionListener'/></Cluster>
检查我的示例conf / server.xml文件(以供参考)
这里的大多数代码是样板代码。 只需复制并粘贴。 如果我们需要我们可以定制。 例如,我们可以更改multicat地址和端口号。
<Manager className='org.apache.catalina.ha.session.DeltaManager'/>
在这里,Manager标签定义了增量管理器。 增量管理器意味着复制到所有实例。
<Channel className='org.apache.catalina.tribes.group.GroupChannel'>
Tomcat集群使用Apache Tribes通信框架。 该组通信框架负责动态成员资格(使用多播),使用单播(正常TCP连接)发送和接收会话增量信息。
<Membership className='org.apache.catalina.tribes.membership.McastService'address='228.0.0.4'port='45564'frequency='500'dropTime='3000'/>
这是成员资格定义。 这里的地址是多播地址。 我们可以选择D类地址范围(224.0.0.0至239.255.255.255)中的任何地址以及任何端口号。
每个tomcat都会以周期性( 频率 )间隔将心跳信号发送到多播地址。 加入了组播地址的所有其他tomcat,它们可以接收这些信号并将成员资格添加到群集。 如果热跳动信号不能从任何一个Tomcat恢复特定的间隔( dropTime ),则我们需要考虑Tomcat失败。
注意:-
属于群集的所有tomcat实例应具有相同的多播地址和端口号。
<Sender className='org.apache.catalina.tribes.transport.ReplicationTransmitter'><Transport className='org.apache.catalina.tribes.transport.nio.PooledParallelSender'/></Sender>
在这里,发件人使用PooledParallelSender拥有池化连接以使用并发发送会话信息。 因此,它可以加快会话复制过程。
<Receiver className='org.apache.catalina.tribes.transport.nio.NioReceiver'address='auto'port='4000'autoBind='100'selectorTimeout='5000'maxThreads='6'/>
在这里,我们定义了Receiver可以绑定并用于接收会话复制信息的端口。 这里有两个属性很重要。 地址和端口。 这里的地址是您的系统IP地址,端口是任何未使用的端口。 在这里address ='auto'会自动选择系统IP地址。
我们有一些拦截器。
TcpFailureDetector-确保实例已死。 在某些情况下,多播消息被延迟,所有的tomcat实例都认为tomcat已死。 但是此拦截器使tcp单播到失败的tomcat,并确保实例实际上是否失败
另一个重要的侦听器是JvmRouteSessionIDBinderListener,我们将在后面讨论。
3.启用可分发的Web应用程序
我们需要使我们的Web应用程序可分发。 它在web.xml文件中的简单添加<distributable />标签。 根据servlet规范web.xml中的<distributable />标签,提到了考虑此应用程序的任何容器都可以在分布式环境中工作。
注意:
Web应用程序中的所有会话都必须可序列化。
对所有tomcat实例执行以下步骤,然后启动tomcat和httpd服务器。 在我的github仓库中检查我的配置或获取ZIP
这是我的配置。 所有3个tomcat实例都在增量管理器中配置,并且我部署了分布式Web应用程序。 所有tomcat都使用多播来维护成员资格。
现在,客户端发出请求,并首先执行tomcat流程并创建会话,然后如下所示
然后,tomcat 1负责使用Apache部落组通信框架将会话复制到所有实例。
现在,所有tomcat实例都具有会话的确切副本。 因此,如果tomcat 1崩溃或关闭,那么其他任何tomcat仍然可以处理请求[请参见下面的视频]
我们像以前的文章一样使用会话亲和力。 基于该cookie id包含tomcat名称(工作人员名称)。 因此,当第一个tomcat1返回会话ID时,以tomcat1结尾。 但是当tomcat 1失败并且tomcat 2负责所有进一步的请求时。 但会话ID仍包含tomcat1。 因此它使负载均衡器变得困难。 因为tomcat1已关闭。 然后负载均衡器选择其他任何tomcat。 但实际上tomcat2负责。 因此我们需要在会话ID中反映这些更改。
发生故障时,JvmRouteSessionIDBinderListener会将客户端会话ID更改为tomcat2,因此负载均衡器重定向到tomcat2,而不会造成混乱。
检查git hub中是否有所有配置文件,并且可以使用tomcat群集设置。 或者你可以下载为ZIP
相关链接:
- Apache Tomcat群集文档
屏幕投射:
http://www.youtube.com/watch?feature=player_embedded&v=cYBdaeNeXbY
参考: Tomcat群集系列第3部分:来自Ramki Java Blog博客的JCG合作伙伴 Rama Krishnan的会话复制 。
翻译自: https://www.javacodegeeks.com/2012/11/tomcat-clustering-series-part-3-session-replication.html
tomcat 8 群集
tomcat 8 群集_Tomcat群集系列第3部分:会话复制相关推荐
- Tomcat群集系列第3部分:会话复制
这是Tomcat群集系列的第三部分. 在本文中,我们将讨论如何在tomcat集群环境中设置会话复制. 会话复制使群集环境具有高可用性和完整的故障转移功能. [查看下面的视频以获得更好的理解] 在我之前 ...
- payara 创建 集群_高可用性(HA),会话复制,多VM Payara群集
payara 创建 集群 抽象 在研究如何创建高可用性(HA)时,我发现了会话复制,多机处理的Payara / GlassFish群集,无法在单个参考中找到所需的一切. 我认为这将是一个普遍的需求并且 ...
- 高可用性(HA),会话复制,多VM Payara群集
抽象 在研究如何创建高可用性(HA)时,我发现了会话复制的多机Payara / GlassFish群集,无法在一个参考中找到所需的一切. 我认为这将是一个普遍的需求并且很容易找到. 不幸的是,我的假设 ...
- Hyper-V群集对群集复制
大部分人可能只知道Hyper-V复制是2012新引入的虚拟机复制功能,但却不知道其实Hyper-V复制支持非常灵活的架构,如单机对单机,单机对群集,群集对单机,群集对群集,那么Hyper-V复制和群集 ...
- vSphere Web Client 添加主机进VSAN集群时“SAN 主机移至目标群集: vSAN 群集的 UUID 不匹配”报错
vSphere Web Client 添加主机进VSAN集群时,报"无法将 vSAN 主机移至目标群集: vSAN 群集的 UUID 不匹配 (主机: 5223a6c9-cf94-f978- ...
- 创建故障转移群集,LiveMigration系列之六
创建故障转移群集 在Server1和Server2上安装了Hyper-V角色后,我们就可以来创建故障转移群集了.只有在故障转移群集中,我们才可以实现Hyper-V虚拟机的动态迁移和快速迁移.我们在Se ...
- 配置故障转移群集,livemigration系列之七
配置故障转移群集 在上文中创建了故障转移群集后,我们接下来对故障转移群集进行配置,主要是配置故障转移群集使用的仲裁磁盘和群集共享卷.在Server1的"Administra ...
- mongdb 群集_群集文档的文本摘要
mongdb 群集 This is a part 2 of the series analyzing healthcare chart notes using Natural Language Pro ...
- Tomcat启动后闪退系列问题
Tomcat安装配置系列问题 1.安装Tomcat 2.启动失败--闪退 第一步 第二步 第三步 结束语 装好tomcat后启动一直闪退,配置了半天环境变量也不见好,我都要裂开了.本博文是参考其他大佬 ...
最新文章
- 2017-2018 ACM-ICPC, NEERC, Southern Subregional Contest
- axure文本框单击提示文字消失_Axure基础原件使用
- python requirements.txt_python生成requirements.txt的两种方法
- CV之路——opencv基本操作
- 【机器学习基础】xgboost系列丨xgboost建树过程分析及代码实现
- netty 发送 http请求
- 大数据中,机器学习和数据挖掘的联系与区别
- 华为上架自主地图应用Here WeGo 或登录HMS系统成为预装应用
- 写给Git初学者的7个建议
- 算数计算机在线应用,数学计算器
- Eolinker——前置用例返回的reponse值进行传递
- 用树莓派制作智能小车
- 调查问卷怎么html做成链接,怎么做一个网页链接调查问卷
- el-upload手动上传图片并限制图片数量、大小和格式
- angular 部署的项目自定义访问路径,不使用root根目录的配置
- 后端使用thymeleaf模板生成页面转pdf,结果客户现场中文不显示
- Error: The apk for your currently selected variant (app-release-unsigned.apk) is not signed. Please
- 如何开启 vue 项目
- win10 系统连接 wifi 的小地球图标还在但 wifi 选项没有了的解决办法
- 25匹马,找出最快的3匹,只有5个赛道,每次比赛只能得到5匹马的速度排序,最少需要多少次比赛