一 zk 实现分布式锁
1.1 zk分布式操作命令
1.指令:
ls /
get /zookeeper
create /aa "test"
delete /aa
set /aa "test1"
2..znode节点类型:
永久节点:create /path content
临时节点:create -e /path content 。只要客户端程序断开链接自动删除
永久序列化节点:create -s /path content
临时序列化节点:create -s -e /path content
1.2 zk的4种目录树
ookeeper提供一个多层级的节点命名空间(节点称为znode),每个节点都用一个以斜杠(/)分隔的路径表示,而且每个节点都有父节点(根节点除外),非常类似于文件系统。并且每个节点都是唯一的。znode节点有四种类型:
1.PERSISTENT:永久节点。客户端与zookeeper断开连接后,该节点依旧存在
2.EPHEMERAL:临时节点。客户端与zookeeper断开连接后,该节点被删除
3.PERSISTENT_SEQUENTIAL:永久节点、序列化。客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号
4.EPHEMERAL_SEQUENTIAL:临时节点、序列化。客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号
1.3 实战操作
1.进入zk客户端
./zkCli.sh # 查看zk客户端
2.创建节点命令
[zk: localhost:2181(CONNECTED) 12] get /sz
test
[zk: localhost:2181(CONNECTED) 13] set /sz test123
[zk: localhost:2181(CONNECTED) 14] get /sz
test123
[zk: localhost:2181(CONNECTED) 15]
3.案例
[zk: localhost:2181(CONNECTED) 0] create /aa test # 创建持久化节点
Created /aa
[zk: localhost:2181(CONNECTED) 1] create -s /bb test # 创建持久序列化节点
Created /bb0000000001
[zk: localhost:2181(CONNECTED) 2] create -e /cc test # 创建临时节点
Created /cc
[zk: localhost:2181(CONNECTED) 3] create -e -s /dd test # 创建临时序列化节点
Created /dd0000000003
[zk: localhost:2181(CONNECTED) 4] ls / # 查看某个节点下的子节点
[aa, bb0000000001, cc, dd0000000003, zookeeper]
[zk: localhost:2181(CONNECTED) 5] stat / # 查看某个节点的状态
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x5
cversion = 3
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 5
[zk: localhost:2181(CONNECTED) 6] get /aa # 查看某个节点的内容
test
[zk: localhost:2181(CONNECTED) 11] delete /aa # 删除某个节点
[zk: localhost:2181(CONNECTED) 7] ls / # 再次查看
[bb0000000001, cc, dd0000000003, zookeeper]
1.4 zk的监听事件
在读取数据时,我们可以同时对节点设置事件监听,当节点数据或结构变化时,zookeeper会通知客户端。当前zookeeper针对节点的监听有如下四种事件:
5.节点的事件监听:一次性
1.节点创建:NodeCreated
stat -w /xx
2.节点删除:NodeDeleted
stat -w /xx
3.节点数据变化:NodeDataChanged
get -w /xx
4.子节点变化:NodeChildrenChanged
ls -w /xx
1.客户端
[zk: localhost:2181(CONNECTED) 28] set /teng 1234
[zk: localhost:2181(CONNECTED) 29]
2.客户端2:会提示目录/teng 发生了改变