目录

1、启停脚本

1.1、启动脚本

1.2、关闭脚本

1.3、启动关闭一体化

2、选举机制

3、客户端命令行操作

3.1、命令行语法

 3.2、znode 节点数据信息

3.3、节点类型(持久/短暂/有序号/无序号)

3.4、监听器原理

3.5、节点删除与查看


1、启停脚本

1.1、启动脚本

#!/bin/sh
echo "start zkServer..."
for i in 01 02 03
do
  ssh eshop-cache$i "source /etc/profile;/usr/local/module/zookeeper-3.4.10/bin/zkServer.sh start"
done
echo "zookeeper集群启动完成"

1.2、关闭脚本

#!/bin/sh
echo "start zkServer..."
for i in 01 02 03
do
  ssh eshop-cache$i "source /etc/profile;/usr/local/module/zookeeper-3.4.10/bin/zkServer.sh stop"
done
echo "zookeeper集群关闭完成"

1.3、启动关闭一体化

#! /bin/bash
case $1 in
"start"){
	for i in hadoop102 hadoop103 hadoop104
	do
		ssh $i "/opt/module/zookeeper-3.4.10/bin/zkServer.sh start"
	done
	};;
"stop"){
	for i in hadoop102 hadoop103 hadoop104
	do
		ssh $i "/opt/module/zookeeper-3.4.10/bin/zkServer.sh stop"
	done
	};;
esac

2、选举机制

zookeeper stat nc 如何禁止_debian

zookeeper stat nc 如何禁止_linux_02

3、客户端命令行操作

3.1、命令行语法

zookeeper stat nc 如何禁止_数据_03

zookeeper stat nc 如何禁止_linux_04

 1)启动客户端

[kgf@hadoop102 zookeeper-3.5.7]$ bin/zkCli.sh -server hadoop102:2181

2)显示所有操作命令

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

 3.2、znode 节点数据信息

1)查看当前znode中所包含的内容

[zk: hadoop102:2181(CONNECTED) 1] ls /
[zookeeper]
[zk: hadoop102:2181(CONNECTED) 2]

2)查看当前节点详细数据

[zk: hadoop102:2181(CONNECTED) 2] 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

[zk: hadoop102:2181(CONNECTED) 3]

(1)czxid:创建节点的事务 zxid

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

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

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

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

(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 子节点数量

3.3、节点类型(持久/短暂/有序号/无序号)

zookeeper stat nc 如何禁止_linux_05

1)分别创建2个普通节点(永久节点 + 不带序号)

[zk: hadoop102:2181(CONNECTED) 3]  create /sanguo "diaochan"
 Created /sanguo
 [zk: hadoop102:2181(CONNECTED) 4] create /sanguo/shuguo "liubei"
 Created /sanguo/shuguo
 [zk: hadoop102:2181(CONNECTED) 5]注意:创建节点时,要赋值
2)获得节点的值
[zk: hadoop102:2181(CONNECTED) 5] get -s /sanguo
 diaochan
 cZxid = 0x200000004
 ctime = Sat Apr 27 19:32:16 CST 2024
 mZxid = 0x200000004
 mtime = Sat Apr 27 19:32:16 CST 2024
 pZxid = 0x200000005
 cversion = 1
 dataVersion = 0
 aclVersion = 0
 ephemeralOwner = 0x0
 dataLength = 8
 numChildren = 1
 [zk: hadoop102:2181(CONNECTED) 6][zk: hadoop102:2181(CONNECTED) 6] get -s /sanguo/shuguo
 liubei
 cZxid = 0x200000005
 ctime = Sat Apr 27 19:32:46 CST 2024
 mZxid = 0x200000005
 mtime = Sat Apr 27 19:32:46 CST 2024
 pZxid = 0x200000005
 cversion = 0
 dataVersion = 0
 aclVersion = 0
 ephemeralOwner = 0x0
 dataLength = 6
 numChildren = 0
 [zk: hadoop102:2181(CONNECTED) 7]3)创建带序号的节点(永久节点 + 带序号)
(1)先创建一个普通的根节点/sanguo/weiguo
[zk: hadoop102:2181(CONNECTED) 7] create /sanguo/weiguo "caocao"
 Created /sanguo/weiguo
 [zk: hadoop102:2181(CONNECTED) 8](2)创建带序号的节点
[zk: hadoop102:2181(CONNECTED) 8] create -s /sanguo/weiguo/zhangliao "zhangliao"
 Created /sanguo/weiguo/zhangliao0000000000
 [zk: hadoop102:2181(CONNECTED) 9] create -s /sanguo/weiguo/zhangliao "zhangliao"
 Created /sanguo/weiguo/zhangliao0000000001
 [zk: hadoop102:2181(CONNECTED) 10] create -s /sanguo/weiguo/xuchu "xuchu"
 Created /sanguo/weiguo/xuchu0000000002
 [zk: hadoop102:2181(CONNECTED) 11]

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

4)创建短暂节点(短暂节点 + 不带序号 or 带序号)

