前面我们已经对watcher进行基本命令操作和了解,我们回顾下
watcher机制
-
针对每个节点的操作,都会有一个监督者 ->wathcer
-
当监控的某个对象(znode)发生了变化,则出发watcher事件
-
zk中的watcher是一次性的,触发后立即销毁
-
父节点,子节点增删改都能触发器watcher
-
针对不同类型的操作,触发的watcher事件也不同:
- (子)节点创建事件
- (子)节点删除事件
- (子)节点数据变化事件
-
get path [watch]设置watcher
-
父节点增删改操作触发watcher
-
子节点增删改操作触发watcher
watcher使用场景
- 统一资源配置,通过watch得知更新来更新其他客户端配置
session 的基本原理
- 客户端与服务端之间的连接存在会话
- 每个会话都可以设置一个超时时间
- 心跳结束,session则过期
- Session过期,则临时节点znode会被抛弃
- 心跳机制:客户端想服务端的Ping包请求
ACL(access control lists)权限控制
- 设置相关读写等权限,可以保障数据安全性
- 通过permissions权限来指定不同的权限范围和角色
ACL的构成
- zk的acl通过[scheme?permissions]来构成权限列表
scheme:代表采用的某种权限机制
id:代表允许访问的用户
permissions:权限组合字符串
- scheme
- world:world下只有一个id,即一个用户,也就是任何人,world:anyone:[permissions]
- auth:代表认证登录,需要注册用户有权限就可以,auth:user:password:[permissions]
- digest:需要对密码加密才能访问,digest:username:BASE64(SHA1(password)):[permissions]
- auth是明文,digest是密文
- ip:设置为ip指定的ip地址,此时限制ip进行访问,ip:192.168.1.1:[permissions]
- super:代表超级管理员,拥有所有权限
- permissions(字符串缩写crdwa)
- create:创建子节点
- read:获取节点/子节点
- write:设置节点数据
- delete:删除子节点
- admin:设置权限
auth读取会以第一次的值为准
ACL常用命令
[zk: localhost:2181(CONNECTED) 24] create /chandler/abc aa
WATCHER::
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/chandler
Created /chandler/abc
[zk: localhost:2181(CONNECTED) 25] getAcl /chandler/abc
'world,'anyone
: cdrwa
[zk: localhost:2181(CONNECTED) 26] setAcl /chandler/abc world:anyone:dra
cZxid = 0xe
ctime = Sun Jan 13 23:09:49 CST 2019
mZxid = 0xe
mtime = Sun Jan 13 23:09:49 CST 2019
pZxid = 0xe
cversion = 0
dataVersion = 0
aclVersion = 1
ephemeralOwner = 0x0
dataLength = 2
numChildren = 0
[zk: localhost:2181(CONNECTED) 27] getAcl /chandler/abc
'world,'anyone
: dra
- addauth:输入认证授权信息,注册时输入明文密码,
- world:anyone:cdrwa
- Super:1.修改zkServer.sh 增加super管理员. 2.重启zkServer.sh
搜索nohup
nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" "-Dzookeeper.DigestAuthenticationProvider.superDigest=chandler:密文密码"\
ACL的常用使用场景
- 开发/测试环境分离,开发者无权操作测试库的节点,只能看
- 生产环境上控制指定Ip的服务可以访问相关节点,防止混乱,(ip动态改变可能需要手动改,比较麻烦)
zk四字命令
- 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信息(需要在cfg文件配置 4lw.commands.whitelist=*)
其他更多命令可以去官网查看