概述:
Zookeeper是一个分布式协调服务的开源框架。主要用来解决分布式集群中应用系统的一致性问题。
1、Zookeeper本质上是一个分布式的小文件存储系统,提供基于文件系统的目录树方式的数据存储,并且可以对树中的节点进行有效管理。
2、Zookeeper提供给客户端监控存储在zk内部数据的功能,从而可以达到基于数据的集群管理。
架构:1 Leader+n Follower
Leader:核心组件,事务请求的唯一处理者;也可以读请求。
Follower:处理读请求,转发事务请求给leader;
特点:
1、一个领导者,多个跟随者组成的集群;
2、Leader负责投票的发起和决议,更新系统状态;
3、Follower用于接收用户请求6\并向客户端返回结果,在选举Leader过程中参与投票;
4、集群中只要有半数以上节点存活,zk集群就能正常服务;
5、Leader完成写操作,会同时同步副本到Follower;
6、更新请求顺序执行;
7、数据更新原子性。
数据模型:
以目录树存储,Znode是最小存储单元
Znode类型:
持久性节点(Persisitent):创建后一直存在
临时性节点(Ephemerd):随会话结束被删除;临时节点不会创建子节点;
顺序性节点(Sequential):与持久、临时节点结合使用,主要显示在顺序上;
事务:
zk的事务是对zk服务器的状态改变操作(数据节点的新增、删除、更新)
数据节点每次发生新增、删除、更新操作,都会有事务请求,ZK会为其分配一个全局的事务ID,用ZXID表示(64位数字),可以对其排序。
Watcher机制:
zk使用Watcher机制实现分布式数据的发布/订阅功能
工作流程:1)客户端注册,并将Watcher对子昂存储在客户端的WatcherMaager中
2)当zk服务器出发Watcher事件后,会向客户端发送通知
3)客户端线程取出Watcher对象并执行回调逻辑
原理:
选举机制:集群中半数以上机器存活,集群可用,所以zk适合安装奇数台机器;
内部Leader+n Follower,Leader是选举产生
选举算法:
首次启动:启动顺序+id,第一个启动记为1,第二个启动记为2,。。。当id值大于1/2总机器数,启动的机器被选举为Leader,后面的都为Follower;
非首次启动:每次事务ID的zxid,优先选举zxid值最大的为Leader.
ZAB一致性:
ZAB协议是为分布式协调服务ZooKeeper专门设计的一种支持崩溃恢复和原子广播协议
1) Leader接收写请求,Follower如果接收,转给Leader;二阶段提交给Follower;
2)数据副本以Proposal(提议)形式发给所有Follower,如果收到超过半数反馈ACK,则执行Commit操作;再发送Commit给Follower;
不能正常反馈的Follower恢复后会进入数据同步阶段同步数据,再进入下一步操作。
zk提供的是最终一致性标准。zk所有节点接收与请求之后可以在一定时间内保证所有节点数都能看到该条数据。
HA(High Available):
高可用(7*24小时不中断服务),最关键策略是消除单点故障。
HDFS-HA:通过NameNode消除单点故障(Active/Standby)
工作要点:1)元数据管理方式需要改变
内存中各自保存一份元数据,均可读,只有Active状态的NameNode的可以做写操作
共享的Edits放在一个共享存储中管理(qjournal和NFS两个主流实现)
2)需要一个状态管理功能模块
实现了一个zkfailover,驻NameNode所在节点下,监控NameNode节点,zk进行状态标识,状态切换时,防止brain split,杀死之前的NameNode节点
3)必须保证两个NameNode能够SSH免密登录
4)隔离,同一时刻只有一个NameNode对外服务