一、什么是Zookeeper?
Zookeeper是一个高效的分布式一致性协调服务,可以提供配置信息管理、命名、分布式同步、集群管理、数据库切换等服务。它不适合用来存储大量信息,可以用来存储一些配置、发布与订阅等少量信息。(Zookeeper 作为 Hadoop 项目中的一个子项目,是 Hadoop 集群管理的一个必不可少的模块,它主要用来控制集群中的数据,如它管理 Hadoop 集群中的 NameNode,还有 Hbase 中 Master Election、Server 之间状态同步等。)
二、Zookeeper设计目的
- 最终一致性:client不论连接到哪个Server,展示给它都是同一个视图,这是zookeeper最重要的性能。
- 可靠性:具有简单、健壮、良好的性能,如果消息m被到一台服务器接受,那么它将被所有的服务器接受。
- 实时性:Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。但由于网络延时等原因,Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口。
- 等待无关(wait-free):慢的或者失效的client不得干预快速的client的请求,使得每个client都能有效的等待。
- 原子性:更新只能成功或者失败,没有中间状态。
- 顺序性:包括全局有序和偏序两种:全局有序是指如果在一台服务器上消息a在消息b前发布,则在所有Server上消息a都将在消息b前被发布;偏序是指如果一个消息b在消息a后被同一个发送者发布,a必将排在b前面。
三、Zookeeper的安装
- 前置环境:已安装好jdk
- 下载zookeeper的安装包:官网下载,下载和解压到/usr/local中
- 创建数据、日志文件夹:
mkdir /usr/local/zookeeper/data mkdir /usr/local/zookeeper/log
- 设置核心配置文件:
#打开核心配置 mv /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg #设置核心配置文件 vim /usr/local/zookeeper/conf/zoo.cfg #填入如下配置 dataDir=/usr/local/zookeeper/data dataLogDir=/usr/local/zookeeper/log
- 启动zookeeper
cd /usr/local/zookeeper/bin #启动zookeeper ./zkServer.sh start
三、Zookeeper的文件系统
文件系统的数据结构
zookeeper是用一个树形结构来进行数据存储管理的。它不适合用来存储大量信息,可以用来存储一些配置、发布与订阅等少量信息。如下图所示:
文件系统的节点(znode)
什么是znode?
每个子目录项如 NameService 都被称作为znode,和文件系统一样,我们能够自由的增加、删除znode,在一个znode下增加、删除子znode,每个znode都是可以存储数据的。
znode的分类
- persistent-持久化目录节点:持久节点就是节点被创建后会一直存在服务器,直到删除操作主动清除,这种节点也是最常见的类型。
- persistent_sequential-持久化顺序编号目录节点:持久顺序节点就是有顺序的持久节点,节点特性和持久节点是一样的,只是额外特性表现在顺