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.文件上传功能,只 ...
随机推荐
- JS多个对象添加到一个对象中
var obj1 = {"qq":10}; var obj2={"mm":2,"nn":3}; var obj3={"xx&quo ...
- JSON.NET的Self referencing loop detected with type的原因以及解决办法
模型中有循环引用是很常见的.例如,以下模型显示双向导航属性: : public class Category : { : public Category() : { : Products = new ...
- asp.net用户控件引用
<%@ Register Src="~/_module/IndexChannelHead.ascx" TagName="tn" TagPrefix=&qu ...
- HTMLParser使用简介
HTMLParser具有小巧,快速的优点,缺点是相关文档比较少(英文的也少),很多功能需要自己摸索.对于初学者还是要费一些功夫的,而一旦上手以后,会发现HTMLParser的结构设计很巧妙,非常实用, ...
- 在循环列表的富文本里摘出每个item的img标签内容(适合vue渲染)
昨天在做公司项目的社区动态内容.后台接口返回的数据是数组套对象,对象里有富文本,然后需要摘出富文本里的img标签在列表里分开渲染(即图片九宫格样式).最终效果如图: 这个是后盾接口返回的json数据 ...
- Kafka生产者-向Kafka中写入数据
(1)生产者概览 (1)不同的应用场景对消息有不同的需求,即是否允许消息丢失.重复.延迟以及吞吐量的要求.不同场景对Kafka生产者的API使用和配置会有直接的影响. 例子1:信用卡事务处理系统,不允 ...
- java中equal方法总结
场景:本周在完成一个公司业务功能时,在判断是否为代叫单时调用了equal方法: PublishOrderType.HELP_ORDER.equals(valetOrderExtraInfoDO.get ...
- Go 语言环境安装
Go 语言支持以下系统: Linux FreeBSD Mac OS X(也称为 Darwin) Window 安装包下载地址为:https://golang.org/dl/. 各个系统对应的包名: 操 ...
- postgresql跨服务器复制数据库
假设名为dbname数据库需要从A服务器拷贝到B服务器 接收服务器B postgres用户 需先重置B服务器postgres系统用户的密码,使之与数据库用户postgres一致: passwd -d ...
- Linux基础指令
Linux基础指令 只写了最简单的一些文件操作,基本没有带参数 查看当前目录 pwd 跳转到某路径 cd 查看当前目录下的文件 ls ls -l // -l 查看详细信息 打开当前所在文件夹 open ...