zookeeper介绍
Zookeeper从设计模式角度来理解,是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生了变化,Zookeeper就负责通知已经在Zookeeper上注册的那些观察者做出相应的反应.
Zookeeper = 文件系统 + 通知机制
zookeeper工作机制
文章目录
安装
三台虚拟机,不再赘述
客户端命令行操作
启动zookeeper
[root@hadoop102 software]# my_zookeeper.sh status
---------- zookeeper hadoop102 状态 ------------
ZooKeeper JMX enabled by default
Using config: /opt/software/zookeeper-3.5.7/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
---------- zookeeper hadoop103 状态 ------------
ZooKeeper JMX enabled by default
Using config: /opt/software/zookeeper-3.5.7/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader
---------- zookeeper hadoop104 状态 ------------
ZooKeeper JMX enabled by default
Using config: /opt/software/zookeeper-3.5.7/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
[root@hadoop102 zookeeper-3.5.7]# ./bin/zkCli.sh
查看当前znode中所包含的内容
[zk: localhost:2181(CONNECTED) 1] ls /
[hbase, zookeeper]
查看当前节点详细数据
[zk: localhost:2181(CONNECTED) 2] ls -s /
[hbase, zookeeper]cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x200000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 2
分别创建2个普通节点
[zk: localhost:2181(CONNECTED) 3] create /sanguo "caocao"
Created /sanguo
[zk: localhost:2181(CONNECTED) 4] create /sanguo/weiguo "dianwei"
Created /sanguo/weiguo
获得节点的值
[zk: localhost:2181(CONNECTED) 5] get /sanguo
caocao
[zk: localhost:2181(CONNECTED) 6] get -s /sanguo
caocao
cZxid = 0x600000002
ctime = Mon Apr 11 15:32:05 CST 2022
mZxid = 0x600000002
mtime = Mon Apr 11 15:32:05 CST 2022
pZxid = 0x600000003
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 1
[zk: localhost:2181(CONNECTED) 7] get -s /sanguo/weiguo
dianwei
cZxid = 0x600000003
ctime = Mon Apr 11 15:32:53 CST 2022
mZxid = 0x600000003
mtime = Mon Apr 11 15:32:53 CST 2022
pZxid = 0x600000003
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 0
创建临时节点
[zk: localhost:2181(CONNECTED) 8] create -e /sanguo/wuguo "zhouyu"
Created /sanguo/wuguo
(1)在当前客户端是能查看到的
[zk: localhost:2181(CONNECTED) 9] ls /sanguo
[weiguo, wuguo]
(2)退出当前客户端然后再重启客户端
quit
./bin/zkCli.sh
(3)再次查看根目录下短暂节点已经删除
[zk: localhost:2181(CONNECTED) 0] ls /sanguo
[weiguo]
创建带序号的节点
(1)先创建一个普通的根节点
[zk: localhost:2181(CONNECTED) 1] create /sanguo/shuguo "liubei"
Created /sanguo/shuguo
(2)创建带序号的节点
[zk: localhost:2181(CONNECTED) 2] create /sanguo/shuguo "liubei"
Node already exists: /sanguo/shuguo
[zk: localhost:2181(CONNECTED) 3] create -s /sanguo/shuguo "liubei"
Created /sanguo/shuguo0000000003
[zk: localhost:2181(CONNECTED) 4] create -s /sanguo/shuguo "liubei"
Created /sanguo/shuguo0000000004
[zk: localhost:2181(CONNECTED) 5] ls /sanguo
[shuguo, shuguo0000000003, shuguo0000000004, weiguo]
如果节点下原来没有子节点,序号从0开始依次递增。如果原节点下已有2个节点,则再排序时从2开始,以此类推。
修改节点数据值
[zk: localhost:2181(CONNECTED) 6] set /sanguo/weiguo "caopi"
节点的值变化监听
(1)在hadoop104主机上注册监听/sanguo节点数据变化
[zk: localhost:2181(CONNECTED) 0] get -w /sanguo
caocao
(2)在hadoop103主机上修改/sanguo节点的数据
[zk: localhost:2181(CONNECTED) 0] set /sanguo "diaochan"
(3)观察hadoop104主机收到数据变化的监听
节点的子节点变化监听(路径变化)
(1)在hadoop104主机上注册监听/sanguo节点的子节点变化
[zk: localhost:2181(CONNECTED) 1] ls -w /sanguo
[shuguo, shuguo0000000003, shuguo0000000004, weiguo]
(2)在hadoop103主机/sanguo节点上创建子节点
[zk: localhost:2181(CONNECTED) 1] create /sanguo/win "simayi"
Created /sanguo/win
(3)观察hadoop104主机收到子节点变化的监听
删除节点
[zk: localhost:2181(CONNECTED) 7] delete /sanguo/win
递归删除节点
[zk: localhost:2181(CONNECTED) 8] deleteall /sanguo/shuguo
查看节点状态
[zk: localhost:2181(CONNECTED) 11] stat /sanguo
cZxid = 0x600000002
ctime = Mon Apr 11 15:32:05 CST 2022
mZxid = 0x60000000e
mtime = Mon Apr 11 15:48:00 CST 2022
pZxid = 0x600000011
cversion = 9
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 3
下一篇文章介绍zookeeper的API应用