Zookeeper session 基本原理

客户端与服务端之间的连接是基于 TCP 长连接,client 端连接 server 端默认的 2181 端口,也就是 session 会话。

从第一次连接建立开始,客户端开始会话的生命周期,客户端向服务端的ping包请求,每个会话都可以设置一个超时时间。

Session 的状态
下面介绍几个重要的状态:

  1. connecting:连接中,session 一旦建立,状态就是 connecting 状态,时间很短。
  2. connected:已连接,连接成功之后的状态。
  3. closed:已关闭,发生在 session 过期,一般由于网络故障客户端重连失败,服务器宕机或者客户端主动断开。

会话超时管理(分桶策略+会话激活)
zookeeper 的 leader 服务器再运行期间定时进行会话超时检查,时间间隔是 ExpirationInterval,单位是毫秒,默认值是 tickTime,每隔 tickTime 进行一次会话超时检查。

在 zookeeper 运行过程中,客户端会在会话超时过期范围内向服务器发送请求(包括读和写)或者 ping 请求,俗称心跳检测完成会话激活,从而来保持会话的有效性.

Zookeeper 四字命令

zookeeper 支持某些特定的四字命令与其交互,用户获取 zookeeper 服务的当前状态及相关信息,用户在客户端可以通过 telenet 或者 nc(netcat) 向 zookeeper 提交相应的命令。

yum install nc                # centos、redhat

zookeeper 会话失效 zookeeper session closed_客户端

四字命令格式:

echo [command] | nc [ip] [port]

ZooKeeper 常用四字命令主要如下:

zookeeper 会话失效 zookeeper session closed_客户端_02

 

四字命令使用

stat 命令

zookeeper 会话失效 zookeeper session closed_zookeeper 会话失效_03

ruok 命令

ruok 命令用于查看当前 zkserver 是否启动,若返回 imok 表示正常。实例如下:

zookeeper 会话失效 zookeeper session closed_zookeeper_04

 

dump 命令

dump 命令用于列出未经处理的会话和临时节点。实例如下:

zookeeper 会话失效 zookeeper session closed_客户端_05

 

conf 命令

conf 命令用于查看服务器配置。实例如下:

zookeeper 会话失效 zookeeper session closed_zookeeper_06

 

cons 命令

cons 命令用于展示连接到服务器的客户端信息。实例如下:

zookeeper 会话失效 zookeeper session closed_客户端_07

 

Zookeeper 节点特性

1、同一级节点 key 名称是唯一的

zookeeper 会话失效 zookeeper session closed_zookeeper_08

2、创建节点时,必须要带上全路径

zookeeper 会话失效 zookeeper session closed_服务端_09

3、session 关闭,临时节点清除

zookeeper 会话失效 zookeeper session closed_zookeeper_10

4、watch 机制,监听节点变化

 

事件监听机制类似于观察者模式,watch 流程是客户端向服务端某个节点路径上注册一个 watcher,同时客户端也会存储特定的 watcher,当节点数据或子节点发生变化时,服务端通知客户端,客户端进行回调处理。特别注意:监听事件被单次触发后,事件就失效了。