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.文件上传功能,只 ...
随机推荐
- 智能指针之 auto_ptr
C++的auto_ptr所做的事情,就是动态分配对象以及当对象不再需要时自动执行清理,该智能指针在C++11中已经被弃用,转而由unique_ptr替代, 那这次使用和实现,就具体讲一下auto_pt ...
- 笔记7 AOP
1. 通知(Advice) 切面的工作被称为通知.通知定义了切面是什么以及何时使用.除了描述切面要完成的工作, 通知还解决了何时执行这个工作的问题.它应该应用在某个方法被调 用之前?之后?之前和之 ...
- Linux之软链接与硬链接
什么是链接? 链接简单说实际上是一种文件共享的方式,是 POSIX 中的概念,主流文件系统都支持链接文件. 它是用来干什么的? 你可以将链接简单地理解为 Windows 中常见的快捷方式(或是 OS ...
- Postgresql合并年月日、月份和日期左侧补零
在写一个统计查询的 SQL 语句时,需要根据年.月.日分组,但要求返回的字段是日期格式:yyyy年MM月dd日.刚开始我的做法是返回年.月.日,然后再手动拼接年月日,而且还要判断月份和日期是否为个位数 ...
- sqlserver批量更新数据
update t_hr_teadept set rjkm=b.yjkmfrom t_hr_teadept a inner join t_tr_bzxx_km b on a.bzh=b.bzh wher ...
- 首届.NET Core开源峰会
首届.NET Core开源峰会 代号:dnc 2018 亮点:去中心化.社区驱动 开源峰会 时间:2018年5月20日 周日 地点:在线峰会.远程参与 形式:每个主题5分钟-15分钟闪电演讲 演讲方式 ...
- Linux文件管理笔记
1)Linux识别磁盘:Linux通过不同的设备节点区分各个分区,节点名字的由磁盘名加分区号组成.例如,驱动器/dev/hba上的第一个分区叫做/dev/hba1,驱动器/dev/sdc上的第七个分区 ...
- 如何改变hr颜色
html中用css改变颜色,<hr style="border:0;background-color:#ff0000;height:1px;">如果不加border:0 ...
- Bash shell中的位置参数$#,$*,$@,$0,$1,$2...及特殊参数$?,$-等的含义
http://hi.baidu.com/lolorosa/blog/item/5775a608bd670d33b0351da7.html $# 是传给脚本的参数个数 $@ 是传给脚本的所有参数的列表 ...
- MySQL系列教程(二)
mySQL执行计划 语法 explain <sql语句> 例如: explain select * from t3 where id=3952602; explain输出解释 +---- ...