85人参与 • 2024-08-02 • 微服务
zookeeper 是开源的,是一个基于观察者模式设计的分布式服务管理框架,负责存储和管理大家都关心的数据,然后接收观察者的注册,一旦这些数据发生变化,zookeeper 负责通知已经注册的观察者。zookeeper 相当于文件系统 + 通知机制。
zookeeper 数据模型类似 unix 文件系统(树状),每个节点称为 znode,每个 znode 默认可以存储 1mb 数据(对于记录状态性质的数据来说,足够使用)。
znode 节点类型有 4 种:
zookeeper 稳定 3.5.7 版本下载:https://archive.apache.org/dist/zookeeper/zookeeper-3.5.7/
在 hostname 为 hadoop101、hadoop102、hadoop103 的三个节点上部署 zookeeper 集群。
在 hadoop101 上解压压缩包:
tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz
mv apache-zookeeper-3.5.7-bin/ zookeeper
cd zookeeper/
# 创建 zookeeper 数据目录
mkdir zkdata
在 /zookeeper/zkdata 目录下创建一个名为 myid 的文件,内容输入文件编号 1。
cd zookeeper/conf
mv zoo_sample.cfg zoo.cfg
打开 zoo.cfg,进行以下修改添加:
ticktime=2000
initlimit=5
synclimit=2
datadir=/home/sy/zookeeper/zkdata
datalogdir=/var/log/zookeeper/datalog
reconfigenabled=true
standaloneenabled=false
clientport=2181
server.1=hadoop101:2888:3888
server.2=hadoop102:2888:3888
server.3=hadoop103:2888:3888
将 hadoop101 中已经配置好的 zookeeper 目录拷贝到 hadoop102 和 hadoop103 上,注意 hadoop102 和 hadoop103 需要分别修改 myid 的内容为 2、3。
在三台服务器的 zookeeper 目录下分别输入命令:
bin/zkserver.sh start
bin/zkserver.sh status
# zookeeper 服务端和客户端心跳时间,单位毫秒
ticktime=2000
# leader 和 follower 初始连接时能容忍的最多心跳数(ticktime 数量)
initlimit=5
# leader 和 follower 之间通信时间如果超过 synclimit * ticktime,leader 会认为该 follwer 挂掉,从服务列表中删除
synclimit=2
# 保存 zookeeper 数据的目录
datadir=/home/sy/zookeeper/zkdata
# 保存 zookeeper 事务日志的目录,与上面分开存储提高系统性能
datalogdir=/var/log/zookeeper/datalog
# 集群启动后是否可以修改现有配置
reconfigenabled=true
# zookeeper 是否以独立模式运行,集群模式下设为 false
standaloneenabled=false
# 客户端连接端口
clientport=2181
# 集群内有几个节点以下就写几行配置
# a 表示服务器的编号,与该服务器 myid 文件中的编号必须相同
# b 表示服务器的 hostname 或 ip
# c 表示服务器中 follower 和 leader 交换信息的端口
# d 表示重新选举时服务器相互通信的端口。
server.a=b:c:d
...
以三台服务器为例。
首先需要进入 zookeeper 安装包的 bin 目录下,输入以下命令进入客户端:
./zkclient.sh
查看节点命令:
# 查看根节点下的所有子节点
ls /
# 查看某个子节点的值,path 可以有多级,每级用 / 隔开(与 linux 文件系统访问路径一致,有 tab 提示)
ls /<path>
# 监听节点的子节点(执行一次命令表示监听一次,要想再次监听,就要再执行一次命令)
ls -w /<path>
# 查看某个子节点的值和其它详细信息
ls2 /<path>
# 有以下详细信息:
# czxid 节点的事务id
# ctime 节点创建时间的id
# mzxid 最后一次被修改的事务id
# mtime 最后一次修改时间
# pzxid 最后一次修改该节点的子节点的事务 id
# cversion 子节点的版本号
# dataversion 当前数据的版本号,默认 0,每被修改一次会累加1
# aclversion 权限更迭版本
# ephemeralowner 临时节点的客户端会话 id
# a)节点为持久化节点时:ephemeralowner 值为0
# b)节点为临时节点时:ephemeralowner 值表示该节点所属客户端会话 id
# datalength 存储数据的长度
# numchildren 子节点个数
create /<path> "<node-value>"
create -s /<path> "<node-value>"
create -e /<path> "<node-value>"
create -e -s /<path> "<node-value>"
# 获取节点数据
get /<path>
# 监听节点数据的变化(执行一次命令表示监听一次,要想再次监听,就要再执行一次命令)
get -w /<path>
set /<path> "new value"
删除没有子节点的节点:
delete /<path>
删除带有子节点的节点:
deleteall /<path>
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论