(1)创建短暂的不带序号的节点
[zk: hadoop102:2181(CONNECTED) 11] create -e /sanguo/wuguo "zhouyu"
 Created /sanguo/wuguo
 [zk: hadoop102:2181(CONNECTED) 12](2)创建短暂的带序号的节点
[zk: hadoop102:2181(CONNECTED) 12] create -e -s /sanguo/wuguo "zhouyu"
 Created /sanguo/wuguo0000000003
 [zk: hadoop102:2181(CONNECTED) 13](3)在当前客户端是能查看到的
[zk: hadoop102:2181(CONNECTED) 13] ls /sanguo
 [shuguo, weiguo, wuguo, wuguo0000000003]
 [zk: hadoop102:2181(CONNECTED) 14](4)退出当前客户端然后再重启客户端
[zk: localhost:2181(CONNECTED) 12] quit
[kgf@hadoop104 zookeeper-3.5.7]$ bin/zkCli.sh
(5)再次查看根目录下短暂节点已经删除
[zk: localhost:2181(CONNECTED) 0] ls /sanguo
 [shuguo, weiguo]
 [zk: localhost:2181(CONNECTED) 1]

5)修改节点数据值

[zk: localhost:2181(CONNECTED) 1] get -s /sanguo/weiguo
caocao
 cZxid = 0x200000006
 ctime = Sat Apr 27 19:35:31 CST 2024
 mZxid = 0x200000006
 mtime = Sat Apr 27 19:35:31 CST 2024
 pZxid = 0x200000009
 cversion = 3
 dataVersion = 0
 aclVersion = 0
 ephemeralOwner = 0x0
 dataLength = 6
 numChildren = 3
 [zk: localhost:2181(CONNECTED) 2] set /sanguo/weiguo "simayi"
 [zk: localhost:2181(CONNECTED) 3] get -s /sanguo/weiguo
simayi
 cZxid = 0x200000006
 ctime = Sat Apr 27 19:35:31 CST 2024
 mZxid = 0x200000010
 mtime = Sat Apr 27 19:44:54 CST 2024
 pZxid = 0x200000009
 cversion = 3
 dataVersion = 1
 aclVersion = 0
 ephemeralOwner = 0x0
 dataLength = 6
 numChildren = 3
 [zk: localhost:2181(CONNECTED) 4]

3.4、监听器原理

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

zookeeper stat nc 如何禁止_linux_06

1)节点的值变化监听

(1)在 hadoop104 主机上注册监听/sanguo 节点数据变化
[zk: localhost:2181(CONNECTED) 26] get -w /sanguo
(2)在 hadoop103 主机上修改/sanguo 节点的数据
[zk: localhost:2181(CONNECTED) 1] set /sanguo "xisi"
(3)观察 hadoop104 主机收到数据变化的监听
[zk: localhost:2181(CONNECTED) 0] get -w /sanguo
 diaochan
 [zk: localhost:2181(CONNECTED) 1]
 WATCHER::WatchedEvent state:SyncConnected type:NodeDataChanged path:/sanguo

注意:在hadoop103再多次修改/sanguo的值,hadoop104上不会再收到监听。因为注册 一次,只能监听一次。想再次监听,需要再次注册 

2)节点的子节点变化监听(路径变化)

(1)在 hadoop104 主机上注册监听/sanguo 节点的子节点变化
[zk: localhost:2181(CONNECTED) 1]  ls -w /sanguo
 [shuguo, weiguo]
 [zk: localhost:2181(CONNECTED) 2](2)在 hadoop103 主机/sanguo 节点上创建子节点
[zk: localhost:2181(CONNECTED) 1]  create /sanguo/jin "simayi"
 Created /sanguo/jin
 [zk: localhost:2181(CONNECTED) 2](3)观察 hadoop104 主机收到子节点变化的监听
[zk: localhost:2181(CONNECTED) 1]  ls -w /sanguo
 [shuguo, weiguo]
 [zk: localhost:2181(CONNECTED) 2]
 WATCHER::WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/sanguo

注意:节点的路径变化,也是注册一次,生效一次。想多次生效,就需要多次注册。

3.5、节点删除与查看

1)删除节点
[zk: localhost:2181(CONNECTED) 2] delete /sanguo/jin
 [zk: localhost:2181(CONNECTED) 3]2)递归删除节点
[zk: localhost:2181(CONNECTED) 3] deleteall /sanguo/shuguo
 [zk: localhost:2181(CONNECTED) 4]3)查看节点状态
[zk: localhost:2181(CONNECTED) 4] stat /sanguo
 cZxid = 0x200000004
 ctime = Sat Apr 27 19:32:16 CST 2024
 mZxid = 0x200000013
 mtime = Sat Apr 27 19:56:06 CST 2024
 pZxid = 0x200000016
 cversion = 9
 dataVersion = 1
 aclVersion = 0
 ephemeralOwner = 0x0
 dataLength = 4
 numChildren = 1
 [zk: localhost:2181(CONNECTED) 5]