选主流程:

  当Zk进入恢复模式时,需要重新选举出一个新的leader,让所有的Server都恢复到一个正确的状态。Zk的选举算法有两种:一种是基于basic paxos实现的,一种是基于fast paxos算法实现的。系统默认的是fast paxos。

basic paxos流程:

  1、当前Server中发起选举的线程担任选举线程,主要功能是对投票结果进统计,并选出推荐的Server

  2、选举线程向所有的Server发起一次询问(包括自己)

  3、选举线程收到Server的回复后,通过验证zxid是否一致来判断是否是自己发起的询问。然后获取对方的id(myid),并存储到当前询问对象列表中,最后获取对方提议的leader相关信息(id,zxid),并将这些信息存储到当次选举的投票记录表中

  4、收到所有的Server回复后,计算出zxid最大的server,并将这个server相关信息设置为下一次要投票的server

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

  要使leader获得多数server支持,则server总数必须是奇数2n+1,且存活的Server的数目不得少于n+1。

  每个Server启动后都会重复意思流程。在恢复模式下,如果是刚从崩溃状态恢复的或者刚启动的Server还会从磁盘快照中恢复数据和会话信息。zk会记录事务日志并定期进行快照,方便在恢复时进行状态恢复。选主的具体流程图如下:

  

  

fast paxos流程:

  在选举过程中,某server首先先所有server提议自己要成为leader,当其他server收到提议后,解决epoch和zxid的冲突,并接受对方的提议,然后向对方发送接收提议完成的消息,重复这个流程,最后一定能选出leader。流程图如下:

同步流程:

  选举完leader以后,zk进入状态同步过程。

  1、leader等待server连接

  2、Follower连接leader,将最大的zxid发送给leader

  3、leader根据follower的zxid确定同步点

  4、完成同步后通知follwoer已经成为uptodate状态

  5、follower收到uptodate消息后,又可以重新接受client的请求进行服务

工作流程:

  Leader的工作流程

  leader主要由三个功能:

  1、恢复数据;

  2、维持与learner的心跳,接收learner请求并判断learner的请求消息类型;

  3、learner的消息类型主要由PING消息、REQUEST消息、ACK消息、REVALIDATE消息根据不同消息类型,进行不同的处理;

  PING消息:指Learner的心跳消息。

  REQUEST消息:指follower发送的提议信息,包括写请求及同步请求。

  ACK消息:是follower对提议的回复,超过半数follower通过,则commit该提议。

  REVALIDATE消息:用来延长SESSION有效时间。

  Leader的工作流程简图如下所示,实际实现中要复杂得多,启动了三个线程来实现功能。

  

   

  follower工作流程

  follower主要有四个功能:

  1、向leader发送请求(PING、REQUEST、ACK、REVALIDATE)

  2、接收leader消息并处理

  3、接收client的请求,如果为写请求,发送给leader进行投票

  4、返回client结果

  

  follower的消息循环处理如下几种来着leader的消息:

  1、PING消息:心跳消息

  2、PROPOSAL消息:Leader发起的提案,要求follower投票

  3、COMMIT消息:服务端最新一次提案的信息

  4、UPTODATE消息:表明同步完成

  5、REVALIDATE消息:根据leader的REVALIDATE结果,关闭待revalidate的session还是允许其接受消息

  6、SYNC消息:返回SYNC结果到客户端。这个消息最初由客户端发起,用来强制得到最新的更新

  follower的工作流程简图如下,在实际实现中,follower是通过5个线程来实现功能的。

  

  Observer的流程和follower相似,不同点就是Observer不参加投票

