是
Chubby
一个开源的实现,是Hadoop 分布式 协调 服务service
Zookeeper: 分布式协调服务
团结和谐、一致对外
注册:了解认识节点
监听事件
回调函数:客户端zkfc的函数,事件发生回调函数
zkfc谁先注册,就是active状态
酒店住房,先给你最差的房。订酒店
叫前台盯着,如果别人有房腾出来,马上告诉我
有人退房,前台打电话给我
过半投票确定,结果通知所有节点,所有节点数据最终一致性
消息队列
在ZooKeeper中三种角色:
Leader、Follower、Observer
ZooKeeper集群的所有机器通过一个Leader选举过程来选定一台被称为『Leader』的机器,Leader服务器为客户端提供读和写服务。
Follower和Observer都能提供读服务,不能提供写服务。两者唯一的区别在于,Observer机器不参与Leader选举过程,也不参与写操作的『过半写成功』策略,因此Observer可以在不影响写性能的情况下提升集群的读性能。
Leader选举:
- 首先,是在一种无主的模型下
- 毛遂自荐:自我投票
- 需要对事实,对黑白,对正反的自我判断
- 公开、公正、公平或者说准确的选出有能力者
- 公平竞争:zxid事务id最大的持有的数据最新
-
说出事实真相:传递投票
在ZooKeeper 数据节点(ZNode)
在谈到分布式的时候,一般『节点』指的是组成集群的每一台机器。而ZooKeeper中的数据节点是指数据模型中的数据单元,称为ZNode。ZooKeeper将所有数据存储在内存中,数据模型是一棵树(ZNode Tree),由斜杠(/)进行分割的路径,就是一个ZNode,如/hbase/master,其中hbase和master都是ZNode。每个ZNode上都会保存自己的数据内容,同时会保存一系列属性信息。
这里的ZNode可以理解成既是Unix里的文件,又是Unix里的目录。因为每个ZNode不仅本身可以写数据(相当于Unix里的文件),还可以有下一级文件或目录(相当于Unix里的目录)。
在ZooKeeper中,ZNode可以分为持久节点和临时节点两类。
在ZooKeeper 总结
特点 | 说明 |
---|---|
最终一致性 | 为客户端展示同一个视图,大家看到的是一致的 |
可靠性 | 如果消息被到一台服务器接受,那么它将被所有的服务器接受 |
实时性 | Zookeeper不能保证两个客户端能同时得到刚更新的数据, 如果需要最新数据,应该在读数据之前调用sync()接口 |
独立性 | 各个Client之间互不干预 |
原子性 | 更新只能成功或者失败,没有中间状态 |
顺序性 | 所有Server,同一消息发布顺序一致 消息队列机制 |
Zookeeper应用
- Hadoop,使用Zookeeper的事件处理确保整个集群只有一个NameNode,存储配置信息等.
-
HBase,使用Zookeeper的事件处理确保整个集群只有一个HMaster,察觉HRegionServer联机和宕机,存储访问控制列表等
参考资料
ZooKeeper集群搭建
Zookeeper全解析——Paxos作为灵魂
可能是全网把 ZooKeeper 概念讲的最清楚的一篇文章 - 知乎
ZooKeeper原理与应用 - 简书
咱们一起聊聊Zookeeper - 掘金