拓冰建站拓冰建站
首页 / 资讯中心 / 正文

理解zookeeper session机制 临时节点

zk里面另外一个重要的知识就是他的一个session机制。session是客户端和服务端去建立连接的客户端和服务端去建立连接的时候就建立了一个sessionzk里面也是一样的道理。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这个字段有值说明这个是一个临时节点。如果是按ctrlc去断开客户端和服务端的连接然后再快速的去连接上这个服务器那么xdclass这个数据节点还会存在呢Ctrlc马上退出再连接上这个时候xdclass节点还是在这里那这是为什么呢session有个过期的时间是客户端和服务端有个心跳包的机制去判断这个客户端是否存活连上了之后再去做一个快速的退出这个时候还没有超过这个超时的时间。再快速进行启动的时候那么启动的时候和他之间的连接还是可以保留着的如果退出比较长的时间这个时候客户端和服务端比较长的时间没有和服务端进行交互的话。那么服务端就会以为这个客户端已经死亡了。当session过期的时候那么session所创建的临时节点都会被抛弃掉。之前创建的xdclass节点已经不在了如果想要快速的看到这种情况怎么办手动去关闭这个连接。那么就关闭这个session了再上去看到节点已经没有了。手动关闭那么session就会断开。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门