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.文件上传功能,只 ...
随机推荐
- Begin again
新的一周开始. 写下这篇东西, 用来表明我还在奋斗的路上, 那么,加油咯.
- git日常使用经验积累
1 git merge origin/develop 将远程分支合并到本地,一般先执行合并,解决冲突,然后再git commit合入新建的分支,推送到远程分支里面,最后码云上找pl pull requ ...
- Python中文件的操作
文件的操作介绍 文件打开的方法 主要有两种: no with 格式:open(file, mode='r', buffering=-1, encoding=None, errors=None, new ...
- C语言程序设计第四次作业——选择结构(二)
(一)改错题 错误信息: 错误原因:第13行sqrt数学函数缺少")",导致编译器无法将括号正确配对 改正方法:补齐缺少的")" 错误信息: 错误原因:if语句 ...
- 在 Mac OS X 上安装 TensorFlow
在 Mac OS X 上安装 TensorFlow 这个文档说明了如何在 Mac OS X 上安装 TensorFlow. 注意:从 1.2 版本开始,在 Mac OS X 上 TensorFlow ...
- Linux系统之TroubleShooting(故障排除)(转)
尽管Linux系统非常强大,稳定,但是我们在使用过程当中,如果人为操作不当,仍然会影响系统,甚至可能使得系统无法开机,无法运行服务等等各种问题.那么这篇博文就总结一下一些常见的故障排除方法,但是不可能 ...
- 在Spring Boot中使用Spring Security实现权限控制
丢代码地址 https://gitee.com/a247292980/spring-security 再丢pom.xml <properties> <project.build.so ...
- 安装Leanote极客范的云笔记
前言 在这个互联网知识呈爆炸增长的时代,作为一个程序员要掌握的知识越来越多,然再好的记性也不如烂笔头,有了笔记我们就是可以时常扒拉扒拉以前的知识,顺便可以整理下自己的知识体系. 如今市面上云笔记产品, ...
- Struts2 转换器
转换器 从一个 HTML 表单到一个 Action 对象,类型转换是从字符串到非字符串 Http 没有 "类型" 的概念,每一项表单的输入只可能是一个字符串或一个字符串数组,在服务 ...
- 更新git源以便安装最新版本
sudo add-apt-repository ppa:git-core/ppa sudo apt-get update