搞懂 ZooKeeper 集群的数据同步 (5)

这里有两个改动,在 1 处使用 addAuthInfo 的方法可以在当前客户端的会话中添加 auth 信息,Digest 的 id 取值为 username:password 直接用明文即可,无论是 username 还是 password 都是自定义的。

然后是查询代码

ZooKeeper client = new ZooKeeper("127.0.0.1:2181", 3000, null); client.addAuthInfo("digest", "laoxun:kaixin".getBytes()); // 这行如果注释的话就会报错 byte[] data = client.getData("/abc", false, null); System.out.println(new String(data)); // test

不管创建的时候是何种写法,查询的时候都要使用 addAuthInfo 在会话中添加权限信息,才能对该节点进行查询

3.2.4 Super

听名字就知道这个模式是管理员的模式了,因为之前创建的那些节点,如果设置了用户名密码,其他客户端是无法访问的,如果该客户端自己退出了,这些节点就无法去操作了,所以需要管理员这一个角色来对其进行降维打击。

搞懂 ZooKeeper 集群的数据同步

首先 Super 模式是要开启的,我这里假设管理员的用户名为 HelloZooKeeper,密码为 niubi,经过编码后就是 HelloZooKeeper:PT8Sb6Exg9YyPCS7fYraLCsqzR8=, 然后需要在服务端启动的环境中指定 zookeeper.DigestAuthenticationProvider.superDigest 配置,参数就是 HelloZooKeeper:PT8Sb6Exg9YyPCS7fYraLCsqzR8= 即可。

创建节点假设还是以 laoxun:kaixin 的模式,然后通过管理员的密码也能进行正常的访问

ZooKeeper client = new ZooKeeper("127.0.0.1:2181", 3000, null); client.addAuthInfo("digest", "HelloZooKeeper:niubi".getBytes()); // 1. byte[] data = client.getData("/abc", false, null); System.out.println(new String(data)); // test client.close();

这里可以看到 1 处的 Super 模式本质上还是 Digest,指定的 scheme 为 digest,然后之后的 id 取值采用的是明文,而非编码后的格式,切记!

3.3 Permission 汇总表格

我这里列出大部分服务端提供的操作对应的 Permission 权限:

操作 所需权限 描述
create   父节点的 CREATE   创建节点  
create2   父节点的 CREATE   创建节点,同时返回节点数据  
createContainer   父节点的 CREATE   创建容器节点  
createTTL   父节点的 CREATE   创建带超时时间的节点  
delete   父节点的 DELETE   删除节点  
setData   当前节点的 WRITE   设置节点数据  
setACL   当前节点的 ADMIN   设置节点的权限信息  
reconfig   当前节点的 WRITE   重新设置一些配置(之后有机会介绍)  
getData   当前节点的 READ   查询节点数据  
getChildren   当前节点的 READ   获取子节点列表  
getChildren2   当前节点的 READ   获取子节点列表  
getAllChildrenNumber   当前节点的 READ   获取所有子节点(包含孙子节点)数量  
getACL   当前节点的 ADMIN 或 READ   获取节点的权限信息  

可以看到删除和创建节点看的是父节点的权限,只有读写才是看的自己本身的权限。另外如果表格中没有出现的操作可以认为不需要 ACL 权限校验,其他要么是只需要客户端是一个合法的 session 或者本身是一些比较特殊的功能,例如:createSession、closeSession 等。至于关于 session 的更多内容,留到下一篇再讲吧~哈哈

搞懂 ZooKeeper 集群的数据同步

3.4 ACL 背后的原理

我们刚刚花了一点篇幅介绍了 ACL 是什么,怎么用?现在深入了解下 ACL 在 ZK 的服务端底层是怎么去实现的吧~为了节约篇幅,这次就直接进入猿话讲解了。

首先祭出之前的一张图,唤醒下大家的记忆

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwsgx.html