深入理解zookeeper session机制

zk里面另外一个重要的知识,就是他的一个session机制。

session是客户端和服务端去建立连接的,客户端和服务端去建立连接的时候就建立了一个session,zk里面也是一样的道理。

zk客户端和服务端去创建会话的时候是由客户端去进行创建,一旦去创建了,开始的状态是connecting,以这个状态去启动。一旦启动之后这个客户端就会去尝试连接zk服务端。

如果是集群的话那么会尝试连接其中的一个服务器。如果成功建立连接的时候这个时候状态就会变为connected,也就是建立连接的意思。

那么在正常的操作期间,这个session状态就处于connecting或者是connected,这两种状态的一种。

如果某个时刻发生了某一些不可恢复的错误,比如session过期了,或者去连接的时候身份验证失败了,或者程序去关闭这个链接的时候,那么状态就会变为close。

在zk里面session是可以设置超时的时间的,比如设置超时的时间是60s,如果此时客户端和服务端没有做任何的交互,这个时候就会认为这个时候session的过期,它就会断开这个链接。

在平常的状态下,我们这个客户端和这个服务端之间通过心跳包的机制。

现在有多个客户端,这个客户端和服务端去交互的时候可以通过心跳包去交互。心跳包主要去告诉服务端我还活着,就类比于人的心跳,有心跳就代表还活着。

如果客户端很久没有告诉服务端我这个客户端还活着,那么服务端就会判定客户端已经是死亡的一个状态,那么客户端和服务端之间的链接就会被中断。

说白了心跳包的逻辑就是ping的机制,只不过是客户端隔段时间去发送ping包去给服务端,告诉服务端自己还是存活着的一个状态。

关于session还有另外一个重要的地方,当session过期的时候,这个session所创建的所有临时的节点,都会被抛弃掉。

现在是尝试去创建一个连接,也就是也connecting的状态去启动,直到它连上了之后就变成了connected的状态。

连接上去了可以看到没有节点,,只有一个connected的节点。

现在去创建一个临时节点,那么使用-e这个参数,加上相应的path,后面跟着的是内容。

这样这个节点就创建完成了,也可以通过state命令去查看这个节点的数据。

epheme这个字段有值说明这个是一个临时节点。如果是按ctrl+c去断开客户端和服务端的连接,然后再快速的去连接上这个服务器,那么xdclass这个数据节点还会存在呢?

Ctrl+c马上退出再连接上,这个时候xdclass节点还是在这里,那这是为什么呢?

session有个过期的时间,是客户端和服务端有个心跳包的机制去判断这个客户端是否存活,连上了之后再去做一个快速的退出,这个时候还没有超过这个超时的时间。

再快速进行启动的时候,那么启动的时候和他之间的连接还是可以保留着的,如果退出比较长的时间,这个时候客户端和服务端比较长的时间没有和服务端进行交互的话。那么服务端就会以为这个客户端已经死亡了。

当session过期的时候,那么session所创建的临时节点都会被抛弃掉。

之前创建的xdclass节点已经不在了,如果想要快速的看到这种情况怎么办?

手动去关闭这个连接。

那么就关闭这个session了,再上去看到节点已经没有了。

手动关闭,那么session就会断开。

相关推荐
BUTCHER55 小时前
【漏洞扫描】ZooKeeper 未授权访问
分布式·zookeeper·云原生
wtrees_松阳7 小时前
分布式锁实战指南:Redis、ZooKeeper、etcd 三大方案深度对比与避坑指南(附代码)
redis·分布式·zookeeper
川211 天前
Nacos和ZooKeeper的选型
分布式·zookeeper·云原生
醉舞经阁半卷书11 天前
zookeeper服务端配置
网络·分布式·zookeeper
仪***沿2 天前
基于MATLAB GUI的图像随机加密策略与实现:探索傅里叶、Arnold变换及图像分割技术在...
zookeeper
ssxueyi4 天前
大数据技术之Zookeeper介绍、部署
大数据·zookeeper·debian
音符犹如代码4 天前
ZooKeeper 实战指南:从入门到场景解析
分布式·微服务·zookeeper·云原生·中间件·架构
富士康质检员张全蛋4 天前
Zookeeper监控指标详解:Prometheus+Granfa实战
zookeeper
yumgpkpm5 天前
Iceberg在Cloudera CDP集群详细操作步骤
大数据·人工智能·hive·zookeeper·spark·开源·cloudera