文章目录
入门简介
是什么
zookeeper=类似unix文件系统+通知机制+Znode节点
作用:服务注册+分布式系统的一致性通知协调
一句话:ZooKeeper是一个分布式协调技术、高性能的,开源的分布式系统的协调(Coordination)服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用程序一致性和分布式协调技术服务的软件。
什么鬼看不懂!那大白话:美女班主任+微信群
去哪下
怎么玩
- 统一命名服务(Name Service如Dubbo服务注册中心)
在Dubbo实现中:
1.服务提供者在启动的时候,向ZK上的指定节点
/dubbo/ $ {serviceName}/providers目录下写入自己的URL地址,
这个操作就完成了服务的发布。
2.服务消费者启动的时候,订阅/dubbo/$ {serviceName}/providers目录下的提供者URL地址,并向/dubbo/$ {serviceName} /consumers目录下写入自己的URL地址。3.注意,所有向ZK上注册的地址都是临时节点,这样就能够保证服务提供者和消费者能够自动感应资源的变化。
另外,Dubbo还有针对服务粒度的监控,方法是订阅/dubbo/$ {serviceName}目录下所有提供者和消费者的信息
- 配置管理(Configuration Management如淘宝开源配置管理框架Diamond)
- Java操作API
安装配置
Linux下安装
npm源码包安装

docker安装
启动docker: systemctl start docker
搜索: docker search zookeeper
下载: docker pull zookeeper
运行: docker run --privileged=true -d --name zookeeper --publish 2181:2181 -d zookeeper:latest
查看容器中是否运行:docker ps
#使用命令查看拉取到的镜像
docker images
3.启动Zookeeper
https://www.cnblogs.com/caoweixiong/p/12325410.html
# 下面开始建立自己要挂载的目录文件夹
# 本人喜欢把自己安装的东西放在opt 目录下面
#创建宿主机挂载目录
mkdir -p /opt/zookeeper/conf
mkdir -p /opt/zookeeper/data
mkdir -p /opt/zookeeper/log
docker run -d --name zk --restart always zookeeper
#94e5efbe439e111cc368e16c75a58451aecf47dcd99299c269eacdf3de216619
#把容器中的配置文件复制出来
docker cp -a zk:/conf/zoo.cfg /opt/zookeeper/conf/zoo.cfg
docker stop zk
docker rm zk
docker run -d --name zk --restart always \
-p 2181:2181 -p 2888:2888 -p 3888:3888 \
-v /opt/zookeeper/conf/zoo.cfg:/conf/zoo.cfg \
-v /opt/zookeeper/data:/data \
-v /opt/zookeeper/log:/datalog \
zookeeper
docker run -d --name zk --restart always -p 2181:2181 -p 2888:2888 -p 3888:3888 -v /opt/zookeeper/conf/zoo.cfg:/conf/zoo.cfg -v /opt/zookeeper/data:/data -v /opt/zookeeper/log:/datalog zookeeper
完成,三个端口分别是:zookeeper客户端端口,跟随端口,选择端口
是否启动
ps-ef|grep zookeeper
端口号:netstat -anp|grep 2181
开启服务+客户端连接
启动+关闭服务
CentOS7下面nc命令的安装
1 路径 /run/media/root/CentOS 7 x86_64/Packages
2 命令 rpm -ivh nmap-ncat-6.40-7.el7.x86_64

echo ruok | nc 192.168.203.1 2181
客户端连接
连接:./zkCli.sh
退出:quit
数据模型/znode节点深入[葡萄]
zookeeper内部维护了一套类似UNIX的树形数据结构:由znode构成的集合,
znode的集合又是一个树形结构,
每一个znode又有很多属性进行描述。 Znode = path + data + Stat

基础命令和Java客户端操作
zkCli的常用命令操作
一句话:和redis的KV键值对类似,只不过key变成了一个路径节点值,v就是data
K-V==>crud等 (rmr)递归删
path Create节点 set设置 1M字符串
echo 四字命令 | nc 主机IP zookeeper端口
echo stat | nc 192.168.203.1 2181

zookeeper支持某些特定的四字命令,他们大多是用来查询ZK服务的当前状态及相关信息的,通过telnet或nc向zookeeper提交相应命令,如:echo ruok | nc 127.0.0.1 2181
四字命令

Java客户端操作

linux 😒
win:cli
HelloZK:方法参数ctrl+T /ctrl+q
接口可以new:匿名内部类
通知机制watch
通知机制-读
客户端注册监听它关心的目录节点,
当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,
zookeeper会通知客户端。
是什么
ZooKeeper 支持watch(观察)的概念。客户端可以在每个znode结点上设置一个观察。如果被观察服务端的znode结点有变更,那么watch就会被触发,这个watch所属的客户端将接收到一个通知包被告知结点已经发生变化,把相应的事件通知给设置过Watcher的Client端。
一句话:异步回调的触发机制
Zookeeper里的所有读取操作:getData(),getChildren()和exists()都有设置watch的选项
watch事件理解
1.一次触发
2.发往客户端
3.为数据设置watch
4.时序性和一致性
code
- 一次性
.close()
- 多次(命名服务)
不能关ZK ==thread.sleep(long.max)
多次通知 new value+old value
新建watch new value

3万+

被折叠的 条评论
为什么被折叠?



