核心枚举

public enum ServerState {
LOOKING, FOLLOWING, LEADING, OBSERVING;
}
zookeeper服务器状态:刚启动LOOKING,follower是FOLLOWING,leader是LEADING,observer是OBSERVING;
public enum LearnerType {
PARTICIPANT, OBSERVER;
}

简单来说,zookeeper启动的核心类是QuorumPeerMain,启动之后会加载配置,同时启动QuorumPeer,QuorumPeer会从本地数据目录加载数据,然后开始选举,选举的核心类是FastLeaderElection,选举完成之后会设置状态,根据状态的不同,启动不同的类,比如Leader、Follower、Observer,leader会设置一个新的epoch,同时会等待follower向自己注册,注册完成后follower会向leader同步最新的数据,而leader则定期ping所有的follower,一旦存活的follower不足半数,leader会shutdown,然后触发集群的重新选举。

具体代码以及调用如下:

org.apache.zookeeper.server.quorum.QuorumPeerMain

         initializeAndRun

                  runFromConfig

                          org.apache.zookeeper.server.quorum.QuorumPeer extends ZooKeeperThread

                                   initialize

                                   start

                                            loadDataBase

                                            org.apache.zookeeper.server.ServerCnxnFactory

                                                     start

                                            startLeaderElection

                                                     org.apache.zookeeper.server.quorum.QuorumPeer.ResponderThread

                                                             start

                                                     createElectionAlgorithm

                                            run

                                                     org.apache.zookeeper.server.quorum.FastLeaderElection implements Election

                                                             lookForLeader

                                                                      sendNotifications

                                                                      totalOrderPredicate

                                                                      termPredicate

                                                                               org.apache.zookeeper.server.quorum.flexible.QuorumMaj

                                                                                        containsQuorum

                                                                      QuorumPeer.setPeerState

                                                             1 org.apache.zookeeper.server.quorum.Leader extends Learner

                                                                      lead

                                                                               org.apache.zookeeper.server.quorum.Leader.LearnerCnxAcceptor extends ZooKeeperThread

                                                                                        run

                                                                                                 org.apache.zookeeper.server.quorum.LearnerHandler extends ZooKeeperThread

                                                                                                         start

                                                                                                                  receive Leader.FOLLOWERINFO

                                                                               epoch++

                                                                               setZxid

                                                                               setCurrentEpoch

                                                                               waitForNewLeaderAck

                                                                               startZkServer

                                                                               loop

                                                                                        org.apache.zookeeper.server.quorum.LearnerHandler

                                                                                                ping

                                                                                                         org.apache.zookeeper.server.quorum.LearnerHandler.SyncLimitCheck

                                                                                                                  check

                                                                                                         shutdown

                                                                                                                  Leader.removeLearnerHandler

                                                                                        containsQuorum

                                                                                        shutdown

                                                             2 org.apache.zookeeper.server.quorum.Follower extends Learner

                                                                      followLeader

                                                                               findLeader

                                                                               connectToLeader

                                                                               registerWithLeader

                                                                                        send Leader.FOLLOWERINFO

                                                                               syncWithLeader

                                                             3 org.apache.zookeeper.server.quorum.Observer extends Learner

                                                                      observeLeader

选举代码解析请见  大数据基础之Zookeeper(3)选举算法

