最近,经理让每个小组成员做技术分享,我领到的任务是zookeeper,特此记录。
一、 zookeeper的来源
分布式的产生——分布式数据一致性问题。(分布式节点越多,越难达到一致性)
Zookeeper产生的目的 :就是解决分布式数据一致性的问题。
eg:Hadoop安装的时候,namenode也存在单点故障的问题,namenode可以配置多个,只有一个active的,剩下的都是standby的。standby可以无缝衔接active,保证集群正常运行,数据不丢失。
如果standby想要无缝连接,必须实时和active元数据保持一致。
那如何保持呢?定期拷贝?不可能!会出现数据延迟或者丢失的问题。
最好出现一个第三方平台,这个平台就是解决数据同步问题——zookeeper就做这样的事情。
二、 zookeeper是什么?
是一个分布式的、开放源码的分布式应用程序协调服务,是Google的chubby的一个开源的实现。
它提供了简单原始的功能,分布式应用可以基于它实现更高级的服务,比如分布式同步、配置管理、集群管理、集群管理、队列管理。
三、 zookeeper的安装
有三种模式:
单机模式(在自己windows电脑上)
集群模式(有真实的几台电脑集群)
伪集群模式(在虚拟机上)
安装步骤:http://www.cnblogs.com/jxwch/p/6433310.html
/conf/zoo.cfg文件 配置文件
命令:
启动:zkServer.sh start
停止:zkServer.sh stop
查看状态:zkServer.sh status
四、 zookeeper的总体架构
主从结构(选举机制)
主——leader
从——follower
//todo
五、 zookeeper的文件系统
两个核心:文件系统,监听机制
1) 文件系统
1. Zookeeper的文件系统类似于Linux,根节点是/
2. Zookeeper的文件系统的寻址只能通过绝对路径,不能通过相对路径。从根目录开始(所有的选址)eg: get /new03
3. linux下的路径可能有文件,可能是目录。
但是在zookeeper中不存在文件,也不存在目录,
但是既有文件的功能(存东西),又有目录的功能(有路径),叫znode。
它既不是文件,又不是目录,但是两者的功能都有了。
4. znode的分类:
按照生命周期:可以分为持久的znode和临时的znode。
二者的区别:临时节点在当前会话结束时,自动删除;持久节点只有用户手动删除才能被删除。
按有无编号:
可以分为4种:
持久无编号节点;
持久有编号节点;
临时无编号节点;
临时有编号节点。
注意:
1.“有编号”的编号是由父节点维护的,同一个父节点维护的编号会顺序增加,只要在相同的父节点下创建子节点,不管这个节点有无编号,都会顺序增加编号(只是无编号的不显示而已)
2.有编号的可以反复创建同名节点,每次都会自动添加一个顺序的编号。无编号的节点只能创建一次。
5. 临时节点不能有子节点。
有子节点的节点一定是持久节点;
没有子节点的节点可能是永久节点,也可能是临时节点.
6. 有几个zookeeper节点,数据就会保存几份,但是这几份数据是完全一样的。
eg;Master,Slave1,Slave2这三台机器上的zk数据是完全一样的。
7. 每个znode上存储的数据最大不要超过1M,最好不要超过1kb。
原因:
1. znode上存储的数据量越大,一致性越难维护(网络)。
2. 理论上只存储核心数据就可以了,znode的一般存储状态信息0和1。
8. znode上可以添加监听
监听添加的地方——znode上
监听:监测znode的状态(一举一动),包括数据改变/节点添加删除
2) 监听机制
监听就是对数据进行监控,zookeeper的监听对象是znode,会对znode的数据变化添加监听。通过监听机制,监听文件系统的数据变化(包括数据内容的变化/文件结果的变化)
监听事件:
nodeDataChanged 节点数据(内容)的改变
nodeCreate 节点创建事件
nodeDelete 节点删除事件
nodeChildrenChanged 子节点变化事件
用户对哪个节点的数据变化感兴趣,那么就在这个节点上添加监听(注册监听),一旦数据发生改变就会触发监听。
注册监听:
Ls : 显示子节点:子节点的变化(创建,删除)
get/getData : 监听节点数据内容:节点数据内容发生改变
exist
触发监听:
create
delete
set path data
六、zookeeper的shell
Ls /
Rmr path
Delete path
Stat path
Get path
Create [-e] [-s] znode节点 内容
-s:序号 sequential
-e:临时的 epherneral
七、zookeeper的api
在eclipse中安装zookeeper的可视化插件 zookeeper eclipse plugins 可以在help中下载
并导入zookeeper的jar包
public class TestZooConnection {
public static void main(String[] args) throws IOException {
ZooKeeper zk = new ZooKeeper("Master:2181", 5000, null);
System.out.println(zk);
}
}