Zookeeper
一、概述
二、作用
(1)统一命名服务:每个节点存储一个服务。如dubbo服务注册中心
(2)配置管理:一处更新处处更新。

(3)集群管理:如Hadoop分布式集群管理
(4)分布式消息同步和协调机制
(5)负载均衡
(6)对dubbo的支持
三、Zookeeper配置文件说明
# The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=/tmp/zookeeper # the port at which the clients will connect clientPort=2181
(1)tickTime:通信心跳数,Zookeeper服务心跳时间,单位毫秒。Zookeeper使用的基本时间,服务器之间或客户端之间维持心跳的时间间隔。每个tickTime时间都会发送一个心跳。
用于心跳机制,并设置最小session超时时间为两倍心跳时间(session最小超时时间=2*tickTime)
(2)initLimit:leader和follower初始通信时限。集群中follower服务器与leader领导服务器之间初始连接时能容忍的最多心跳数(tickTime的数量),用来限定集群中Zookeeper服务器连接到leader的时限
(3)syncLimit:leader和follower同步通信时限。集群中leader与follower之间最大响应时间单位。如果响应时间超过syncLimit * tickTime,leader认为follower死掉,从服务器列表中删除该follower
四、Zookeeper的使用
(一)ZNode节点介绍:Znode=path+nodeValue+Stat
1. Zookeeper的数据模型整体上可以看作是一棵树,每个节点成为ZNode,默认存储1MB数据,每个ZNode都有其路径唯一标识。

2. 数据模型
[zk: localhost:2181(CONNECTED) 3] get -s /testNode sam1 cZxid = 0x4 ctime = Fri Nov 06 21:26:03 EST 2020 mZxid = 0x8 mtime = Fri Nov 06 21:40:41 EST 2020 pZxid = 0x4 cversion = 0 dataVersion = 3 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 4 numChildren = 0
每次修改Zookeeper状态都会收到唯一的一个zxid形式的时间戳,也就是Zookeeper的事务ID。

3. 节点类型
- 持久节点:默认值
- 持久化目录节点:客户端与zookeeper断开连接后,该节点依旧存在
- 持久化序号目录节点:客户端与zookeeper断开连接后,该节点依旧存在,节点名称按顺序编号
- 临时节点:指定参数-e
- 临时目录节点:客户端与zookeeper断开连接后,该节点被删除
- 临时序号目录节点:客户端与zookeeper断开连接后,该节点被删除,节点名称按顺序编号
4. 四字命令
公式:echo 四字命令 | nc 主机IP zookeeper 端口
ruok和envi比较常用



(二)常用命令:
#ls按日期排序
ls -ltr
#查看是否启动
ps -ef | grep [z]ookeeper
#测试是否启动成功
echo ruok | nc 127.0.0.1 2181
echo stat | nc 127.0.0.1 2181
#启动、重启、关闭zookeeper,首先要进入bin目录下
./zkServer.sh start/restart/stop
#连接客户端
./zkCli.sh
#退出客户端
quit
#连接客户端后,可以使用帮助命令
help
#常用命令 help ls ls2 stat set get create delete rmr
create /testNode linxw //不能重复create
get /testNode
set /testNode xwd //服务注册

(3)Zookeeper会话
客户端使用某种语言绑定创建一个到服务的句柄时,就建立了一个ZooKeeper会话。会话创建后,句柄处于CONNECTING状态,客户端库会试图连接到组成ZooKeeper服务的某个服务器;连接成功则进入到CONNECTED状态。通常操作中句柄将处于这两个状态之一。如果发生不可恢复的错误,如会话过期、身份鉴定失败,或者应用显式关闭,则句柄进入到CLOSED状态。
(4)Zookeeper通知机制:客户端注册监听它关系的目录节点,当目录节点发生变化(数据修改,被删除,子目录节点增加删除)时,zookeeper会通知客户端。
(5)Zookeeper事件:
- 一次触发:当数据发生变化时,zkserver向客户端发送一次性动作watch,即触发一次不再有效。要持续watch时,需要客户端重新设置watcher。
- 发往服务端:watcher是异步发往客户端的,zookeeper提供一个顺序保证:在看到watch事件之前绝不会看到变化。这样客户端看到是一致性的顺序。
- 为数据设置watch:节点有不同的改动方式,可认为zookeeper维护两个观察列表:数据观察和子节点观察
- 时序性和一致性:

浙公网安备 33010602011771号