tomcat集群的failover机制
集群要提供高可用性就必须要有某种机制去保证,常用的机制为failover(故障转移),简单说就是通过一定的heartbeat检测是否有故障,一旦故障发生备份节点则接管故障节点的工作。
tomcat使用BackupManager模式管理会话必须由负载均衡器提供会话黏贴(Session Stick)机制配合,所谓会话黏贴其实是一种会话定位技术,即在tomcat节点上生成一种包含位置信息的会话id,一般是附带了tomcat实例名,当客户端再次请求时负载均衡器会解析会话id中的位置信息并转发到响应节点上,例如对客户端的请求解析出tomcat1则把请求转到tomcat1,解析出tomcat3则转到tomcat3。假如使用apache作为load-balancer则可以使用Mod_JK实现会话黏贴。
如下图,看看在不同的故障情况下BackupManager会话管理器是如何处理让故障不影响整体的可用性的。一个请求会话包含了tomcat1信息,通过apache负载均衡器后定位到集群的tomcat1节点,此客户端对应的会话标识为id1,会话备份件存放在tomcat2节点上,假如tomcat1一直运行得很好,那么客户端每次的请求都将到此节点处理,此节点包含了用户的会话对象,所以涉及到会话的逻辑运算都没问题。但假设集群中有节点发送故障宕机了,这时的failover机制应该如何考虑?
(一)tomcat3或tomcat4宕了,请求依然转发到tomcat1,无需做任何额外处理。
(二)tomcat2宕了,请求依然转发到tomcat1,涉及到会话相关处理的逻辑仍然正常,但tomcat1需要做一些额外工作,包含新备份节点选取、把会话备份到新节点上等等。
(三)tomcat1宕了,请求可能转发到其它任一节点,分两种情况:
① 转发到备份节点tomcat2上,能找到对应的会话备份件,涉及到会话相关的运算逻辑正常,但它需要做一些额外工作,包含将自己升为源节点、从tomcat3或tomcat4中选一个备份节点,将会话备份到选出的节点。
② 转发到代理节点tomcat3或tomcat4上,由于不能在本地找到对应的会话对象,它要根据会话的位置信息向tomcat2获取会话对象,此外再将自己升为源节点。
BackupManager会话管理器的整个failover机制比较清晰明了,可能有一点会产生疑惑,某个节点宕掉后由它生成的会话经过apache会分发到哪些节点?会不会随机分发?例如当tomcat1宕了,sessionid.tomcat1会话第一次请求转发到tomcat3,第二次请求会转发到哪?实际情况是他会一直转发到tomcat3,因为tomcat整个处理过程存在一个JvmRouteBinderValve阀门,它的作用是提供检测会话路由功能,当它检测到会话的会话ID包含的路由信息非本地JVM时,它将会对其进行更改,例如sessionid.tomcat1转发到tomcat3时会被改为sessionid.tomcat3,也正是有此保证才得以实现BackupManager的failover机制。
tomcat集群的failover机制的更多相关文章
- tomcat集群机制剖析及其生产部署选型
为什么要使用集群? 为什么要使用集群?主要有两方面原因:一是对于一些核心系统要求长期不能中断服务,为了提供高可用性我们需要由多台机器组成的集群:另外一方面,随着访问量越来越大且业务逻辑越来越复杂,单台 ...
- Tomcat集群应用部署的实现机制
集群应用部署是一个很重要的应用场景,设想一下如果没有集群应用部署功能,每当我们发布应用时都要登陆每台机器对每个tomcat实例进行部署,这些工作量都是繁杂且重复的,而对于进步青年的程序员来说是不能容忍 ...
- Tomcat集群如何同步会话
Tocmat集群中最重要的交换信息就是会话消息,对某个tomcat实例某会话做的更改要同步到集群其他tomcat实例的该会话对象,这样才能保证集群所有实例的会话数据一致.在tribes组件的基础上完成 ...
- tomcat集群实现源码级别剖析
随着互联网快速发展,各种各样供外部访问的系统越来越多且访问量越来越大,以前Web容器可以包揽接收-逻辑处理-响应整个请求生命周期的工作,现在为了构建让更多用户访问更强大的系统,人们通过不断地业务解耦. ...
- 实战Apache+Tomcat集群和负载均衡
实战Apache+Tomcat集群和负载均衡 目录 1. 什么是J2EE集群... 3 1.1. 序言... 3 1.2. 基本术语... 3 伸缩性(Scalability): ...
- 161028、Nginx负载均衡实现tomcat集群方案简要小结
重点两部分:一.负载均衡二.tomcat集群 所谓tomcat集群,就是可以向外提供并行服务的多台机器,任何一台服务器宕机,其它服务器可以替代它向外提供服务,而不影响用户访问. Nginx是一个常用的 ...
- 【原创】Tomcat集群环境下对session进行外部缓存的方法(1)
BJJC网改版, 计划将应用部署在tomcat集群上,集群的部署方案为Apache+Tomcat6,连接件为mod_jk,其中开启了session复制和粘性session.计划节点数为3个. 到这,或 ...
- linux+apache+mod_Jk+tomcat实现tomcat集群
最近一段时间一直在研究实现apache + jk_mod + tomcat实现负载均衡,起初负载均衡算是配置蛮顺利的,但是到了配置tomcat集群时所有配置都没有问题,但是tomcat日志中一直提示没 ...
- 使用Nginx实现Tomcat集群负载均衡
概述 要解决的问题 环境准备以及问题解决思路 配置 测试 小结 一.概述 使用Nginx主要是来解决高并发情况下的负载均衡问题. 二.要解决的问题 1.最主要是负载均衡请求分发. 2.文件上传功能,只 ...
随机推荐
- NOIWC颓废记
NOIWC大概就干了3件事情:吃.睡.浪. 吃: 目测绍兴一中的饭比二中的好吃多了,每天都有挺多的肉菜,还有一些甜品,而且是自助,不错的,但是一个不好的是排队时间太长了,于是我这么珍惜时间急着回宿舍的 ...
- 使用JAXB解析xml文件(二)
前面一章简单演示了JAXB的用法,这个章节主要梳理一下JAXB常见的几个注解 1.@XmlRootElement 用于类级别的注解,对应xml的跟元素,常与 @XmlType 和 @XmlAccess ...
- Tinychain 是比特币的一个简易口袋实现
Putting the rough in "rough consensus" Tinychain is a pocket-sized implementation of Bitco ...
- js 当前时间刷新
<p>每隔1秒钟,打印当前时间</p> <div id="time"></div> <script> function ...
- DecimalFormat(用于格式化十进制数字)
1概念: DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字.该类设计有各种功能,使其能够分析和格式化任意语言环境中的数,包括对西方语言.阿拉伯语和印度语数 ...
- Ajax相关——get请求和post请求的区别
一.完整的URL由以下几部分组成: scheme:通信协议,常用的有:http/ftp. host:主机,服务器(计算机)域名或IP地址 port:端口,整数,可选,省略时使用默认端口,http的默认 ...
- discuz全新安装升级,导入旧数据过程,顺便gbk转utf8
由于discuz官方已经不更新了,现在又只有现成的utf8版本,没有gbk版本.我们原来使用的是gbk编码的,最近想改版,顺便升级一下,就索性把gbk也换成utf8吧,这样以后也方便,国际化嘛! 第一 ...
- Hive中yyyymmdd和yyyy-mm-dd日期之间的切换
以2017-12-05和20171205相互转换为例说明 方法1: from_unixtime+ unix_timestamp --20171205转成2017-12-05 ','yyyymmdd') ...
- 浅析JS异步执行机制
前言 JS异步执行机制具有非常重要的地位,尤其体现在回调函数和事件等方面.本文将针对JS异步执行机制进行一个简单的分析. 从一份代码讲起 下面是两个经典的JS定时执行函数,这两个函数的区别相信对JS有 ...
- 01_Struts2概述及环境搭建
1.Struts2概述: Struts2是一个用来开发MVC应用程序的框架. Struts2提供了web应用程序开发过程中一些常见问题的解决方案; 对用户输入的数据进行合法性验证 统一的布局 可扩展性 ...