zookeeper学习笔记2(小D课堂)

zookeeper数据模型:

 我们的zookeeper是以节点的形式存在的,这样的形式和数据结构中的树的形式很像。同时也很像我们的linux的结构,例如linux的/user/local目录下可以有我们的/usr/local/tomcat目录。这样的节点形式。

我们的zookeeper中的每一个节点都称之为我们的zNode。另外我们的zookeeper中包含我们的acl属性,acl是我们学习zookeeper中特别重要的一个内容,它是我们的权限,我们可以给zookeeper节点设置相应的权限。另外我们zookeeper包含两个节点类型:永久节点和临时节点。

zookeeper常用命令之zkCli:

这里我们先来说一点,我们上次笔记是直接就启动了zookeeper,但是实际上我们应该先切到我们的用户,然后再去启动我们的zookeeper:

 接着我们再进入到我们的zookeeper的bin目录中去:

 然后我们去启动我们的zookeeper:

然后我们就来学我们的zkCli脚本:

 

./zkCli.sh h

 

我们用这个命令可以打开我们的帮助文档:

 我们知道我们的zookeeper是一个节点的形式。/usr/local。

那么我们怎么去在zookeeper里去创建一个节点呢?

 我们文档里的这句话就是我们创建节点的方式:

-s是我们的顺序节点,-e是我们的临时节点,path是我们的路径,data是我们节点中存放的数据,acl是权限(我们这里暂时用不到)。

我们直接这样就可以启动我们虚拟机中的zkCli.

 

我们这样就创建了我们的一个有序节点。

 我们的路径必须要带/,不然会报错。

然后我们再去创建一个节点:

我们可以获取我们节点的子节点:

ls path

 我们现在来查看一下节点里的数据:

 get path

我们还可以查看到节点的状态:

 stat path

那么这些信息都是什么含义呢?

查看获取节点的子节点以及当前的状态:

ls2 path

我们这里没有创建子节点,所以我们查看不到我们的子节点。

 我们现在就来创建一下我们的子节点:

然后我们再去查一下:

 

 我们就可以看到包含我们的一个子节点wiggin。

修改节点的数据 set path data[version]:

这是我们原来节点里的数据:

 

然后我们再去查看:

 

我们的数据就发生了改变了。

 我们这里修改了之后,我们的dataVersion就+1了。

那我们语法中的version是干什么的呢?

如果我们自己定义的版本和我们的dataVersion不一样,那么我们就无法设置成功。

如果我们设置的版本和我们的dataVersion一样:

 

我们的dataVersion就自增了。

 

这就是我们最后的值了。

然后我们去看看怎么去删除一个节点:

 delete path[version] | rmr path

我们发现因为我们这个节点下是有我们的根节点的,所以我们无法直接使用delete语句进行删除。

 

我们使用rmr 递归删除就可以成功删除了。

 那我们到这里就结束了。我们的zookeeper zkCli语句基本上就是我们的对节点的增删改查操作。

深入理解zookeeper的session机制:

 

我们可以看到这里是有一个节点的。

那么我们按住ctrl+C去强制退出一下:

再去打开我们的zookeeper,那我们的这个节点还会存在么?

 

我们发现这个节点还存在,这是什么原因呢?

 这是因为心跳机制还没有过期。

那么我们退出以后等比较长的一段时间看一下呢?

如果我们的服务端长期没有收到我们的客户端,那么它会认为我们的客户端死亡了。

我们现在再去登录看一下:

就会没有了。

我们再把它创建出来。

我们也可以强制断开使用close命令:

深入理解zookeeper watcher机制

watcher主要是监控节点的变更。

我们现在没有任何节点。

现在我们来创建一个节点:

不带任何修饰,我们这里创建的就是我们永久的节点。

 

我们可以这样去查看到它的状态。

 然后我们打开另一个终端:

我们在这个终端中去变更这个节点的数据:

 

我们的另一个终端马上开启了watch。

 

我们第二次变更发现,没有再次触发我们的watcher。在zookeeper中watcher是不会重复使用的。

get和state可以去对所有节点进行watch。

 我们还有一个针对子节点的。

那我们先来去创建一个子节点:

 然后我们在另一个终端去变更这个子节点:

 

我们发现这边并没有什么作用。也就是说get和state不会针对我们的子节点。

 

现在我们使用这个命令。

再去变更子节点:

 

我们发现ls和ls2针对于子节点的数据变化是不会触发watch事件的。

对于增加和删除会触发watch事件。

那么我们现在来去创建一个子节点:

 

 

马上就开启了我们的watch事件。

 然后我们再去创建一个子节点的子节点:

 

 这时候没有触发watch。也就是说只有针对直接子节点会触发watch,对于子节点的子节点是不会去触发的。

 

zookeeper的acl权限控制:

 

 

现在我们创建了一个新的节点。

 

 我们可以这样查看到权限。

但是它显示的信息是什么意思呢?

 

 

我们去设置它的权限,发现我们还没有注册这个用户。

那么我们来去增加一个用户:

 

然后我们再去设置它的权限:

 

我们再去查看一下它的权限:

 

 

如果 我们在另一个终端直接去访问,是访问不到的。

我们就要去获取权限:

 我们现在来更改一下它的权限:

 

 然后现在我们给它去创建一个子节点:

 

我们可以看到它里面包含一个子节点。

 

我们直接删除的话肯定是没有权限的。

我们现在来获取权限:

 

显示我们还是不能删除。

 因为这个用户是没有删除权限的。

现在我们给它增加了一个删除权限。

 

这样我们就可以正常去删除了。

 

这节课为止,我们关于zookeeper的一些基本的节点操作就掌握了。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值