浅谈Zookeeper的watch机制与ACL权限控制以及四字命令
Watcher机制
Watch机制主要有以下几个特点:
1)针对每个结点的操作,都会有一个监督者->watcher。
2)当监控的某个对象(znode)发生了变化,则触发watcher事件。
3)zk中的watcher是一次性的,触发后立即销毁。
4)父结点,子结点的增删改查都能够触发其watcher。
5)针对不同类型的操作,触发的watcher事件也不同。
1、(子)结点创建事件
2、(子)结点删除时间
3、(子)结点数据变化事件
Watcher命令行学习
1)通过get path [watch]设置watcher。
2)父结点 增删改操作触发watcher。
3)子结点 增删改操作触发watcher。
Watcher事件类型
一、针对父结点
1)创建父结点触发:NodeCreated
2)修改父结点数据触发:NodeDataChanged
3)删除父结点触发:NodeDeleted
二、针对子结点
1)ls为父结点设置watcher,创建子结点触发:NodeChildrenChanged
2)ls为父结点设置watcher,删除子结点触发:NodeChildrenChanged
3)ls为父结点设置watcher,修改子结点不触发事件。
必须要把它当成父结点来设置,而不是子结点,即:get /lamar/abc watch
。
watcher使用场景
以上介绍了watcher的大致操作方法,接下来是它的使用场景。
1)统一资源配置
如果第一个zk服务器修改了相应的配置信息,那么客户端可以通过触发watcher事件,统一修改集群中剩余的zk服务器,做统一的配置更新。
ACL(access control lists)权限控制
ACL权限控制的作用如下:
1)针对结点可以设置相关读写等权限,目的是为了保障数据安全性。
2)权限permissions可以指定不同的权限范围以及角色。
ACL命令行
getAcl
:获取某个结点的acl权限信息。
setAcl
:设置某个结点的acl权限信息。
addauth
:输入认证授权信息,注册时输入明文密码(登录),但是在zk的系统里,密码是以加密的形式存在的。
ACL的构成
一、主要形式
zk的acl通过[scheme:id:permissions]
来构成权限列表。
scheme:代表采用的某种权限机制
id:代表允许访问的用户
permissions:权限组合字符串
二、Scheme介绍
1)world:world下只有一个Id,即只有一个用户,也就是anyone,那么组合的写法就是world:anyone:[permissons]
2)auth:代表认证登录,需要注册用户有权限就可以,形式为auth:user:password:[permissions]
3)digest:需要对密码加密才能访问,组合形式为digest:username:BASE64(SHA1(password)):[permissions]
auth与digest的区别就是,前者明文,后者密文
4)ip:当设置为ip指定的ip地址,此时限制ip进行访问,比如ip:192.168.1.1:[permissions]
5)super:代表超级管理员,拥有所有的权限
三、permissions
1)权限字符串缩写cdrwa
CREATE:创建子结点
DELETE:删除子结点
READ:获取结点/子结点
WRITE:设置结点数据
ADMIN:设置权限
ACL命令行学习
1)world:anyone:cdrwa
其中,world:anyone是绑定的组合,意味着任何人都可以访问这个结点。
可以发现,修改为crwa的结点不能被删除。
2)auth:user:pwd:cdrwa
&digest:user:BASE64(SHA1(pwd)):cdrwa
&addauth digest user:pwd
先注册用户,才可以设置auth属性。
使用addauth digest user:pwd
命令进行注册,然后采用权限控制后,就可以使这个结点只能被特定的用户所访问。
使用getAcl获取结点的权限,可以发现密码进行了SHA1的加密处理,另外,在设置了用户名和密码的时候,可以用匿名的形式对结点的权限进行设置,如:setAcl /lamar/abc auth::cdrwa
。
3)ip:192.168.1.1:cdrwa
对特定的ip做出访问限制。
4)Super
增加超级管理员用户,可以无视任何权限控制。
(1) 修改zkServer.sh增加super管理员
(2) 重启zkServer.sh
在zkServer.sh中添加事先注册好的账号以及密码密文信息:
-Dzookeeper.DigestAuthenticationProvider.superDigest=lamar:***********(your pwd)=
在进行登录操作之后,就有了所有的权限。
可以观察到,在一般情况下无法取得的权限,在super账户下都可以获得(192.168.3.3非本服务器ip)。
ACL的常用使用场景
1)开发/测试环境分离,开发者无权操作测试库的结点,只能看。
2)生产环境上控制指定ip的服务可以访问相关结点,防止混乱。
zk四字命令Four Letter Words
1)zk可以通过它自身提供的简写命令来和服务器进行交互。
2)需要使用到nc命令,安装:yum install nc
。
3)echo [commond] | nc [ip] [port]
。
从官方文档中查看四字命令:Document->Admin&Ops->Administrator’s Guide->搜索The Four Letter Words。
具体链接:https://zookeeper.apache.org/doc/r3.5.5/zookeeperAdmin.html#sc_4lw
常见命令
1)[stat]
:查看zk的状态信息,以及是否mode
使用命令echo stat | nc 127.0.0.1 2181
2)[ruok]
:查看当前zkServer是否启动,返回imok
3)[dump]
:列出未经处理的会话和临时结点
4)[conf]
:查看服务器配置
5)[cons]
:展示连接到服务器的客户端信息
6)[envi]
:环境变量
7)[mntr]
:监控zk健康信息
8)[wchs]
:展示watch的信息