zookeeper会话超时
1、会话概述
在ZooKeeper中,客户端和服务端建立连接后,会话随之建立,生成一个全局唯一的会话ID(Session ID)。服务器和客户端之间维持的是一个长连接,在SESSION_TIMEOUT时间内,服务器会确定客户端是否正常连接(客户端会定时向服务器发送heart_beat,服务器重置下次SESSION_TIMEOUT时间)。因此,在正常情况下,Session一直有效,并且ZK集群所有机器上都保存这个Session信息。在出现网络或其它问题情况下(例如客户端所连接的那台ZK机器挂了,或是其它原因的网络闪断),客户端与当前连接的那台服务器之间连接断了,这个时候客户端会主动在地址列表(实例化ZK对象的时候传入构造方法的那个参数connectString)中选择新的地址进行连接。
2、连接断开
好了,上面基本就是服务器与客户端之间维持会话的过程了。在这个过程中,用户可能会看到两类异常CONNECTIONLOSS(连接断开)和SESSIONEXPIRED(Session过期)。连接断开(CONNECTIONLOSS)一般发生在网络的闪断或是客户端所连接的服务器挂机的时候,这种情况下,ZooKeeper客户端自己会首先感知到这个异常,具体逻辑是在如下方法中触发的:一种场景是Server服务器挂了,这个时候,ZK客户端首选会捕获异常
所以,现在对于“连接断开”这个过程就一目了然了,核心流程如下: ZK客户端捕获“连接断开”异常 ——> 获取一个新的ZK地址 ——> 尝试连接
在这个流程中,我们可以发现,整个过程不需要开发者额外的程序介入,都是ZK客户端自己会进行的,并且,使用的会话ID都是同一个,所以结论就是:发生CONNECTIONLOSS的情况,应用不需要做什么事情,等待ZK客户端建立新的连接即可。
3、会话超时
SESSIONEXPIRED发生在上面蓝色文字部分,这个通常是ZK客户端与服务器的连接断了,试图连接上新的ZK机器,但是这个过程如果耗时过长,超过了SESSION_TIMEOUT 后还没有成功连接上服务器,那么服务器认为这个Session已经结束了(服务器无法确认是因为其它异常原因还是客户端主动结束会话),由于在ZK中,很多数据和状态都是和会话绑定的,一旦会话失效,那么ZK就开始清除和这个会话有关的信息,包括这个会话创建的临时节点和注册的所有Watcher。在这之后,由于网络恢复后,客户端可能会重新连接上服务器,但是很不幸,服务器会告诉客户端一个异常:SESSIONEXPIRED(会话过期)。此时客户端的状态变成 CLOSED状态,应用要做的事情就是的看自己应用的复杂程序了,要重新实例zookeeper对象,然后重新操作所有临时数据(包括临时节点和注册Watcher),总之,会话超时在ZK使用过程中是真实存在的。
所以这里也简单总结下,一旦发生会话超时,那么存储在ZK上的所有临时数据与注册的订阅者都会被移除,此时需要重新创建一个ZooKeeper客户端实例,需要自己编码做一些额外的处理。
4、会话时间(Session Time)
在《ZooKeeper API 使用》一文中已经提到,在实例化一个ZK客户端的时候,需要设置一个会话的超时时间。这里需要注意的一点是,客户端并不是可以随意设置这个会话超时时间,在ZK服务器端对会话超时时间是有限制的,主要是minSessionTimeout和maxSessionTimeout这两个参数设置的。(详细查看这个文章《ZooKeeper管理员指南》)Session超时时间限制,如果客户端设置的超时时间不在这个范围,那么会被强制设置为最大或最小时间。 默认的Session超时时间是在2 * tickTime ~ 20 * tickTime。所以,如果应用对于这个会话超时时间有特殊的需求的话,一定要和ZK管理员沟通好,确认好服务端是否设置了对会话时间的限制。
zookeeper会话超时相关推荐
- ZooKeeper 会话超时
1.会话概述 在ZooKeeper中,客户端和服务端建立连接后,会话随之建立,生成一个全局唯一的会话ID(Session ID).服务器和客户端之间维持的是一个长连接,在SESSION_TIMEOUT ...
- HMaster因zookeeper连接超时自杀
缘由 hbase在上线一段时间后,发现HMaster经常会自杀挂掉,具体报错如下 报错 2019-06-14 11:24:07,242 WARN [master/ms-fibo-test-datase ...
- oracle会话超时,Oracle EBS控制会话时间及超时
1. ICX:会话超时 ICX:Session Timeout 定义系统保持一个非活动的用户会话的超时间隔.默认为1800000毫秒(30分钟). ...
- jsf标签p:ajax_JSF AJAX请求的会话超时处理
jsf标签<p:ajax> JSF AJAX请求的会话超时处理 当我们使用AJAX行为开发JSF应用程序时,在处理Ajax请求的超时情况时,我们可能会遇到问题. 例如,如果您使用的是基于J ...
- Spring Java配置:会话超时
当您可以使用基于Java的配置开发Spring应用程序时,我们生活在一个美好的时光. 不再有多余的XML代码,只有纯Java代码. 在本文中,我想讨论一个关于Spring应用程序中会话管理的热门话题. ...
- 如何在Play Framework 2中实现会话超时
如果您遵循Play Framework 2指南以实施身份验证: http://www.playframework.com/doc-m-e-t-t-i o / n..2..2..2 / Jac agéi ...
- JSF AJAX请求的会话超时处理
JSF AJAX请求的会话超时处理 当我们使用AJAX行为开发JSF应用程序时,在处理Ajax请求超时场景时可能会遇到问题. 例如,如果您使用的是基于J2EE表单的身份验证,则会话超时后应将正常请求重 ...
- hbase 查询设置超时_hbase master挂掉-zookeeper连接超时原因
并行运行hbase删表,建表操作,多个表多个region,导致hbase挂掉.查看日志: 从日志中可以看出GC时间过长导致zookeeper连接超时,master退出.(是master退出而不是reg ...
- java redirect 超时_会话超时后,Spring安全性不会重定向到上次请求的页面登录
首先启用并发会话控制支持是在以下位置添加以下侦听器web.xml: org.springframework.security.web.session.HttpSessionEventPublisher ...
- java和ajax超时_java – 如何在不重置tomcat的会话超时的情况下执行经过身份验证的AJAX请求?...
我会使用Grails过滤器,它会执行类似于The-MeLLeR提议的内容,而不会在所有会话中进行不必要的循环: class AjaxTimeoutFilters { int sessionTimeou ...
最新文章
- linux下添加路由的方法
- Python-logging报错解决:UnicodeEncodeError: 'gbk' codec can't encode character '\u' in position: illegal
- Spring-AOP 使用@AspectJ
- java 三角依次递增在递减_java中用for循环怎样打印三角行啊,主要是不理解什么情况外层循环递增什么时候递减,如等腰三角形...
- sql 找到最近的值_数据分析——SQL查询(常用函数)
- Linq to SQL学习
- SendMessage函数的常用消息及其应用大全
- 普通筛法时间界的证明
- 鸿蒙系统开发资金,华为终于动手,将拿出超十亿资金,开发者们有福了
- 将误删的Downloads文件夹快速恢复教程
- nacos实现配置中心,对比config
- 【UE4】特效之 Particle System 详解(二)—— 特效池
- matlab半导体器件仿真,半导体软件 - 仿真模拟半导体器件的物理场
- 【UAV】串级 PID 控制原理及应用
- Controller中使用swagger注解的正确姿势
- Cocos2d-x 整理 SDK,易接流程(写给自己看的
- 中华石杉-- --分布式服务框架Dubbo的笔记
- 一、Docker 容器
- C++ 地图涂色问题 栈递归
- ZOJ 3939。规律题