一、什么是Zookeeper?
如果我们把HADOOP系列看成动物园的话 Zookeeper的功能就和它的名字一样了,管理各种小动物,比如Hadoop、Hive……。
Logo:
ZooKeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠的分布式协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。
Zookeeper(以下简称ZK)的开发动机就是为了减轻分布式应用从头开发协作服务的负担。
二、Zookeeper干什么
- 统一命名服务(Name Service)
- 配置管理(Configuration Management)
- 集群管理(Group Membership)
- 共享锁(Locks)
- 队列管理(基于锁)
三、Zookeeper实际应用
- HADOOP并行计算时控制reduce函数接受调度
- 各种大型分布式中间件自身集群协调控制和运行控制
- 管理hbase集群
- 雅虎的Message Broker:高效的发布/订阅系统,zoo在其管理着用于备份和数据迁移的主题
- 雅虎的爬虫的抓取服务
- 淘宝商品排查系统
- 百度hadoop集群控制和自动化运维平台
- lucene + hadoop 分布式运行框架Nut(开源产品)
- Twitter开发了一款分布式实时统计系统Rainbird
四、Zookeeper架构
五、Zookeeper基本原理
Zookeeper的数据模型
Zookeeper数据节点类型
- 临时节点(EPHEMERAL):随回话结束,被服务端干掉
- 永久节点(PERSISTENT):可以持久化
- 序列节点 (SEQUENCE): 顺序节点
临时节点
服务器节点
- leader : 通过选举出的zookeeper领导类型服务器
- follower: 负责参与选举的所有服务器(除了leader机器)
- observer: 不参与Election的服务器
服务端原理
- 选举算法:paxos类似算法(一种变形)官方称为:FastLeaderElection
- 与客户端通信方式:JAVA-NIO (TCP 服务端-客户端)
通信模型
FastLeaderElection选举算法
- 服务端集群通信方式:TCP方式
- 成为Leader的必要条件 :获得n/2 + 1个Server同意
- 初始化选择方式:根据myid中的ID。
- 心跳:follow定时像leader发送心跳包,收不到则自身转换成looking状态
ZooKeeper运行
- server启动时首先从配置文件中读取数据
- 各个server发送自己的投票进行选举(选举过程不超过200ms)
- 选出leader之后,各个server接收/监听客户端请求
- leader与followers+observers同步数据,当数据同步完成后就可以回复 客户端的请求
- 读请求可以由接受请求的followers或observers直接回复,写请求要发送到leader进行处理
- 当leader宕机时。Follower发现leader失效则发起新一轮的选举
- 选出新的leader后leader与followers+observers同步数据……如此进行