Zookeeper-相关流程的更多相关文章

  1. SpringBoot启动原理及相关流程

    一.springboot启动原理及相关流程概览 springboot是基于spring的新型的轻量级框架,最厉害的地方当属自动配置.那我们就可以根据启动流程和相关原理来看看,如何实现传奇的自动配置 二 ...

  2. git 相关流程和报错解决

    git 相关流程: 预先配置: gitroot $ git config user.name XXXgitroot $ git config user.email XXX@XXX.com git re ...

  3. Zookeeper Watcher 流程分析(结合源码)

    概述 ZK提供了分布式数据的发布/订阅功能,一个典型的发布/订阅模型系统定义了一种一对多的订阅关系,能够让多个订阅者同时监听某个主题对象,当这个主题对象自身状态发生变化时,会通知所有的订阅者.在ZK中 ...

  4. Zookeeper启动流程分析

    前言 之前的Zookeeper协议篇-Paxos算法与ZAB协议通过了解Paoxs算法开始,到Zab协议的两大特性:崩溃恢复和消息广播,学习了Zookeeper是如何通过Zab协议实现高可用,本篇主要 ...

  5. Zookeeper相关知识

    一.Zookeeper是什么? Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务. ...

  6. zookeeper相关知识的总结:

    一.分布式协调技术 在给大家介绍ZooKeeper之前先来给大家介绍一种技术——分布式协调技术.那么什么是分布式协调技术?那么我来告诉大家,其实分布式协调技术 主要用来解决分布式环境当中多个进程之间的 ...

  7. zookeeper启动流程简单梳理

    等着測试童鞋完工,顺便里了下zookeeper的启动流程 zk3.4.6 启动脚本里面 nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_ ...

  8. ZooKeeper 相关知识

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/zhang123456456/articl ...

  9. zookeeper 相关学习资料

    zookeeper的配置:http://www.cnblogs.com/yuyijq/p/3438829.html zookeeper运维:http://blog.csdn.net/hengyunab ...

  10. Android中G-Sensor相关流程

    1.使G-sensor正常工作需要做的事: G-sensor driver文件包括: driver/i2c/chips/lis331dl.c driver/i2c/chips/sensorioctl. ...

随机推荐

  1. Django基础篇--用户权限管理和组管理

    Django作为一个成熟的python后台开发框架,为开发者提供了很多内置的功能,开发者只需要做一些配置就可以完成原生操作中比较复杂的代码编写.这些内置功能中其中一个比较强大的功能就是后台用户管理类. ...

  2. Python使用map,reduce高阶函数模拟实现Spark的reduceByKey算子功能

    # 使用默认的高阶函数map和reduce import randomdef map_function(arg):  # 生成测试数据 return (arg,1) list_map = list(m ...

  3. sql 查询表格中多列重复的数据并显示该表的其他列

    我们一般情况下通过分组函数group by来查询重复的列 ) R 但是查询出的结果不能显示该表的其他列 想要查询一张表中有多个列重复的数据且也要显示该表的其他列 SELECT M.* FROM [db ...

  4. AspNetCore2身份验证

    1.在Startup类的Configure方法,添加身份验证的中间件AuthenticationMiddleware app.UseAuthentication(); 2.在Startup类的Conf ...

  5. 使用Python语言理解递归

    递归 一个函数在执行过程中一次或多次调用其本身便是递归,就像是俄罗斯套娃一样,一个娃娃里包含另一个娃娃. 递归其实是程序设计语言学习过程中很快就会接触到的东西,但有关递归的理解可能还会有一些遗漏,下面 ...

  6. SAP系统产品历史与分类

    SAP R/1---实时会计辅助财务的系统,最早叫RF系统.由原来批处理系统(数据输入后,由服务器在特定的时间分批处理).创造性的变为输入马上由计算机处理. SAP R/2—创造性的使用“basis” ...

  7. 截取字符串substr和subString的却别

    substr 方法 返回一个从指定位置开始的指定长度的子字符串. stringvar.substr(start [, length ]) 参数 stringvar 必选项.要提取子字符串的字符串文字或 ...

  8. python五十七课——正则表达式(多个字符)

    演示匹配多个字符:以下x.y.n都是变量名:分类:1).模糊匹配: x?:表示0个或者1个 取值范围:[0,1]x+:表示1个或者多个 取值范围:[1,无穷大)x*:表示0个或者多个 取值范围:[0, ...

  9. android Application Component研究之Activity(二)

    http://blog.csdn.net/windskier/article/details/7172710 本文为原创文章,欢迎转载!转载时请注明出处:http://blog.csdn.net/wi ...

  10. centos7下安装docker(13.2容器数据共享)

    回想一下我们学了两种存储方式:storage driver和data volume,其中又分为bind mount和docker managed volume,我们知道storage driver就是 ...