您现在的位置:主页 > 高级应用 > >

zookeeper3.4.8实例教程-Leader/Follower线程模型



时间: 2016-04-05 21:56     来源 : CSDN      点击:

关键词: 实例教程    zookeeper    分布式   


目录:zookeeper3.4.8实例教程


Zookeeper中的角色主要有以下三类,如下表所示:

内容来自www.itxxz.com

系统模型如图所示:


设计目的

1.最终一致性:client不论连接到哪个Server,展示给它都是同一个视图,这是zookeeper最重要的性能。

copyright www.itxxz.com

2 .可靠性:具有简单、健壮、良好的性能,如果消息m被到一台服务器接受,那么它将被所有的服务器接受。 copyright www.itxxz.com

3 .实时性:Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。但由于网络延时等原因,Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口。

copyright www.itxxz.com

4 .等待无关(wait-free):慢的或者失效的client不得干预快速的client的请求,使得每个client都能有效的等待。 官网:http://www.itxxz.com

5.原子性:更新只能成功或者失败,没有中间状态。 copyright www.itxxz.com

6 .顺序性:包括全局有序和偏序两种:全局有序是指如果在一台服务器上消息a在消息b前发布,则在所有Server上消息a都将在消息b前被发布;偏序是指如果一个消息b在消息a后被同一个发送者发布,a必将排在b前面。 本文来自www.itxxz.com

ZooKeeper的工作原理

Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。

本文来自www.itxxz.com

为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务。所有的提议(proposal)都在被提出的时候加上了zxid。实现中zxid是一个64位的数字,它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标识当前属于那个leader的统治时期。低32位用于递增计数。

官网:http://www.itxxz.com

每个Server在工作过程中有三种状态: 本文来自www.itxxz.com

  • LOOKING:当前Server不知道leader是谁,正在搜寻 itxxz.com

  • LEADING:当前Server即为选举出来的leader

    内容来自www.itxxz.com

  • FOLLOWING:leader已经选举出来,当前Server与之同步 内容来自www.itxxz.com

选主流程

当leader崩溃或者leader失去大多数的follower,这时候zk进入恢复模式,恢复模式需要重新选举出一个新的leader,让所有的Server都恢复到一个正确的状态。Zk的选举算法有两种:一种是基于basic paxos实现的,另外一种是基于fast paxos算法实现的。系统默认的选举算法为fast paxos。先介绍basic paxos流程: copyright www.itxxz.com

  1. 1 .选举线程由当前Server发起选举的线程担任,其主要功能是对投票结果进行统计,并选出推荐的Server; 内容来自www.itxxz.com

  2. 2 .选举线程首先向所有Server发起一次询问(包括自己); copyright www.itxxz.com

  3. 3 .选举线程收到回复后,验证是否是自己发起的询问(验证zxid是否一致),然后获取对方的id(myid),并存储到当前询问对象列表中,最后获取对方提议的leader相关信息(id,zxid),并将这些信息存储到当次选举的投票记录表中; IT学习者(www.itxxz.com)

  4. 4.  收到所有Server回复以后,就计算出zxid最大的那个Server,并将这个Server相关信息设置成下一次要投票的Server;

    官网:http://www.itxxz.com

  5. 5.  线程将当前zxid最大的Server设置为当前Server要推荐的Leader,如果此时获胜的Server获得n/2 + 1的Server票数, 设置当前推荐的leader为获胜的Server,将根据获胜的Server相关信息设置自己的状态,否则,继续这个过程,直到leader被选举出来。

    itxxz.com

通过流程分析我们可以得出:要使Leader获得多数Server的支持,则Server总数必须是奇数2n+1,且存活的Server的数目不得少于n+1. 内容来自www.itxxz.com

每个Server启动后都会重复以上流程。在恢复模式下,如果是刚从崩溃状态恢复的或者刚启动的server还会从磁盘快照中恢复数据和会话信息,zk会记录事务日志并定期进行快照,方便在恢复时进行状态恢复 本文来自www.itxxz.com







文章除注明转载外,均为IT学习者原创或编译
欢迎任何形式的转载,但务必请以超链接形式注明出处
本文出自:CSDN
链接地址:http://blog.csdn.net/caisini_vc/article/details/48368917



微信公众号:喝咖啡的螃蟹

喝咖啡的螃蟹
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
  • 狼与美女
    2017-03-22 11:33:25发表

    美眉图ᜥ 穆婷婷比基尼 性感高跟鞋 柳岩性感比基尼照 伊能静写真 红色av社区 hTTp://T.cN/R6b35sq