zookeeper(2)
来源:互联网 发布:手机捕鱼游戏算法 编辑:程序博客网 时间:2024/05/18 03:17
Leader Election
- 客户端可以连接到每个server,每个server的数据完全相同。
- 每个follower都和leader有连接,接受leader的数据更新操作。
- Server记录事务日志和快照到持久存储。
- 大多数server可用,整体服务就可用。
Zookeeper服务自身组成一个集群(2n+1个服务允许n个失效)。Zookeeper服务有两个角色,一个是leader,负责写服务和数据同步,剩下的是follower,提供读服务,leader失效后会在follower中重新选举新的leader。
在 Zookeeper 上创建一个 EPHEMERAL 类型的目录节点,然后每个 Server 在它们创建目录节点的父目录节点上调用getChildren(String path, boolean watch) 方法并设置 watch 为 true,由于是 EPHEMERAL 目录节点,当创建它的 Server 死去,这个目录节点也随之被删除,所以 Children 将会变化,这时 getChildren上的 Watch 将会被调用,所以其它 Server 就知道已经有某台 Server 死去了。新增 Server 也是同样的原理。
Zookeeper 如何实现 Leader Election,也就是选出一个 Master Server。和前面的一样每台 Server 创建一个 EPHEMERAL 目录节点,不同的是它还是一个SEQUENTIAL 目录节点,所以它是个 EPHEMERAL_SEQUENTIAL 目录节点。之所以它是 EPHEMERAL_SEQUENTIAL 目录节点,是因为我们可以给每台 Server 编号,我们可以选择当前是最小编号的 Server 为 Master,假如这个最小编号的 Server 死去,由于是 EPHEMERAL 节点,死去的 Server 对应的节点也被删除,所以当前的节点列表中又出现一个最小编号的节点,我们就选择这个节点为当前 Master。这样就实现了动态选择 Master,避免了传统意义上单 Master 容易出现单点故障的问题。
队列管理
Zookeeper 可以处理两种类型的队列:
- 当一个队列的成员都聚齐时,这个队列才可用,否则一直等待所有成员到达,这种是同步队列。
- 队列按照 FIFO 方式进行入队和出队操作。
同步队列用 Zookeeper 实现的实现思路如下:
创建一个父目录 /synchronizing,每个成员都监控标志(Set Watch)位目录 /synchronizing/start 是否存在,然后每个成员都加入这个队列,加入队列的方式就是创建 /synchronizing/member_i 的临时目录节点,然后每个成员获取 / synchronizing 目录的所有目录节点,也就是 member_i。判断 i 的值是否已经是成员的个数,如果小于成员个数等待 /synchronizing/start 的出现,如果已经相等就创建 /synchronizing/start。
FIFO 队列用 Zookeeper 实现思路如下:
实现的思路也非常简单,就是在特定的目录下创建 SEQUENTIAL 类型的子目录 /queue_i,这样就能保证所有成员加入队列时都是有编号的,出队列时通过 getChildren( ) 方法可以返回当前所有的队列中的元素,然后消费其中最小的一个,这样就能保证 FIFO。
0 0
- zookeeper(2)
- Zookeeper(2)-Zookeeper可以干什么
- Zookeeper——2、使用Zookeeper原生API操作Zookeeper
- 【ZooKeeper Notes 2】ZooKeeper快速搭建
- zookeeper学习-2-zookeeper的常用命令
- ZooKeeper - O'Reilly Media ----Zookeeper Internals (2)
- ZooKeeper学习笔记-5---ZooKeeper编程-2
- 【ZooKeeper 2】ZooKeeper原理及应用场景
- zookeeper(2) zookeeper客户端ZkClient入门
- Zookeeper学习笔记 --- Zookeeper调研报告2
- zookeeper学习2
- Apache ZooKeeper入门2
- Apache ZooKeeper入门2
- Zookeeper 原理分析2
- Zookeeper工作原理2
- zookeeper basic 2
- Apache ZooKeeper入门2
- Dubbo zookeeper 初探(2)
- SAX解析XML文档
- Visual Studio 2013崩溃问题解决
- java常用的交互信息获取
- 计蒜客第6题---泥塑课
- android heap 检测内存
- zookeeper(2)
- 读书笔记MoreEffectiveC++(10)
- 把日期对象和字符串相互转换
- Mac OS X 执行shell以及bash shell的区别。
- Hdu 5305 Friends 2015 Multi-University Training Contest 2
- 表格单选实现UITableViewCellAccessoryCheckmark
- 手机RAM & ROM & TF
- 技术与经济之二:存货市场与直销市场
- Tricks Device (最大流 , 最短路)