概述
- 是Apache提供的开源的用于进行服务协调和分布式管理的框架
- Zookeeper原来是Hadoop的子件之一,后来发现Zookeeper不止可以用于Hadoop也可以用于其他分布式环境下的管理,独立出来称为一个单独的项目
zookeeper可以解决的分布式问题
- 在分布式环境下,需要确定一个管理节点
- 如果只设置一个管理节点,存在单点故障
- 为了避免管理节点的单点故障,需要设置多个管理节点
- 需要在管理节点集群中来选举出一个主节点
- 要求管理节点集群能够应对崩溃恢复的场景
- 管理节点之间要进行信息的共享
- 确定一套选举算法
特点与节点类型
一、特点
- Zookeeper是一个树状结构(Znode树)
- 树状结构(Znode树)的根节点为 /
- Zookeeper的每一个节点称之为是znode节点
- 所有的znode节点都是从根节点开始计算
- 每一个znode节点都必须存储数据
- 每一个持久的znode节点都可以挂载子节点
- 每一个znode节点的路径都是唯一的。所以基于这一个特点,可以做集群的统一命名服务
- Znode树是维系在内存中的,即每一个znode节点中的数据也是维系在内存中,这样做的目的是方便快速查找
- 不能利用Zookeeper存储海量数据,原因:
- Znode树维系在内存中,并且多个Zookeeper存储的是相同的数据造成内存的浪费;
- Zookeeper是做分布式的协调服务而不是做存储服务
- Zookeeper提供了持久化机制,持久化的目录由zoo.cfg中的dataDir属性来决定
- Zookeeper会为每一次的事务(增加、删除、更新)提供一个全局的递增的事务id
- 任意一个路径是唯一的
二、节点类型
顺序节点 | 非顺序节点 | |
---|---|---|
持久节点 | Persistent_Sequential | Persistent |
临时节点 | ephemeral_Sequential | ephemeral |
节点详解
属性 | 说明 |
---|---|
cZxid | 这个节点创建的时候分配的事务id |
ctime | 这个节点创建的时间 |
mZxid | 这个节点的数据更新分配的事务id |
mtime | 这个节点的数据更新的时间 |
pZxid | 记录子节点发生增删的事务id |
cversion | 记录子节点增删的次数 |
dataVersion | 记录当前节点数据更新的次数 |
aclVersion | acl策略的更新次数 |
ephemeralOwner | 如果是持久节点,那么此项为0x0, 如果是临时节点,那么此项为当前sessionid |
dataLength 数据的字节个数 | |
numChildren 子节点个数 |
常用命令
一、客户端指令
指令 | 解释 |
---|---|
ls | 查看指定节点下的所有的子节点 |
create | 创建持久节点 |
create -e | 创建临时节点 |
create -s | 创建持久顺序节点 |
create -e -s | 创建临时顺序节点 |
delete | 删除节点 |
rmr | 递归删除 |
get | 获取节点数据和信息 |
set | 更新节点数据 |
quit | 退出客户端 |
二、服务器端指令
指令 | 解释 |
---|---|
sh zkServer.sh start | 启动服务器 |
sh zkServer.sh status | 查看服务器状态 |
sh zkServer.sh stop | 停止服务器 |
sh zkServer.sh restart | 重启服务器 |
单机安装:
1. 关闭防火墙:
a. 临时关闭service iptables
b. 永久关闭stop chkconfig iptables off
2. 安装JDK,JDK要求是1.7及以上
3. 下载Zookeeper的安装包
http://archive.apache.org/dist/zookeeper/zookeeper-3.4.7/
4. 解压安装包:tar -xvf zookeeper-3.4.7.tar.gz
5. 进入到安装目录的子目录conf下
6. 复制:cp zoo_sample.cfg zoo.cfg Zookeeper在启动的时候会默认去找zoo.cfg
7. 编辑zoo.cfg,修改属性dataDir
安装完成。在bin目录启动zookeeper并查看状态
- 当服务器端启动成功之后,可以执行jps命令查看是否有Zookeeper的QuorumPeer进程
- 或者在服务器端启动成功之后,可以执行一下命令查看服务器端状态
sh zkServer.sh start
sh zkServer.sh status
集群安装
1. 关闭Linux(版本是Centos6.X)的防火墙
临时关闭防火墙:service iptables stop
永久关闭防火墙:chkconfig iptables off
2. 下载安装JDK。注意至少是JDK1.6及以上版本才能使用
3. 下载或者上传Zookeeper的压缩包
http://archive.apache.org/dist/zookeeper/zookeeper-3.4.7/
4. 解压压缩包 tar -xvf zookeeper-3.4.7.tar.gz
5. 进入Zookeeper的安装目录下的子目录conf目录中
6. 将conf目录下的zoo_sample.cfg复制为zoo.cfg。Zookeeper在启动的时候会自动寻找zoo.cfg,根据其中的配
置来启动存储数据
cp zoo_sample.cfg zoo.cfg
7. 编辑zoo.cfg文件
```xml
vim zoo.cfg
```
8. 修改其中的属性dataDir,指定数据的存储目录
9. 在zoo.cfg文件的末添加要构建集群的服务器地址
编号要求是数字并且不能重复
原子广播端口号和选举端口号只要不和当前已经使用的端口号冲突即可
#格式:server.编号=IP地址:原子广播端口:选举端口
#例如:
server.1=192.168.199.11:2888:3888
server.2=192.168.199.12:2888:3888
server.3=192.168.199.13:2888:3888
10. 在dataDir的指定目录下创建数据存储目录并进入tmp目录
11. 在数据存储目录下编辑新的文件,文件名为myid
在myid文件中填入当前服务器所对应的编号。例如当前服务器的地址为192.168.199.11,则在zoo.cfg文件中指
定编号为1,那么就在myid文件中添加数字1
vim myid
12. 将要配置的集群中的其他服务器按照上述步骤配置。或者可以将当前服务器中的配置拷到其他服务器上,修
改对应的myid ,这里复制过去即可
scp -r zookeeper-3.4.14 root@192.168.199.12:/home/software/
scp -r zookeeper-3.4.14 root@192.168.199.13:/home/software/
复制完成后吧myid分别改为对应的id号
13. 集群全部配置好之后,依次启动每一台服务器,进入Zookeeper安装目录下的bin目录
sh zkServer.sh start
sh zkServer.sh status
注意:
14. 在Zookeeper集群中,如果单独启动一台服务器,是无法对外提供服务的
15. 当把集群中的服务器都启动之后,可以利用sh zkServer.sh status
来查看当前节点的状态,如果出现leader或者follower,则说明启动成功。
需要注意zoo.cfg里面的路径配置。dataDir=/home/software/zookeeper-3.4.14/tmp
需要把原路径全部删除从新写。