一、下载
下载Zookeeper,版本是zookeeper-3.4.14
链接:https://pan.baidu.com/s/1FKGOQWyiVzqhTzcN47QkPQ
提取码:1234
解压到自己的硬盘下,比如
二、目录结构
bin 存放系统脚本(zkServer.cmd是服务器启动脚本,默认端口2181,zkCli.cmd是客户端启动脚本)
conf 存放配置文件
contrib zk附加功能支持
dist-maven maven仓库文件
docs zk文档
lib 依赖的第三方库
recipes 经典场景样例代码
src zk源码
三、概念
常用概念:会话、数据节点,版本,Watcher,ACL 权限控制,集群角色
3.1 会话
客户端与服务端的一次会话连接,本质是TCP长连接,通过会话可以进行心跳检测和数据传输
Zk客户端和服务端成功连接后,就创建了一次会话,ZK 会话在整个运行期间的生命周期中,会在不同的会话状态之间切换,这些状态包括: CONNECTING、CONNECTED、RECONNECTING、RECONNECTED、CLOSE
一旦客户端开始创建 Zookeeper 对象,那么客户端状态就会变成 CONNECTING 状态, 同时客户端开始尝试连接服务端,连接成功后,客户端状态变为 CONNECTED
通常情况下,由于断网或其他原因,客户端与服务端之间会出现断开情况,一旦碰到这种情况, Zookeeper 客户端会自动进行重连服务,同时客户端状态再次变成 CONNCTING,直到重新连上服务端后,状态又变为CONNECTED
一般来说,客户端的状态总是介于 CONNECTING 和CONNECTED 之间。但是,如果出现诸如会话超时、权限检查或是客户端主动退出程序等情况,客户端的状态就会直接变更为CLOSE 状态
3.2 数据节点
ZooKeeper 的视图结构和标准的 Unix 文件系统类似,其中每个节点称为“数据节点”或 ZNode, 每个znode 可以存储数据,还可以挂载子节点,因此可以称之为“树”
ZNode节点类型分为两种
临时 : Create -e /app “test1”
持久: Create /app “test2”
还有临时有序、持久有序,创建时加-s,顺序号为单调递增,不能指定
区别:
- 临时节点,客户端一段断开连接,zk就会删除临时节点
- 临时节点不能创建子节点
节点属性:
3.3 ACL权限控制
ACL机制,保障数据安全,表示为 scheme:id:permissions
scheme代表授权策略
id 代表用户
permissions 代表权限(如只读,读写,管理等)
3.3.1 scheme
world:默认方式,相当于全世界都能访问
auth:代表已经认证通过的用户(可以通过 addauth digest user:pwd 来添加授权用户)
digest:即用户名:密码这种方式认证,这也是业务系统中最常用的
ip:使用 Ip 地址认证
3.3.2 id
id 是验证模式,不同的 scheme,id 的值也不一样。
scheme为world时,anyone
scheme为auth时:username:password
scheme为digest时: username:BASE64(SHA1(password))
scheme为ip时:客户端的 ip 地址。
3.3.3 permissions
CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、删、改、查、管理权限,这 5 种权限
简写为 crwda(即:每个单词的首字符缩写)
CREATE(c):创建子节点的权限
DELETE(d):删除节点的权限
READ(r):读取节点数据的权限
WRITE(w):修改节点数据的权限ADMIN(a):设置子节点权限的权限
3.3.4 常用命令
getAcl 节点:获取节点的权限
setAcl 节点:设置节点权限
addauth 添加用户