集群要提供高可用性就必须要有某种机制去保证,常用的机制为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机制的更多相关文章

  1. tomcat集群机制剖析及其生产部署选型

    为什么要使用集群? 为什么要使用集群?主要有两方面原因:一是对于一些核心系统要求长期不能中断服务,为了提供高可用性我们需要由多台机器组成的集群:另外一方面,随着访问量越来越大且业务逻辑越来越复杂,单台 ...

  2. Tomcat集群应用部署的实现机制

    集群应用部署是一个很重要的应用场景,设想一下如果没有集群应用部署功能,每当我们发布应用时都要登陆每台机器对每个tomcat实例进行部署,这些工作量都是繁杂且重复的,而对于进步青年的程序员来说是不能容忍 ...

  3. Tomcat集群如何同步会话

    Tocmat集群中最重要的交换信息就是会话消息,对某个tomcat实例某会话做的更改要同步到集群其他tomcat实例的该会话对象,这样才能保证集群所有实例的会话数据一致.在tribes组件的基础上完成 ...

  4. tomcat集群实现源码级别剖析

    随着互联网快速发展,各种各样供外部访问的系统越来越多且访问量越来越大,以前Web容器可以包揽接收-逻辑处理-响应整个请求生命周期的工作,现在为了构建让更多用户访问更强大的系统,人们通过不断地业务解耦. ...

  5. 实战Apache+Tomcat集群和负载均衡

    实战Apache+Tomcat集群和负载均衡 目录 1.    什么是J2EE集群... 3 1.1.     序言... 3 1.2.     基本术语... 3 伸缩性(Scalability): ...

  6. 161028、Nginx负载均衡实现tomcat集群方案简要小结

    重点两部分:一.负载均衡二.tomcat集群 所谓tomcat集群,就是可以向外提供并行服务的多台机器,任何一台服务器宕机,其它服务器可以替代它向外提供服务,而不影响用户访问. Nginx是一个常用的 ...

  7. 【原创】Tomcat集群环境下对session进行外部缓存的方法(1)

    BJJC网改版, 计划将应用部署在tomcat集群上,集群的部署方案为Apache+Tomcat6,连接件为mod_jk,其中开启了session复制和粘性session.计划节点数为3个. 到这,或 ...

  8. linux+apache+mod_Jk+tomcat实现tomcat集群

    最近一段时间一直在研究实现apache + jk_mod + tomcat实现负载均衡,起初负载均衡算是配置蛮顺利的,但是到了配置tomcat集群时所有配置都没有问题,但是tomcat日志中一直提示没 ...

  9. 使用Nginx实现Tomcat集群负载均衡

    概述 要解决的问题 环境准备以及问题解决思路 配置 测试 小结 一.概述 使用Nginx主要是来解决高并发情况下的负载均衡问题. 二.要解决的问题 1.最主要是负载均衡请求分发. 2.文件上传功能,只 ...

随机推荐

  1. 【Codeforces AIM Tech Round 4 (Div. 2) C】

    ·将排序限制于子序列中,又可以说明什么呢? C. Sorting by Subsequences ·英文题,述大意:       输入一个长度为n的无重复元素的序列{a1,a2……an}(1<= ...

  2. Mac下Git安装及配置

    Mac下: 1.下载git版本并安装 运行终端 查看git版本: bogon:~ yan$ git --version git version 2.16.3 配置gitconfig文件 vim ~/. ...

  3. Android通过聚合数据API实现天气预报

    使用聚合数据的API 聚合数据地址:https://www.juhe.cn/ 在数据服务->生活常用->全国天气预报,申请天气预报的API使用的KEY 保存请求示例的地址,把您申请的KEY ...

  4. AspNetCoreApi 跨域处理

    AspNetCoreApi 跨域处理 如果咱们有处理过MV5 跨域问题这个问题也不大. (1)为什么会出现跨域问题:  浏览器安全限制了前端脚本跨站点的访问资源,所以在调用WebApi 接口时不能成功 ...

  5. iOS核心面试题

    1,请简述你对协议的理解?    protocol无论是在那个领域都是一种约束,规范.在OC中的协议主要用于在各个类之间进行回调传值. 协议有 委托方,代理方, 委托方是协议的制定者,需要声明协议的方 ...

  6. JS的事件模型

    之前对事件模型还是比较清楚的,许多概念都清晰映射在脑海中.工作之后,一方面使用的局限性,二是习惯于用框架中的各种事件监听方式,简单即方便,久而久之,事件的一些概念开始淡出记忆中,就像我现在已经开始淡忘 ...

  7. find 命令查找文件,文件夹

    查找文件 find / -name httpd.conf 查找文件夹 find / -name "*1526*" -type d, 其中双引号里的东西表示文件夹名字包含" ...

  8. Android颜色配置器

    一.Android Color设置 1.在xml文件中 想设置颜色直接设置background的属性或者其他的color属性.随便设置一个颜色如#000,再点击左边的颜色方块,弹出颜色选择器选择颜色 ...

  9. Struts2 转换器

    转换器 从一个 HTML 表单到一个 Action 对象,类型转换是从字符串到非字符串 Http 没有 "类型" 的概念,每一项表单的输入只可能是一个字符串或一个字符串数组,在服务 ...

  10. MLDS笔记:Optimization

    当函数空间覆盖到目标函数时,如何通过优化调整神经网络的参数找到这个目标函数呢? 深度学习中的损失函数是非凸的,非凸优化是个NP-hard问题,如何通过梯度下降来解决这个问题呢? 注意,不同于learn ...