zookeeper操作

Zookeeper命令详解与分布式锁实现
  • 客户端操作命令
    1.启动客户端(其中-server Cenos01 :2181为修改名称,不修改则为localhost)
 [root@Cenos01 zookeeper-3.5.7]$ bin/zkCli.sh -server Cenos01 :2181

2.显示所有操作命令

 [zk: Cenos01 :2181(CONNECTED) 1] help

3.查看当前znode中所包含的内容(ls /)
在这里插入图片描述

4.查看当前节点详细数据(ls -s /)

[zk: localhost:2181(CONNECTED) 4] ls -s /
[zookeeper]cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
			(1)czxid:创建节点的事务 zxid

				每次修改 ZooKeeper 状态都会产生一个 ZooKeeper 事务 ID。事务 ID 是 ZooKeeper 中所 有修改总的次序。每次修改都有唯一的 zxid,如果 zxid1 小于 zxid2,那么 zxid1 在 zxid2 之 前发生。

            (2)ctime:znode 被创建的毫秒数(从 1969 年开始)

            (3)mzxid:znode 最后更新的事务 zxid

            (4)mtime:znode 最后修改的毫秒数(从 1969 年开始)

            (5)pZxid:znode 最后更新的子节点 zxid

            (6)cversion:znode 子节点变化号,znode 子节点修改次数

            (7)dataversion:znode 数据变化号

            (8)aclVersion:znode 访问控制列表的变化号

            (9)ephemeralOwner:如果是临时节点,这个是 znode 拥有者的 session id。如果不是 临时节点则是 0。

            (10)dataLength:znode 的数据长度

            (11)numChildren:znode 子节点数量

在这里插入图片描述

   1.创建不带序号永久节点(创建节点一定要赋值)

            [zk: Centos01:2181(CONNECTED) 2] create /sanguo "hanxiandi"

            [zk: Centos01:2181(CONNECTED) 4] create /sanguo/shuguo "liubei"

    2.获取节点值(get -s /sanguo)

            [zk: Centos01:2181(CONNECTED) 5] get -s /sanguo

    3.创建带序号的永久节点(create -s /sanguo/weiguo/zahngliao "zhangliao")

            如果原来没有序号节点,序号从 0 开始依次递增。如果原节点下已有 2 个节点,则再排 序时从 2 开始,以此类推。

    不带序号创建相同节点值会报错显示已存在;
    4.创建不带序号的短暂节点(create -e /sanguo/wuguo "zhouyu")

    5.创建带序号的短暂节点(create -e -s /sanguo/wuguo "zhouyu")

    6.退出客户端(quit)

    7.修改节点值(set /sanguo/weiguo "simayi")

    8.删除节点(delete /sanguo/jin)

    9.删除递归节点(deleteall /sanguo/shuguo)

    10.查看节点状态(stat /sanguo)
  • 监听器

原理:

客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、节点删除、子目 录节点增加删除)时,ZooKeeper 会通知客户端。监听机制保证 ZooKeeper 保存的任何的数 据的任何改变都能快速的响应到监听了该节点的应用程序。

在这里插入图片描述

1.节点的值变化监听(只能监听一次,就不会再监听,如果需要再次监听,需要再次注册)

            (1)在 Centos02 主机上注册监听/sanguo 节点数据变化(get -w /sanguo)注册监听器

            (2)在 Centos02 主机上修改/sanguo 节点的数据(set /sanguo "xisi")

            (3)观察Centos02 主机收到数据变化的监听

    2.节点的子节点变化监听(路径变化)ls -w /sanguo
  • zookeeper分布式锁

什么叫做分布式锁呢?

比如说"进程1"在使用该资源的时候,会先去获得锁,"进程1"获得锁以后会对该资源保持独占,这样其他进程就无法访问该资源,"进程1"用完该资源以后就将锁释放掉,让其他进程来获得锁,那么通过这个锁机制,我们就能保证了分布式系统中多个进程能够有序的访问该临界资源。那么我们把这个分布式环境下的这个锁叫作分布式锁。
在这里插入图片描述
2.Curator 框架实现分布式锁案例

1.原生的 Java API 开发存在的问题

    (1)会话连接是异步的,需要自己去处理。比如使用 CountDownLatch

    (2)Watch 需要重复注册,不然就不能生效

    (3)开发的复杂性还是比较高的

    (4)不支持多节点删除和创建。需要自己去递归

Curator 是一个专门解决分布式锁的框架,解决了原生 JavaAPI 开发分布式遇到的问题。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值