概念
ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
安装部署
mkdir -p /data/zookeeper/logs;
mkdir -p /data/zookeeper/data;
cd /data/zookeeper;
tar xzf zookeeper-3.4.9.tar.gz;
ln -s zookeeper-3.4.9 default;
cd /data/zookeeper/default/conf;
echo "" > zoo.cfg;
#ticketTime为Client-Server通信心跳时间,单位为毫秒
echo "tickTime=2000" >> zoo.cfg;
#initlimit为Leader-Follower初始化容忍连接次数
echo "initLimit=10" >> zoo.cfg;
#syncLimit为Leader-Follower通信容忍同步次数
echo "syncLimit=5" >> zoo.cfg;
echo "dataDir=/data/zookeeper/data" >> zoo.cfg;
echo "dataLogDir=/data/zookeeper/logs" >> zoo.cfg;
#接受客户端请求端口
echo "clientPort=2181" >> zoo.cfg;
#快照文件保留个数
echo "autopurge.snapRetainCount=60" >> zoo.cfg;
#清理快照文件频率,单位小时,24小时清理一次
echo "autopurge.purgeInterval=24" >> zoo.cfg;
echo "" >> zoo.cfg;
#zookeeper集群server.id=服务器域名:LF通信端口:选举端口
echo "server.1=s100_1:2888:3888" >> zoo.cfg;
echo "server.2=s100_2:2888:3888" >> zoo.cfg;
echo "server.3=s100_3:2888:3888" >> zoo.cfg;
echo "1" > /data/zookeeper/data/myid;
cd /data/zookeeper/logs;
/data/zookeeper/default/bin/zkServer.sh start;
复制代码
常用命令
start
start-foreground
stop
restart
status
upgrade
print-cmd
zk 启动前初始化环境变量
[zk: localhost:2181(CONNECTED) 0] zkCli.sh
ZooKeeper -server host:port cmd args
stat path [watch]
set path data [version]
ls path [watch]
delquota [-n|-b] path
ls2 path [watch]
setAcl path acl
setquota -n|-b val path
history
redo cmdno
printwatches on|off
delete path [version]
sync path
listquota path
rmr path
get path [watch]
create [-s] [-e] path data acl
addauth scheme auth
quit
getAcl path
close
connect host:port
复制代码
特性
每个子目录项如 NameService 都被称作为 znode,和文件系统一样,我们能够自由的增加、删除 znode,在一个 znode 下增加、删除子 znode,唯一的不同在于 znode 是可以存储数据的。
PERSISTENT
PERSISTENT_SEQUENTIAL
EPHEMERAL
EPHEMERAL_SEQUENTIAL
客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,zookeeper 会通知客户端。
CREATE:创建子节点的权限。
READ:获取节点数据和子节点列表的权限。
WRITE:更新节点数据的权限。
DELETE:删除子节点的权限。
ADMIN:设置节点 ACL 的权限。
应用场景
百度 disconf https://github.com/knightliao/disconf
alibaba dubbo
基于 EPHEMERAL_SEQUENTIAL 节点 + Watcher 机制
相较于 redis 锁,zk 锁可靠性更高,效率有损失
创建 PERSISTENT_SEQUENTIAL 节点 + Watcher 机制构建消息队列
客户端
org.apache.zookeeper 原生,存在各种不足
org.apache.curator(建议使用)
ZAB
https://zhuanlan.zhihu.com/p/27335748
评论