一.ZooKeeper是什么?
ZooKeeper是一个分布式协调服务,目标是将复杂容易出错的分布式一致性服务包装起来,提供API接口给用户使用。
ZooKeeper可以实现数据发布/订阅,负载均衡,分布式锁,分布式队列,命名服务,集群管理,Master管理,分布式协调/通知。
二.ZooKeeper的Zab(Zookeeper Automic Broadcast)协议。
包含两种模式:
1.崩溃恢复
2.消息广播
三.ZooKeeper的特性
1.数据节点--ZNode
ZNode是ZooKeeper的最小数据单元,每个ZNode都可以存储数据,同时还能挂载子节点,因此构成了一个层次化的命名空间,称为树。
ZNode三种类型:持久节点,临时节点,顺序节点。可以生成以下四种类型的节点:
- 持久节点:持久节点创建后就一直存在于ZooKeeper服务器上,直到有删除操作主动清除这个节点。
- 持久顺序节点:持久顺序节点的特性和持久节点基本一致,额外的特性表现在顺序性上。在ZooKeeper中,每个父节点都会为它的第一个子节点维护一份顺序,用于记录下每个子节点创建的先后顺序。
- 临时节点:临时节点的生命周期和会话保持一致。如果会话失效,临时节点也就失效。不能在临时节点上创建子节点。
- 临时顺序节点:在临时节点上添加了顺序性。
2.Watcher通知机制
客户端线程向服务器注册一个Watcher,同时将这个Watcher存储在客户端的WatchManager中,服务器会触发Watcher事件向客户端发送通知,客户端会从WatchManager中找到对应的Watcher执行逻辑回调。
3.ACL(Access Control List)
ZooKeeper的权限控制。包含三部分的内容:
(1)权限模式
- IP:IP模式通过IP地址粒度进行权限控制。
- Digest: 以类似“username:password”的形式的权限标识进行权限设置。
- World:所有用户都可以在不进行任何权限校验的情况下操作ZooKeeper上的数据。
- Super: 超级用户。
(2)授权对象:ID
授权对象指的是权限赋予的用户或一个指定实体。
(3)权限
指通过权限校验可以被允许执行的操作,包括create,delete,read,write,admin。
4.服务器角色
(1)Leader:整个ZooKeeper集群工作机制中的核心,主要任务:
- 事务请求的唯一调度和处理者,保证集群事务处理的顺序性。
- 集群内部各服务器的调度者。
(2)Follower:ZooKeeper集群状态的跟随者,主要任务:
- 处理客户端非事务的请求,转发事务请求给Leader服务器。
- 参与事务的Proposal的投票。
- 参与Leader选举的投票。
(3)Observer:观察者
能处理非事务请求,将事务请求转发给Leader服务器,但是不进行事务Proposal的投票和Leader选举的投票。通常用于在不影响集群事务处理能力的前提下提升集群的非事务处理能力。
5.leader选举
进行leader可以是服务器启动的时候或是服务器运行的时候。
(1)状态变更:如果是服务器运行期间进行leader选举,需要对非Observer服务器进行状态变更为Looking。
(2)进行投票:每台服务器都会选举自己作为leader,投票的内容包括服务器的myid(ZooKeeper集群搭建的时候每个服务器的编号)和ZXID(ZooKeeper为每一个事务请求分配的唯一一个全局事务ID)。
(3)接收投票:接收来自其它服务器的投票,判断投票的有效性。
(4)处理投票:需要将其他服务器的投票与自己的投票比较,比较规则如下:
- 先比较ZXID,ZXID比较大的服务器会优先作为Leader。
- ZXID相同的话,就比较myid,myid比较大的服务器作为Leader服务器。
(5)统计投票:每次投票后,服务器都会统计所有投票,判断是否有过半的机器接收到相同的投票信息。
(6)改变服务器状态:如果是follower,就变更为Following,如果是leader,就变更为leading。
6.ZooKeeper的序列化协议:Jute
7.数据存储
分为两部分:内存数据存储和磁盘数据存储。
参考资料:
《从Paxos到ZooKeeper分布式一致性原理与实践》
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。