【原创】大数据基础之Zookeeper(2)源代码解析的更多相关文章

  1. 【原创】大数据基础之Zookeeper(1)介绍、安装及使用

    zookeeper3.4.11 http://zookeeper.apache.org/ 一 简介 ZooKeeper is a centralized service for maintaining ...

  2. 【原创】大数据基础之Zookeeper(4)应用场景

    1 集群配置管理 应用服务器的配置通常会放到properties文件中,格式为: system1.module2.prop3=value4 然后启动的时候加载,这样带来的问题是启动后无法修改,想修改必 ...

  3. 【原创】大数据基础之Zookeeper(3)选举算法

    提到zookeeper选举算法,就不得不提Paxos算法,因为zookeeper选举算法是Paxos算法的一个变种: Paxos要解决的问题是:在一个分布式网络环境中有众多的参与者,但是每个参与者都不 ...

  4. 决战大数据之三-Apache ZooKeeper Standalone及复制模式安装及测试

    决战大数据之三-Apache ZooKeeper Standalone及复制模式安装及测试 [TOC] Apache ZooKeeper 单机模式安装 创建hadoop用户&赋予sudo权限, ...

  5. 大数据篇:Zookeeper

    Zookeeper 1 Zookeeper概念 Zookeeper是什么 是一个基于观察者设计模式的分布式服务管理框架,它负责和管理需要关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Z ...

  6. 【原创】大数据基础之Impala(1)简介、安装、使用

    impala2.12 官方:http://impala.apache.org/ 一 简介 Apache Impala is the open source, native analytic datab ...

  7. 【原创】大数据基础之词频统计Word Count

    对文件进行词频统计,是一个大数据领域的hello word级别的应用,来看下实现有多简单: 1 Linux单机处理 egrep -o "\b[[:alpha:]]+\b" test ...

  8. 【原创】大数据基础之Benchmark(2)TPC-DS

    tpc 官方:http://www.tpc.org/ 一 简介 The TPC is a non-profit corporation founded to define transaction pr ...

  9. 大数据基础知识问答----spark篇,大数据生态圈

    Spark相关知识点 1.Spark基础知识 1.Spark是什么? UCBerkeley AMPlab所开源的类HadoopMapReduce的通用的并行计算框架 dfsSpark基于mapredu ...

随机推荐

  1. Linux利用mysql建立数据库

    安装数据库: sudo   apt-get  install  mysql-server   启动服务: sudo  service  mysql  start  连接数据库:sudo    mysq ...

  2. 第二部分之AOF持久化(第十一章)

    AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态的.被写入AOF文件的所有命令都是以Redis的命令请求协议格式(纯文本)保存的. 一,AOF持久化的实现 1.命令追加 当AOF持 ...

  3. 【php】记录一次生产环境bug的调试

    参考链接: [php调试利器 -- xdebug]https://www.cnblogs.com/anyeshe/p/5746404.html [PHP 后端调试输出方法(笨办法)]https://b ...

  4. ABP中的拦截器之ValidationInterceptor(上)

    从今天这一节起就要深入到ABP中的每一个重要的知识点来一步步进行分析,在进行介绍ABP中的拦截器之前我们先要有个概念,到底什么是拦截器,在介绍这些之前,我们必须要了解AOP编程思想,这个一般翻译是面向 ...

  5. Python——Twisted框架(网络通信)

    一.简介 twisted是一个封装好的网络通信的库,可以帮助我们快速进行网络编程.注意,python3中,字符串必须转码成utf8的格式,否则无法发送.比如str("test"). ...

  6. [模板] CDQ分治&&BZOJ3262:陌上花开

    简介 CDQ分治是分治的一种, 可以看做归并排序的扩展, 利用离线将一些 \(O(n)\) 的暴力优化到 \(O(log n)\). 它可以用来顶替一些高级(log)数据结构等. 一般地, CDQ分治 ...

  7. Qt如何去掉按钮等控件的虚线框(焦点框)

    方法1:可以通过代码ui->pushButton->setFocusPolicy(Qt::NoFocus)或在Qt Creator的属性列表中设置. 方法2:如果在嵌入式设备中需要通过按键 ...

  8. [洛谷P1438] 无聊的数列

    题目类型:差分,线段树 传送门:>Here< 题意:给出一个数列,每次给一个区间对应的加上一个等差数列,并询问某一个元素目前的值. 解题思路 所谓差分,我个人的理解就是用\(O(1)\)的 ...

  9. 「洛谷1884」「USACO12FEB」过度种植【离散化扫描线】

    题目链接 [洛谷传送门] 题解 矩阵面积的并模板.(请求洛谷加为模板题) 很明显是要离散化的. 我们将矩阵与\(x\)轴平行的两个线段取出来.并且将这两个端点的\(x1\)和\(x2\)进行离散化. ...

  10. Python【第二篇】运算符及优先级、数据类型及常用操作、深浅拷贝

    一.运算符及优先级 Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 1.算数运算符 运算符 描述 实例,a=20,b=10 + 加 a+b输出结果30 - 减 a-b输出结果 ...