简介
ZooKeeper是一个分布式应用协调服务,主要用于解决分布式集群中应用系统的一致性问题;
使用场景
- 统一命名服务
- 集群管理
- 分布式锁
- 指定节点下,创建临时顺序节点,判断这个节点是否为指定节点下的最小值,如果是,获取锁
- 如果不是,监控前一个节点的删除事件,删除事件发生,重新判断是否为最小节点,直至获取锁;
- 释放锁是删除对应的节点,临时顺序节点,可通过释放连接删除;
架构
Zookeeper集群是由一组服务器(server)节点组成,一个节点是leader,其他节点为Follower,客户端连接到Zookeeper集群执行写请求时,会首先被发送到Leader节点,Leader节点收到请求,首先将变更写入磁盘,再将变更内存,最后将数据变更同步到Follower;Leader节点服务失效时,Follwer节点会快速响应选出一个新的Leader来处理客户端强求;
数据模型
-
Zookeeper主要用于管理协调数据,不能存储大型数据集;
-
树形命令空间,
-
数据保存在内存中,提高吞吐量降低延迟
-
Znode来表示命令空间的名称节点,原子化读取或写入;
- 数据量小
- 维护一个状态结构,包括版本号,ACL(访问控制列表),时间戳;
- Znode上可以设置一个观察者(Watcher),如果数据变更,Zookeeper通知客户端;
Znode节点类型
- 持久节点
- 持久顺序节点
- 临时节点(连接会话活动期)
- 临时顺序节点
Zookeeper 集群模式安装
-
下载软件包 https://zookeeper.apache.org/releases.html
-
java8环境配置
-
文件解压
$ tar -zxvf apache-zookeeper-3.6.4-bin.tar.gz -C /home
-
配置文件
//安装目录下新建文件夹dataDir,存放Zookeeper相关数据 mkdir dataDir echo 1 >myid //conf文件夹新建配置文件zoo.cfg,加入以下内容 #心跳频率,单位ms tickTime=2000 #初始连接等待最大心跳数 initLimit=5 #主从服务器通信等待最多心跳数 syncLimit=2 dataDir=/home/zookeeper-3.6.3/dataDir #访问端口 clientPort=2181 #标识不同的Zookeeper服务 server.1=192.168.126.134:2888:3888 server.2=192.168.126.135:2888:3888 server.3=192.168.126.136:2888:3888 //文件分发 scp -r /home/zookeeper-3.6.4/ linux01:/home scp -r /home/zookeeper-3.6.4/ linux02:/home //myid 每台服务器dataDir文件夹创建myid文件,输入对应的id,即配置文件中的server.id //进入每个节点启动ZooKeeper,同时启动; bin/zkServer.sh start
命令行操作
//连接服务器 bin/zkCli.sh -server linux00:2181 //查询节点列表 ls / // 创建节点 create /zk "mydata" //创建子节点 create /zk/node1 "nodedata" //查看节点数据 get /zk //查看节点详细信息 stat /zk //修改节点 set /zk "mydataUpdate" //删除节点,若有子节点先删除子节点,负责删除失败; delete /zk