一、 ZK常用命令行操作
-
通过 ./zkCli.sh 打开zk的客户端进行命令行后台
-
ls 与 ls2 命令
- ls 指某一个路径下有哪些内容
- ls2 是 ls + stat结合的命令
-
get 与 stat 命令
cZxid: 创建之后zk为该结点分配的id
ctime:这个节点创建的时候的时间
mZxid:修改后结点的id
mtime:修改的时间
pZxid:子节点的id
dataVersion:当前节点数据的版本号,如果当前节点被修改了,那么版本号会+1
aclVersion:将当前节点的权限修改了,那个这个值就会 + 1
二、session的基本原理
-
客户端与服务端之间的连接存在会话
-
每个回话都会设置一个超时时间(心跳结束,session就过期了)
-
Session 过期,临时结点znode会被抛弃
-
心跳机制:客户端向服务端的ping包请求
1. create
命令——创建持久结点
2. create
命令——创建临时结点
如果想要创建一个临时znode结点,那么命令行应该为:
如果get之后的 ephemeralOwner的值为ox后面有很多数字,那么说明该结点是临时结点
3. create
命令——创建一个顺序节点
三、set
与 delete
命令的使用
1. set
2. delete
四、 zk特性——watcher机制
- 针对每一个节点的操作,都会有一个监督者 (watcher)。watcher是一个事件。
- 当监控的某个对象znode发生了变化,则触发watcher
- zk中的watcher是一次性的,触发后立即销毁
- 父节点,子节点 增删改都能触发器 watcher
- 针对不同类型的操作,触发的watcher事件也不同:
- 子节点创建事件
- 子节点删除事件
- 子节点数据变化事件
1. watcher 父节点
- watcher事件类型
- 创建父节点触发:
NodeCreated
- 修改父节点数据触发:
NodeDataChanged
- 删除父节点触发:
NodeDeleted
- 创建父节点触发:
当结点的数据发生变化事件:触发的类型type :NodeDataChanged
当结点被删除的时候,触发的类型type:NodeDeleted
。同时注意,如果当前节点下面有子节点,不能直接使用delete将父节点删除
2. Watcher子节点
先给父节点创建一个watch时间,然后在父节点下面增加一个子节点abc,这个时候会提醒一个事件:NodeChildrenChanged
在这里不管是删除子节点还是创建子节点,触发的watcher类型都是:NodeChildrenChanged
3. watcher 使用场景
- 统一资源配置
五、ACL权限
- 针对结点可以设置相关读写等权限,目的为了保证数据安全性
- 权限permissions可以指定不同的权限范围以及角色
5.1 ACL命令行
- getAcl:获取某个结点的acl权限信息
- setAcl:设置某个结点的acl权限信息
- addauth:输入认证授权信息,注册时输入明文密码(登录)但是在ZK的系统里,密码是以加密的形式存在的
我们创建一个结点/imooc/abc 那么zk会给他一个默认的权限他的默认权限是:
5.2 ACL的构成
5.3 Acl命令行world讲解
当我们创建一个结点/imooc/abc 那么zk会给他一个默认的权限他的默认权限是:
给当前节点设置Acl权限, crwa指的是当前节点拥有的权限,包括:创建、读、写和auth权限,没有删除权限。
因为我们没有删除权限,所以在删除delete的时候,会报错误是:Authentication is not valid
5.4 Acl命令行auth与digest讲解
因为没有登录和注册,所以报错了。因此需要先注册一下,再添加Acl权限
5.5 acl命令行ip讲解
这种模式在讲解java客户端的时候再具体讲解
5.6 acl之super超级管理员
设置超级管理员需要在zk的bin文件下的./zkServer.sh 中设置上图中的信息。即:
"-Dzookeeper.DigestAuthenticationProvider.superDigest=username:OGsE6D6JzQHHMHkI27maIeu0Rc0="
设置完后,需要重启zk服务器。
然后再访问之前没有权限访问的结点,但是在访问之前需要先登录超级管理员。
当没有登录超级管理员的时候,访问/names/ip
结点的时候会出现如下问题:
当登录了超级管理员之后,可以访问/names/ip
结点
六、 ACL的常用使用场景
- 开发 / 测试环境分离,开发者无权操作测试库结点,只能看。一般运维会有一个超级管理员权限,即super
- 生产环境上控制指定ip的服务可以访问相关结点,防止混乱
- 但是有的时候有一些机子的ip是动态ip,就需要经常修改ip,这是一个缺点。
七、ZK四字命令 Four Letter Words
-
zk可以通过它自身提供的简写命令来和服务器进行交互
-
需要使用到nc命令,安装:yum install nc
-
echo [commond] | nc [ip] [port]
-
[stat]
- 查看zk的状态信息,以及是否mode
-
[ruok]
- 查看当前zkserver是否启动,返回 imok
-
[dump]
- 列出未经处理的会话和临时结点
- [conf]
- 查看服务器配置
- [cons]
- 展示连接到服务器的客户端信息
- [envi]
- 环境变量
- [mntr]
- 监控zk健康信息
-
[wchs]
- 展示watch的信息
-
[wchc] 与 [wchp]
session
与watch
及path
与watch
信息
默认的是zk中没有启用wchc的。如果想使用这两个命令就需要进行配置。
配置的文件位置在 /conf/zoo.cfg,在这个文件的最后添加: