赞
踩
Zookeeper 实际上就是 文件系统(树状目录结构) + 通知机制。
Zookeeper 是由一个领导者(leader)和多个跟随者(follower)组成的集群
Zokeeper 具有以下特点:
推荐阅读:Zab协议:一致性协议
Zookeeper 是通过 ZAB 协议来保证分布式事务的最终一致性。Zab借鉴了 Paxos 算法,但又不像 Paxos 那样是一种通用的分布式一致性算法。它是特别为 Zookeeper 设计的支持崩溃恢复的原子广播协议。
Zookeeper 客户端会随机的链接到 zookeeper 集群中的一个节点。如果是读请求,就直接从当前节点中读取数据;如果是写请求,那么节点就会向 Leader 提交事务,Leader 接收到事务提交,会广播该事务,只要超过半数节点写入成功,该事务就会被提交。
Zab 协议包括两种基本的模式:崩溃恢复 和 消息广播
一旦 Leader 服务器出现崩溃或者由于网络原因导致 Leader 服务器失去了与过半 Follower 的联系,那么就会进入崩溃恢复模式。
崩溃恢复主要包括两部分:Leader选举 和 数据恢复
① 选举流程:
② 数据恢复
当完成 leader 选举之后,leader 会先进行数据恢复(即数据同步)。leader 会确认事务日志中的所有的 proposal 是否已经被集群中过半的服务器 commit。
当所有 proposal 都已经确认没问题之后,leader 才会把 follower 加入到真正可用的 follower 列表中。也就是说,此时 leader 和 follower 的数据是保持一致的。
一旦 leader 已经和 follower 进行了同步之后,它就可以开始广播消息了,即进入 消息广播 模式。
Zab协议的核心:定义了 事务请求 的处理方式
首先有一个 main() 线程
在 main 线程中创建 Zookeeper 客户端,会创建两个线程,connect 负责网络连接通信,listener 负责监听
通过 connect 线程将注册的监听事件发送给 Zookeeper
在 Zookeeper 的注册监听器列表中将注册的监听事件添加到列表中
Zookeeper 监听到有数据或路径变化,就会将这个消息发送给 listener 线程
listener 线程内部调用了process()方法
zk 的机制是只要超过半数的节点正常,集群就能正常服务。只有当不到一半节点工作时,集群才失效。
所以
3 个节点的 cluster 可以挂掉 1 个节点(leader 可以得到 2 票>1.5)
2 个节点的 cluster 就不能挂掉任何 1 个节点了(leader 可以得到 1 票<=1)
相同点:
不同点:
ZAB 在 Paxos 的基础上额外添加了一个 数据同步 阶段。同步阶段中,新的 leader 会先确认事务日志中的所有的 proposal 是否已经被集群中过半的服务器 commit。
锁服务可以分为两类:保持独占 和 控制时序
保持独占 :我们将 zk 上的一个 znode 看做是一把锁,所有客户端都去 create 一个 /distribute_lock 节点,成功创建的那个客户端也就拥有了这把锁。用完之后删除掉 /distribute_lock 节点就释放出锁
控制时序:/distribute_lock 节点已经预先存在,所有客户端在它下面创建临时节点,按顺序进行编号。则编号最小的客户端获得锁,用完删除。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。