Zookeeper
是什么?
协调管理
分布式系统: 多个节点组成
存储的数据模型
层次化的目录结构
每个节点是znode
临时节点
永久节点
如果不手动删除,不会自动被删除
可以有子节点
有序
znode特点
身份id, 版本号
修改\删除, 如果版本号不匹配, 会报错
zk上的数据较小
可以为znode添加监听器
设置权限ACL
安装
解压==> 配置环境变量
修改conf文件
1 2 3 4 [bigdata@hadoop001 conf]$ cp zoo_sample.cfg zoo.cfg [bigdata@hadoop001 conf]$ vi zoo.cfg #修改这个参数的路径 dataDir=/home/bigdata/tmp/zookeeper
使用
服务端 进程是QuorumPeerMain
1 2 3 4 [bigdata@hadoop001 bin]$ zkServer.sh start JMX enabled by default Using config: /home/bigdata/app/zookeeper/bin/../conf/zoo.cfg Starting zookeeper ... STARTED
1 2 3 4 [bigdata@hadoop001 bin]$ zkServer.sh status JMX enabled by default Using config: /home/bigdata/app/zookeeper/bin/../conf/zoo.cfg Mode: standalone
停止
1 2 3 4 [bigdata@hadoop001 bin]$ zkServer.sh stop JMX enabled by default Using config: /home/bigdata/app/zookeeper/bin/../conf/zoo.cfg Stopping zookeeper ... STOPPED
客户端 进程是 ZooKeeperMain
1 2 [bigdata@hadoop001 bin]$ zkCli.sh Connecting to localhost:2181
客户端常用命令
ls / 查看/的目录结构
1 2 [zk: localhost:2181(CONNECTED) 2] ls / [zookeeper]
create 创建节点
1 2 3 4 [zk: localhost:2181(CONNECTED) 5] create /lxl jim Created /lxl [zk: localhost:2181(CONNECTED) 6] ls / [lxl, zookeeper]
delete 删除
如果有子节点, 先删除子节点
1 2 [zk: localhost:2181(CONNECTED) 32] delete /lxl Node not empty: /lxl
get 查看节点上的信息
1 2 [zk: localhost:2181(CONNECTED) 36] get /lxl lxl
stat查看节点的详细信息
1 2 3 4 5 6 7 8 9 10 11 12 [zk: localhost:2181(CONNECTED) 37] stat /lxl cZxid = 0xf2 ctime = Tue Mar 16 21:53:21 CST 2021 mZxid = 0xf2 mtime = Tue Mar 16 21:53:21 CST 2021 pZxid = 0xf2 cversion = 0 #版本号 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 #永久节点 dataLength = 3 #数据长度 numChildren = 0 #子节点个数
如果增加子节点, 版本号和节点数都会变化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [zk: localhost:2181(CONNECTED) 39] create /lxl/a jack Created /lxl/a [zk: localhost:2181(CONNECTED) 40] get /lxl lxl cZxid = 0xf2 ctime = Tue Mar 16 21:53:21 CST 2021 mZxid = 0xf2 mtime = Tue Mar 16 21:53:21 CST 2021 pZxid = 0xf9 cversion = 1 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 1 [zk: localhost:2181(CONNECTED) 41]
create -e 创建临时节点
1 2 3 4 5 6 [zk: localhost:2181(CONNECTED) 43] create -e /lxl/tmp kkk Created /lxl/tmp [zk: localhost:2181(CONNECTED) 44] stat /lxl/tmp ... ephemeralOwner = 0x1782fb0dd6e0038 #永久节点为0x0 ...
create -s创建有序节点
1 2 [zk: localhost:2181(CONNECTED) 45] create -s /lxl/seq mack Created /lxl/seq0000000003
不支持级联创建
set 修改值
1 2 3 4 5 6 7 8 9 10 11 12 [zk: localhost:2181(CONNECTED) 48] set /lxl/a mamama cZxid = 0xf9 ctime = Tue Mar 16 22:45:08 CST 2021 mZxid = 0xfe mtime = Tue Mar 16 23:04:18 CST 2021 pZxid = 0xf9 cversion = 0 dataVersion = 1 #版本+1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 6 numChildren = 0
set path value version修改+版本号
版本号不存在,报错
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 [zk: localhost:2181(CONNECTED) 55] stat /lxl/a cZxid = 0xf9 ctime = Tue Mar 16 22:45:08 CST 2021 mZxid = 0xfe mtime = Tue Mar 16 23:04:18 CST 2021 pZxid = 0xf9 cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 6 numChildren = 0 [zk: localhost:2181(CONNECTED) 56] stat /lxl/a abc 1 cZxid = 0xf9 ctime = Tue Mar 16 22:45:08 CST 2021 mZxid = 0xfe mtime = Tue Mar 16 23:04:18 CST 2021 pZxid = 0xf9 cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 6 numChildren = 0 [zk: localhost:2181(CONNECTED) 58] set /lxl/a abc 2 version No is not valid : /lxl/a
delete path version带版本号删除
如果版本号不存在, 报错
1 2 [zk: localhost:2181(CONNECTED) 61] delete /lxl/a 2 version No is not valid : /lxl/a
watch监听
1 2 3 4 5 6 [zk: localhost:2181(CONNECTED) 1] stat /lxl/ab watch [zk: localhost:2181(CONNECTED) 2] delete /lxl/ab WATCHER:: WatchedEvent state:SyncConnected type:NodeDeleted path:/lxl/ab
可以被监听的event: NodeCreated NodeDataChanged NodeDelete
子节点可以被监听: NodeCreated NodeDelete【修改子节点, 不能被监听】
服务端四字命令
stat 查看服务的一些信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [bigdata@hadoop001 ~]$ echo stat|nc hadoop001 2181 Zookeeper version: 3.4.5-cdh5.16.2--1, built on 06/03/2019 10:40 GMT Clients: /127.0.0.1:45678[1](queued=0,recved=14,sent=14) /127.0.0.1:45676[1](queued=0,recved=15,sent=15) /172.22.212.16:34830[0](queued=0,recved=1,sent=0) Latency min/avg/max: 0/0/2 Received: 30 Sent: 29 Connections: 3 Outstanding: 0 Zxid: 0x109 Mode: standalone Node count: 8
dump 临时session
1 2 3 4 5 6 7 8 9 10 [bigdata@hadoop001 ~]$ echo dump|nc hadoop001 2181 SessionTracker dump: Session Sets (3): 0 expire at Wed Mar 17 20:33:16 CST 2021: 0 expire at Wed Mar 17 20:33:26 CST 2021: 2 expire at Wed Mar 17 20:33:36 CST 2021: 0x1782fb0dd6e0047 0x1782fb0dd6e0046 ephemeral nodes dump: Sessions with Ephemerals (0):
conf 配置信息
1 2 3 4 5 6 7 8 9 [bigdata@hadoop001 ~]$ echo conf|nc hadoop001 2181 clientPort=2181 dataDir=/home/bigdata/tmp/zookeeper/version-2 dataLogDir=/home/bigdata/tmp/zookeeper/version-2 tickTime=2000 maxClientCnxns=60 minSessionTimeout=4000 maxSessionTimeout=40000 serverId=0
wchs 监听情况
1 2 3 [bigdata@hadoop001 ~]$ echo wchs|nc hadoop001 2181 1 connections watching 2 paths Total watches:2
API使用
依赖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 <--!原生API--> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>${zk.version}</version> </dependency> <--!升级API--> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-client</artifactId> <version>2.13.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>2.13.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.13.0</version> </dependency>
插件zoolytic