应用场景:
统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等等。
统一配置管理:
① 一般要求一个集群中,所有节点的配置信息是一致的,比如kafuka集群。
② 对配置文件修改后盼望能够快速同步到各个节点上。
③ 可将配置信息写入zookeeper上的ZNode。
④ 各个客户端服务器监听这个ZNode
⑤ 一但ZNode中的数据被修改,zookeeper将通知各个客户端服务器。
统一集群管理:
① 分布式环境中,实时把握每个节点的状态是须要的、可以根据节点实时状态做出调整
② zookeeper可将节点信息写入zookeeper上的一个ZNode。
③ 监听这个ZNode可获取它的实时状态变革。
服务器节点动态上下线:
① 如果某台服务节点下线,能随时洞察到变革,并举行通知
2023-09-20 00:31:47,347 [myid:] - INFO [main:Environment@109] - Client environment:zookeeper.version=3.5.7-f0fdd52973d373ffd9c86b81d99842dc2c7f660e, built on 02/10/2020 11:30 GMT
2023-09-20 00:31:47,349 [myid:] - INFO [main:Environment@109] - Client environment:host.name=node1-zookeep
2023-09-20 00:31:47,349 [myid:] - INFO [main:Environment@109] - Client environment:java.version=1.8.0_382
2023-09-20 00:31:47,351 [myid:] - INFO [main:Environment@109] - Client environment:java.vendor=Red Hat, Inc.
2023-09-20 00:31:47,351 [myid:] - INFO [main:Environment@109] - Client environment:java.home=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.382.b05-1.el7_9.x86_64/jre
...
复制代码
退出zookeeper客户端:
# 退出客户端 quit 命令
[zk: localhost:2181(CONNECTED) 3] quit
WATCHER::
WatchedEvent state:Closed type:None path:null
2023-09-20 00:36:28,568 [myid:] - INFO [main:ZooKeeper@1422] - Session: 0x1000028a4700001 closed
2023-09-20 00:36:28,568 [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@524] - EventThread shut down for session: 0x1000028a4700001
复制代码
停止zookeeper服务:
# 1.停止zookeeper
[root@node1-zookeep bin]# ./zkServer.sh stop
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg
2023-09-21 08:12:06,571 [myid:] - INFO [main:Environment@109] - Client environment:zookeeper.version=3.5.7-f0fdd52973d373ffd9c86b81d99842dc2c7f660e, built
2023-09-21 08:18:06,417 [myid:] - INFO [main:Environment@109] - Client environment:zookeeper.version=3.5.7-f0fdd52973d373ffd9c86b81d99842dc2c7f660e, built on 02/10/2020 11:30 GMT
...
复制代码
2.节点类型
创建长期节点:
如果是正常创建长期节点,使用create 节点名称 内容 即可,如: create /test01 "this is test node"
如果是创建携带编号的长期节点,则添加[ -s ]参数即可: create -s /test01 "this is test node"
# 创建一个节点名为test01,内容是this is test node
[zk: node2-zookeeper:2181(CONNECTED) 5] create /test01 "this is test node"
Created /test01
# 使用ls 查看所有节点
[zk: node2-zookeeper:2181(CONNECTED) 6] ls /
[test01, zookeeper]
# 也可以创建有多个层级的节点
# 如:在test01中再次创建一个demo01节点,内容是this is second level
[zk: node2-zookeeper:2181(CONNECTED) 7] create /test01/demo01 "this is second level"
Created /test01/demo01
# 查看所有节点
[zk: node2-zookeeper:2181(CONNECTED) 8] ls /
[test01, zookeeper]
# 查看test01中demo01
[zk: node2-zookeeper:2181(CONNECTED) 9] ls /test01
[demo01]
# 获取到test01中的信息
[zk: node2-zookeeper:2181(CONNECTED) 10] get -s /test01
2023-09-21 10:16:06,267 [myid:] - INFO [main:Environment@109] - Client environment:zookeeper.version=3.5.7-f0fdd52973d373ffd9c86b81d99842dc2c7f660e, built on 02/10/2020 11:30 GMT
2023-09-21 10:16:06,268 [myid:] - INFO [main:Environment@109] - Client environment:host.name=node1-zookeeper
2023-09-21 10:16:06,269 [myid:] - INFO...
# 查看节点
[zk: node2-zookeeper:2181(CONNECTED) 0] ls /
[test01, zookeeper]
# 发现创建的test03和test020000000002零时节点不在了
复制代码
一旦zookeeper客户端断开再次连接,零时节点就不存在了
修改节点的值
# 查看所有节点
[zk: node2-zookeeper:2181(CONNECTED) 0] ls /
[test01, zookeeper]
# 获取test01的值
[zk: node2-zookeeper:2181(CONNECTED) 1] get /test01
this is test node
# 修改test01节点的值为 "这是一个节点",有时候输入中文是显示为“...”
[zk: node2-zookeeper:2181(CONNECTED) 2] set /test01 "这是一个节点"
# 再次获取
[zk: node2-zookeeper:2181(CONNECTED) 3] get /test01