zookeeper介绍(5)快速入门教程
1. Zookeeper
前言
由于之前总结的zk相对项目实战化,导致有人不好理解,特此准备zk的快速入门教程,仅供大家学习参考
1.1 ZK简介
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
ZooKeeper包含一个简单的原语集,提供Java和C的接口。
ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在$zookeeper_home\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本
1.2 ZK数据模型
1.3 ZK节点类型
1.4 ZK的安装
linux安装
# 准备工作
- jdk1.8 的安装 java -version 验证
# 下载zk (我选择的3.4.14) 上传服务器 sftp 或者 rz命令即可
- curl http://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/
# 解压 并修改文件名
- tar -zxvf zookeeper-3.4.14.tar.gz && mv zookeeper-3.4.14 zk
# 补充:解压后目录结构如下
# 修改zoo.cfg配置文件
- cd conf && cp zoo_sample.cfg zoo.cfg
# 创建文件夹
- mkdir /tmp/zookeeper
## zoo.cfg文件内容如下:
- tickTime=2000 心跳时间间隔
- initLimit=10 超时时间 10*2 10代表重连次数
- syncLimit=5 集群运行时同步数据时间 5*2
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes. 不会自动创建
- dataDir=/tmp/zookeeper
# the port at which the clients will connect
- clientPort=2181
# 启动 zk
切换到bin文件夹下 cd ../bin
/zkServer.sh start zoo.cfg文件绝对路径(默认不加去config加载zoo.cfg)
# 验证
1. jps (java进程查询) zk是java编写,可以使用jps进行查询 QuorumPeerMain代表zk启动成功
2. zkcli查询
./zkCli.sh -server ip:port -- -server ip:port 不写默认链接本机zk
./zkCli.sh help
docker安装
# 拉取zk镜像
- docker pull zookeeper:3.4.14
# 启动镜像
- docker run -d --name zk1 -p 2182:2181 zookeeper:3.4.14(也可以使用镜像id)
# 验证容器
- docker ps 查询正在运行的容器
# 客户端连接验证
- ./zkCli.sh -server localhost:2182 使用任意zk客户端命令连接到2182端口进行验证即可
1.5 客户端命令
# help 帮助指令 查询相关命令
# ls path 查询指定节点下的子节点
# create path data 创建节点 并绑定数据 默认是持久化节点
create /znode1 huhy 创建持久化节点 绑定数据huhy (默认是持久化节点)
create -s /znode2 huhy 创建持久化顺序节点 返回的节点名称/znode20000000001
create -e /znode3 huhy 创建临时节点(不允许有子节点)
create -e -s /znode4 huhy 创建临时性顺序节点(不允许有子节点) 返回的节点名称/znode40000000003
# stat path 查询节点状态
# set path newdata 修改节点数据
# ls2 path 递归查询path节点
# history 查询历史操作记录
# get path 获取节点绑定数据
# delete path 删除节点 不能含有子节点
# rmr path 递归删除
# quit 退出回话 临时节点自动清除 会话失效或者超时临时节点自动清除
1.6 Watch监听机制
一个Watch事件是一个一次性的触发器,当被设置了Watch的数据发生了改变的时候,则服务器将这个改变发送给设置了Watch的客户端,以便通知它们。
# ls path true 监控节点目录
# get path true 监控节点数据
ps: 可以同时启动两个客户端进行监听模拟 可以验证都是一次性的监听事件,一旦监听成功想要再次监听,就需要重新执行相关监听指令
java代码中的监听是永久监听的
1.7 zk集群
本文来自博客园,作者:huhy,转载请注明原文链接:https://www.cnblogs.com/huhongy/p/15019591.html