`
hui_jing_880210
  • 浏览: 41659 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Zookeeper启动过程

阅读更多

Zookeeper的启动入口在org.apache.zookeeper.server.quorum.QuorumPeerMain。

在这个类的main方法里进入了zookeeper的启动过程,首先我们会解析配置文件,即zoo.cfg和myid。

这样我们就知道了dataDir和dataLogDir指向哪儿了,然后就可以启动日志清理任务了(如果配置了的话)。

DatadirCleanupManager purgeMgr = new DatadirCleanupManager(config
                .getDataDir(), config.getDataLogDir(), config
                .getSnapRetainCount(), config.getPurgeInterval());
purgeMgr.start();

接下来会初始化ServerCnxnFactory,这个是用来接收来自客户端的连接的,也就是这里启动的是一个tcp server。在Zookeeper里提供两种tcp server的实现,一个是使用java原生NIO的方式,另外一个是使用Netty。默认是java nio的方式,一个典型的Reactor模型。因为java nio编程并不是本文的重点,所以在这里就只是简单的介绍一下。

//首先根据配置创建对应factory的实例:NIOServerCnxnFactory 或者 NettyServerCnxnFactory
ServerCnxnFactory cnxnFactory = ServerCnxnFactory.createFactory();
//初始化配置
cnxnFactory.configure(config.getClientPortAddress(),config.getMaxClientCnxns());

创建几个SelectorThread处理具体的数据读取和写出。

先是创建ServerSocketChannel,bind等

this.ss =  ServerSocketChannel.open();
ss.socket().setReuseAddress(true);
ss.socket().bind(addr);
ss.configureBlocking(false);

然后创建一个AcceptThread线程来接收客户端的连接。

这一部分就是处理客户端请求的模块了,如果遇到有客户端请求的问题可以看看这部分。

接下来就进入初始化的主要部分了,首先会创建一个QuorumPeer实例,这个类就是表示zookeeper集群中的一个节点。初始化QuorumPeer的时候有这么几个关键点:

1. 初始化FileTxnSnapLog,这个类主要管理Zookeeper中的操作日志(WAL)和snapshot。

2. 初始化ZKDatabase,这个类就是Zookeeper的目录结构在内存中的表示,所有的操作最后都会映射到这个类上面来。

3. 初始化决议validator(QuorumVerifier->QuorumMaj) (其实这一步,是在配置)。这一步是从zoo.cfg的server.n这一部分初始化出集群的成员出来,有哪些需要参与投票(follower),有哪些只是observer。还有决定half是多少等,这些都是zookeeper的核心。在这一步,对于每个节点会初始化一个QuorumServer对象,并且放到allMembers,votingMembers,observingMembers这几个map里。而且这里也对参与者的个数进行了一些判断。

4. leader选举 这一步非常重要,也是zookeeper里最复杂而最精华的一部分。

分享到:
评论

相关推荐

    zookeeper服务部署方式

    Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 1.单机模式:Zookeeper只运行在一台服务器上,适合测试环境; 2.伪集群模式:就是在一台物理机上运行多个Zookeeper 实例。...该文档主要记录部署过程

    zookeeper-3.4.9.tar.gz+安装过程笔记.doc

    启动 在zookeeper 目录下输入指令: bin/zkServer.sh start 这个命令使得zk服务进程在后台进行。如果想在前台中运行以便查看服务器进程的输出日志,可以通过以下命令运行: bin/zkServer.sh start-foreground 停止 ...

    Zookeeper源码剖析:深入理解Leader选举机制

    本文详细分析了Zookeeper的源码,特别是Leader选举过程的实现。首先,介绍了阅读源码的意义,包括技术提升、框架掌握、问题定位、面试准备、深入理解技术以及参与开源社区。接着,提供了一系列高效阅读源码的方法,...

    Zookeeper集群

    1. 概述  大部分分布式应用系统需要一个主控、协调器或者控制器来管理物理分布的子进程,目前,大多数都需要开发私有的协调程序,缺乏一个... Zookeeper集群的启动过程中leader选举是一个非常重要而且复杂的一个环

    分布式工程配置zookeeper化zkconfigutil.zip

    分布式系统配置项zookeeper化,可实现动态更新,极大方便...在这个过程中您只需要为可配置属性添加上相应的注解,并用 在启动时加上-javaagent参数,即可享受没有配置文件的快感! 标签:zkconfigutil

    ZooKeeper-:ZooKeeper源码剖析

    优秀时间学习了一下ZooKeeper:分布式过程协调这本书的内容,对ZooKeeper实现的细节很好奇,所以顺便把ZooKeeper源码看了一遍。看完之后想写点内容做个笔记,确实发现不好开始。由于ZooKeeper一个完整的逻辑的代码...

    分布式协调工具-ZooKeeper实现动态负载均衡

    什么是Zookeeper Zookeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group ...

    Zookeeper中几个重要的内部原理

    假设有五台服务器组成的 Zookeeper 集群,它们的 id 是从 1-5,同时它们都是最新启动的,也就是没有历史数据,在存放数据量这一点上,都是一样的。假设这些服务器依序启动,来看看会发生什么。 (1) 服务器 1 启动,

    基于C++ module库 Protobuf Zookeeper实现的Rpc框架源码+项目说明.zip

    在使用过程中,如有问题或建议,请及时沟通。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈! 【资源说明】 基于C++ module库 Protobuf Zookeeper实现的Rpc框架源码+项目说明.zip 编译: `./autobuild....

    nz-rpc:基于netty和zookeeper的RPC框架

    基于netty和zookeeper的RPC框架说明nzRpc是一个基于netty和zookeeper的RPC框架,使用netty作为底层socket通信框架。使用Zookeeper作为注册中心。服务提供者启动时会向服务注册中心注册相关信息消费者启动时,会获取...

    分布式专题-分布式协调服务02-Zookeeper的核心原理

    ZXID从源码层面分析 leader选举的实现过程服务器启动时的 leader 选举运行过程中的 leader 选举Leader 选举源码分析FastLeaderElection 选举过程关于 zookeeper的数据存储后记 前言 在上一小节,回顾内容 zookeeper

    java8源码-zookeeper:动物园管理员

    工作服务器启动时,会去ZooKeeper的Servers节点下创建临时节点,并把基本信息写入临时节点。这个过程叫服务注册,系统中的其他服务可以通过 获取Servers节点的子节点列表,来了解当前系统哪些服务器可用,这该过程...

    kafka-lead 的选举过程

    (1)第一个启动的代理节点,会在Zookeeper系统里面创建一个临时节点/Controller,并写入该节点的注册信息,使该节点成为控制器。 (2)其他代理节点陆续启动时,也会尝试在zookeeper系统里面创建/controller节点。...

    kafka-manager-1.3.3.22.zip

    已编译 Kafka-Manager-1.3.3.22 linux下直接解压解压kafka-manager-1.3.3.22.zip到/opt/module目录 ...备注:指定端口号看启动过程中 "-Dhttp.port=7456" 端口可以自己设置 http://hadoop102:7456

    kafka:kafka生产者消费者

    1、 安装过程将依赖安装 zookeeper 2、 软件位置 /usr/local/Cellar/zookeeper /usr/local/Cellar/kafka 3、 配置文件位置 ``` /usr/local/etc/kafka/zookeeper.properties /usr/local/etc/kafka/server.properties ...

    hadoop-管理

    6.完全重启整个集群的过程 首先是用root权限关闭所有节点的防火墙,/etc/init.d/iptables stop 然后启动hadoop集群 来到hadoop的安装路径执行: ./start-all.sh 待到集群全部成功启动之后两分钟之后执行关闭hadoop...

    log-analysis-kafka-storm-docker:在Docker中运行的Kafka,Storm,Zookeeper和Openfire

    ##下载源码git clonekafka-log-appender:将日志内容写到kafka程序log-kafka-storm:docker-compose脚本和storm程序##准备docker环境###启动dockerdocker-compose环境搭建过程请查看我的进入log-kafka-storm目录,...

    java-hbase-phoenix:通过Phoenix访问HBase

    通过Phoenix和Java访问HBase 该存储库是有关如何通过Phoenix和Java访问... /zookeeper-3.4.12/bin/zkServer.sh启动4. /hbase-2.0.0/bin/start-hbase.sh 5. /phoenix-5.0.0-alpha-hbase-2.0-bin/bin/queryserver.py sta

    手把手教你搭建分布式Hadoop集群视频教程(视频+讲义+笔记+软件+配置)

    03_ZK集群启动脚本编写及NN启动过程(fsimage和edits)及SNN功能 04_HADOOP中服务组件的高可用HA说明 05_搭建分布式HBase集群 06_SQOOP安装及导入数据到HBase表 07_HBase Backup Masters配置、启动、测试 08_...

Global site tag (gtag.js) - Google Analytics