zk监听java代码 java监听binlog( 二 )


ACL 全称是 Access Control List ,也就是访问控制列表,ACL可以设置节点的操作权限 。那么控制权限的粒度是怎样呢?
对于节点 ACL 权限控制,是通过使用: scheme:id:perm来标识(也就是例子中的格式 - world:anyone:crwda),其含义是:
Scheme 有哪些授权策略?
ID 授权对象有哪些?
Permission 权限有哪些?
根据上面的参数可知,我们可以通过给所有人、特定的账号密码、特定的 ip 设置节点权限,这样能够更加方面地管理节点的访问 。
值得注意的是,节点可以设置多种授权策略,但对于上下节点而言,权限的设置只对当前节点有效 。换言之,权限不存在继承关系,即使节点被设置权限,但不会影响上下节点原来的权限!
上面执行了 create /testAcl demo world:anyone:crwda 命令给节点设置权限,那怎么看节点的权限咧?
很简单,执行 getAcl 节点路径 就可以查看对应节点的权限,比如 getAcl /testAcl,执行结果如下
除了在执行create命令创建节点的时候设置权限 , 还可以通过 setAcl 指定节点设置权限,比如我想指定/testAcl这个节点只可以通过特定 IP操作 , 并且限制执行权限为crdw,那么可以执行setAcl /testAcl ip:127.0.0.1:crwd,再次执行 getAcl /testAcl 结果如下:
ZK 的命令还有部分没有演示 , 这并不阻碍咱们学习ZK的原理,先掌握常见的命令,如果日后有其他场景的话,再根据特定的命令学习就可以啦 。
无意中发现有 Zookeeper的客户端,感兴趣的读者可以玩一下~ 友情提醒 , 可能在节点数量很多的时候,打开很慢,甚至卡死 , 所以这个可视化工具可以在自己本地玩玩,不建议应用在生产上哈 。这也侧面的说明,学会 ZK 命令的重要性(认真脸.jpg)
解压缩后,进入ZooInspector的build目录,执行java -jar zookeeper-dev-ZooInspector.jar 就可以启动工具 。
连接上 ZK 后,就可以看到节点的信息和节点的ACL , 具体玩法,可以再自己摸索哈~
好了,以上是 ZK 常见命令的基本使用和可视化工具的基本使用 。
参考资料:
《从Paxos到Zookeeper分布式一致性原理与实践》
如果觉得文章不错的话,麻烦点个赞哈,你的鼓励就是我的动力!对于文章有哪里不清楚或者有误的地方,欢迎在评论区留言~
zookeeper怎么用java创建临时节点基本操作
下面给出基本的操作 ZooKeeper 的示例代码,这样你就能对 ZooKeeper 有直观的认识了 。下面的清单包括了创建与 ZooKeeper 服务器的连接以及最基本的数据操作:
ZooKeeper 基本的操作示例
// 创建一个与服务器的连接
ZooKeeper zk = new ZooKeeper("localhost:" + CLIENT_PORT,
ClientBase.CONNECTION_TIMEOUT, new Watcher() {
// 监控所有被触发的事件
public void process(WatchedEvent event) {
System.out.println("已经触发了" + event.getType() + "事件!");
}
});
// 创建一个目录节点
zk.create("/testRootPath", "testRootData".getBytes(), Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT);
// 创建一个子目录节点
zk.create("/testRootPath/testChildPathOne", "testChildDataOne".getBytes(),
Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
System.out.println(new String(zk.getData("/testRootPath",false,null)));
// 取出子目录节点列表
System.out.println(zk.getChildren("/testRootPath",true));
// 修改子目录节点数据
zk.setData("/testRootPath/testChildPathOne","modifyChildDataOne".getBytes(),-1);
System.out.println("目录节点状态:["+zk.exists("/testRootPath",true)+"]");
// 创建另外一个子目录节点
zk.create("/testRootPath/testChildPathTwo", "testChildDataTwo".getBytes(),

推荐阅读