1.概述
- Zookeeper是Yahoo!(雅虎)开发后来贡献给了Apache的一套用于分布式管理和协调的机制
- Zookeeper早期是Hadoop的组件,后来独立出来形成了单独的项目
- Zookeeper本身提供了中心化服务:统一配置、统一命名、提供分布式锁、提供组服务
官方地址:https://zookeeper.apache.org/
2.安装
- 单机模式:在一台服务器上安装,启动这个框架的部分功能
- 伪分布式:在一台服务器上安装,利用多个进程来模拟集群环境,启动这个框架的大部分甚至全部功能
- 完全分布式:在集群中安装,能启动这个框架的全部功能
下面为单机模式的安装步骤
1.准备好安装包
2.安装时注意一下两点
- 安装JDK,版本为1.8
- 关闭防火墙(service iptables stop chkconfig iptables off)
3.解压文件
tar -xvf zookeeper-3.4.8.tar.gz
解压后出现zookeeper-3.4.8 文件夹
4.进入conf目录进行配置
将zoo_sample.cfg 复制一份并吗,命名为zoo.cfg
cp zoo_sample.cfg zoo.cfg
5.编辑zoo.cfg 文件,修改路径为实际的绝对路径
修改为
6.启动zookeeper
进入到zookeeper 的bin目录下
执行命令:
sh zkServer.sh start
7.查看启动情况
可以通过命令 jsp 查看
如果出现QuorumPeerMain 单机下说明启动成功
8.分布式的需要在执行以下命令查询
sh zkServer.sh status
现在查询的就是单节点
Mode: standalone
9.启动客户端
sh zkCli.sh
查看根节点的子节点 使用命令 ls /
继续查看下面节点
3.节点的创建
创建节点时,需要注意:
在Zookeeper中,要求每一个节点必须携带数据,这个数据可以是对节点的描述或者是配置信息
例如:执行命令( create /video ),不添加描述信息或者配置信息,那么就不会创建成功:
执行如下命令,创建成功 ,暂时没有数据,给个空的也行
create /video ''
可以在单引号中描述节点的功能 如:
创建一个movie 的节点,添加描述 是一个管理电影的服务
create /movie 'manage movie servers'
如果在movie 下还有很多子节点,且希望这些子节点都有某一个配置信息,那么就可以考虑将这些配置信息放到父节点当中(在单引号中配置)-----这就是zookeeper中心化服务中的统一配置
注意:
Zookeeper 中没有相对路径,全是绝对路径
4.ZooKeeper的特点
- Zookeeper默认端口号为2181
- Zookeeper本身是一个树状结构,根节点是/
- Zookeeper中的每一个节点称之为Znode,这棵树称之为Znode树
- Zookeeper刚创建的时候,自带了/zookeeper节点
- 在Zookeeper中,要求每一个节点必须携带数据,这个数据可以是对节点的描述或者是配置信息
- 在Zookeeper中,不存在相对路径的说法,所有的路径必须从/开始计算
- Zookeeper会将节点携带的数据维系在内存以及磁盘中
- 数据在磁盘上的存储位置由dataLogDir来决定。如果不额外指定,dataLogDir的值默认和dataDir是一致的
- 在Zookeeper中,会将每一个写操作看作是一个事务,给这个事务分配一个全局递增的编号,称之为事务id,简写为Zxid
- 临时节点不能挂载子节点;任意一个持久节点都可以挂载节点
- Zookeeper中不能存在同名路径
5.ZooKeeper的常用命令
命令 | 解释 |
sh zkServer.sh start | 启动Zookeeper |
sh zkServer.sh stop | 关闭Zookeeper |
sh zkServer.sh status | 查看运行状态 |
sh zkCli.sh | 启动客户端 |
ls / | 查看根节点的子节点 |
create /video 'manage video servers' | 创建节点 |
delete /video | 删除节点 - 要求节点为空 |
rmr /music | 递归删除 |
set /news 'news servers' | 修改节点数据 |
get /news | 获取节点数据 |
quit | 退出客户端 |
create -e /video '' | 创建临时节点 |
create -s /news '' | 创建顺序节点 |
create -e -s /music '' | 创建临时顺序节点 |
6.ZooKeeper中的节点信息
属性 | 解释 |
cZxid | 节点创建的事务id |
ctime | 节点创建的时间 |
mZxid | 节点数据修改的事务id |
mtime | 节点数据修改的时间 |
pZxid | 子节点个数变化的事务id |
cversion | 子节点个数变化的次数 |
dataVersion | 节点数据变化的次数 |
aclVersion | 节点权限变化的次数 |
ephemeralOwner | 如果是持久节点,则此项值为0 如果是临时节点,则此项为sessionid |
dataLength | 数据的字节个数 |
numChildren | 子节点个数 |
7.ZooKeeper中的节点类型
持久节点 | 临时节点 | |
非顺序节点 | Persistent | Ephemeral |
顺序节点 | Persistent_Sequencial | Ephemeral_Sequencial |