Zookeeper(一)
Zookeeper概述
一. 简介
- Zookeeper是一款Yahoo(雅虎)开发的分布式协调框架,后来贡献给了Apache。
- Zookeeper提供了中心化服务(注册中心):统一配置信息、统一命名、提供分布式锁、提供组服务。
- 有三种运行模式
- 单机模式:只在一台服务器上安装,只能启动这个框架一部分的功能。
- 伪分布式:只在一台服务器上安装,能提供这个框架的大部分甚至全部功能。
- 完全分布式:在集群中安装,能提供这个框架的所有功能。
二. 特点
- 本身是一个树状结构,根节点是 /
- 每一个节点都称之为Znode节点 -Znode树。
- 每一个节点必须携带数据,这个数据一般是对节点的描述或者配置信息。
- 不存在相对路径,所有的节点都必须从根节点开始计算。
- Znode会将Znode树维系在内存以及磁盘中。
- 维系在内存中的目的是为了查询快
- 维系在磁盘中的目的是为了可靠
- 理论上来说,可以将Zookeeper作为缓存服务器使用(将键作为节点名,值作为数据存储),但是导致内存被大量占用,而且相对而言Zookeeper的树结构所耗费的空间比Redis的键值对结构要多,导致Zookeeper的分布式协调能力降低,所以实际开发过程中一般不作为缓存服务器使用。
- 数据在磁盘上的存储位置由dataDir来决定。
- 在Zookeeper中,会将每一个写操作(connect,create,set,delete,rmr等)看作是一个事务,Zookeeper会给事务分配一个全局递增的编号,称之为事务id,简写为Zxid。事务id在计算的时候,只需要关心是整个过程中的第几个写操作即可。
- 临时节点不能挂在子节点,持久节点可以挂载。
- 不允许有同名节点。
三. 命令
命令 | 作用 |
---|---|
create /video 'manage video servers' | 创建video节点 |
create -e /music '' | 创建临时节点music |
create -s /music '' | 创建顺序节点 |
create -e -s /music '' | 创建临时顺序节点 |
delete /video | 删除video节点(不能有子节点) |
rmr /video | 递归删除(连子节点一起删除 |
ls / | 查看根节点 |
set /log '' | 修改数据 |
get /log | 获取数据及节点信息 |
四. 节点信息/属性
属性 | 作用 |
---|---|
cZxid | 节点创建的事务id |
ctime | 节点创建的时间 |
mZxid | 节点数据修改的事务id |
mtime | 节点数据修改的时间 |
pZxid | 子节点个数变化的事务id |
cversion | 子节点个数变化的次数 |
dataVersion | 节点数剧变化的次数 |
aclVersion | 节点的权限变化 |
ephemeralOwner | 持久节点:0 临时节点:sessionId(非0) |
dataLength | 数据的字节个数 |
numChildren | 子节点个数 |
- 在Zookeeper中,会为每一个写操作分配一个全局递增(即,不区分节点)的事物id
- 一个节点刚创建的时候,cZxid,mZxid,pZxid一致。
- 关于各操作给节点信息带来的变化,可以试试以下练习:
五. 节点类型
持久节点 | 临时节点 | |
---|---|---|
顺序节点 | Persistent_Sequential | Ephemeral_Sequential |
非顺序节点 | Persistent | Ephemeral |