1 zookeeper简介(面试)
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,(是Google的Chubby一个开源的实现),是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
2 为什么需要zookeeper?
分布式应用中出现“部分失败”(例如两个节点通过网络发送消息,发送者无法知道消息是否发送成功,接受者由于网络错误,没有接收到该消息,或 是否在网络发生错误时,接收者已经接收到消息)
Zookeeper不能避免部分失败,zookeeper可以提供一组工具,使分布式应用发送部分失败进行正确处理。
3 zookeeper单机版
安装:
A:安装并配置jdk
B:下载ZooKeeper:http://pan.baidu.com/s/1pJlwbR9
C:解压:tar -zxvf zookeeper-3.4.5.tar.gz 重命名:mv zookeeper-3.4.5 zk
D:ZK配置
ZK的配置文件在conf/zoo.cfg, 通过拷贝模板文件的生成ZK配置文件
cp zoo_sample.cfg zoo.cfg
修改zoo.cfg配置文件中的属性
#tickTime指定了ZK中基本的时间单元(毫秒)
tickTime=2000
#dataDir指定ZK存储持久化数据全路径
dataDir=/home/hadoop/zookeeper-3.4.6/data/
#clientPort属性指定了客户端连接端口号
clientPort=2181
E:配置环境变量:为了今后操作方便,我们需要对Zookeeper的环境变量进行配置,方法如下在/etc/profile文件中加入如下内容:
export ZOOKEEPER_HOME=/usr/local/zk
export PATH=.:HADOOP H OME/bin: ZOOKEEPER_HOME/bin:JAVA H OME/bin: PATH
F:启动ZooKeeper的Server:
启动当前节点ZK服务
zkServer.sh start
测试ZK的服务的客户端端口号(2181)
>echo ruok|nc localhost 2181
关闭ZooKeeper的Server:zkServer.sh stop
4 zookeeper特点
A:ZK具有简单性
Zookeeper核心是一个精简的文件系统,例如排序和通知
B:ZK具有表现力
ZK的基本操作是一组丰富的构建,可以用于实现多种协调数据结构和协议。
包括:分布式队列、分布式锁和一组节点中“领导选举”。
C:ZK具有高可用
ZK集群节点数量3个以上。ZK运行在一组机器节点上,并且设计上是高可用性的。ZK避免单点故障(single point of failure,SPOF)
D: ZK 采用松耦合交互方式。
数据汇集(rendezvous)机制:让进程在不了解其他进程的情况下能够彼此进行信息交互,参与的各方可以不必同时存在。
E: ZK是一个资源库
5 zookeeper中组成员关系
ZK可以将它看成具有高可用特征的文件系统,这个文件系统没有文件和目录,统一使用节点概念,称为znode; znode构成一个具有层次结构列表;
6 ZK服务
6.1 数据模型
ACL(访问控制列表) ZK具有层次型的结构,树中每个节点称为znode,znode用于存储数据,并且进行关联 形成ACL;
ZK被设计用于实现协调服务器,而不是存储大量的数据存储,znode存储数据的大小被限制到1MB以内;
ZK可以进行数据访问具有原子性;
znode有两种分类:短暂znode和持久的;
顺序号:顺序znode 名称中包含 ZooKeeper-指定顺序号的znode;
6.2 操作
create(创建一个znode),delete(删除znode不能子节点),exists, getACL()/setACL(访问/设置访问列表),getChildren(得到znode子节点列表),sync(同步客户端的znode视图和ZK同步)