zookeeper一般使用命令工具启动,启动主要就是初始化所有组件,让server可以接收并处理来自client的请求。本文主要结构:

  • main入口
  • 配置解析
  • 组件启动

main入口

我们一般使用命令行工具来部署zk server,zkServer.sh,这个脚本用来启动停止server,通过不同的参数和选项来达到不同的功能。该脚本最后会通过Java执行下面的main方法

org.apache.zookeeper.server.quorum.QuorumPeerMain#main

不管单机还是集群都是使用zkServer.sh这个脚本来启动,只是参数不同,所以main方法入口也是一样的。所以这个入口方法主要是根据不同的入参判断是集群启动还是单机启动。

该main方法主要做了以下几件事

  1. 解析配置,如果传入的是配置文件(参数只有一个),解析配置文件并初始化QuorumPeerConfig
  2. 启动清理文件的线程
  3. 判断是单机还是集群
    1. 集群:只有一个参数,并且配置了多个server
    2. 单机:上面的条件不满足,一般在启动的使用了以下两种配置的一种
      1. 使用的是文件配置,但是没有配置多台server
      2. 命令行配置多个(2-4)参数:port dataDir [tickTime] [maxClientCnxns]

配置解析

配置解析主要有两种情况

  1. 使用配置文件
  2. 使用命令行参数

使用配置文件

使用配置文件的时候是使用QuorumPeerConfig来解析配置的

  1. 先校验文件的合法性
  2. 配置文件是使用Java的properties形式写的,所以可以通过Properties.load来解析
  3. 将解析出来的key、value赋值给对应的配置

使用命令行参数

直接在命令指定对应的配置,这种情况只有在单机的时候才会使用,包含以下几个参数

  • port,必填,sever监听的端口
  • dataDir,必填,数据所在的目录
  • tickTime,选填
  • maxClientCnxns,选填,最多可处理的客户端连接数

组件启动

zookeeper包含的主要组件有

  • FileTxnSnapLog:管理FileTxLog和FileSnap
  • ZooKeeperServer:维护一个处理器链表processor chain
  • NIOServerCnxnFactory:管理来自客户端的连接
  • Jetty,用来通过http管理zk

zookeeper维护了自己的数据结构和物理文件,而且要接收并处理client发送来的网络请求,所以在zookeeper启动的时候,要做好下面的准备工作

  1. 初始化FileTxnSnapLog,创建了FileTxnLog实例和FIleSnap实例,并保存刚启动时候DataTree的snapshot
  2. 启动adminServer
  3. 启动NIOServerCnxnFactory
    1. 从解析出的配置中配置NIOServerCnxnFactory
    2. 初始化网络连接管理类:NIOServerCnxnFactory
      1. 初始化:WorkerService:用来业务处理的线程池
      2. 线程启动:
        SelectorThread(有多个):处理网络请求,write和read
        AcceptThread:用来接收连接请求,建立连接,zk也支持使用reactor多线程,accept线程用来建立连接,selector线程用来处理read、write
        ConnectionExpirerThread:关闭超时的连接,所有的session都放在org.apache.zookeeper.server.ExpiryQueue#expiryMap里面维护,这个线程不断从里面拿出超时的连接关闭
    3. 启动ZookeeperServer,主要是用来创建SessionTrackerImpl,这个类是用来管理session的

总结

单机模式部署较为简单,一般在开发、测试环境使用,由于单机环境需要的组件少,启动过程也较为简单,主要是解析传入的参数,然后启动对应的网络组件和请求处理组件,后面紧接着我们看下zk的集群启动流程。

转载于:https://www.cnblogs.com/sunshine-2015/p/10753999.html

zookeeper源码 — 一、单机启动相关推荐

  1. zookeeper源码分析之四服务端(单机)处理请求流程

    上文: zookeeper源码分析之一服务端启动过程 中,我们介绍了zookeeper服务器的启动过程,其中单机是ZookeeperServer启动,集群使用QuorumPeer启动,那么这次我们分析 ...

  2. Apache ZooKeeper - 构建ZooKeeper源码环境及StandAlone模式下的服务端和客户端启动

    文章目录 源码环境搭建 clone source 源码结构 启动 查找启动类 配置文件 pom文件调整 log4j.properties 以源码的方式启动Server 以源码的方式启动Client 验 ...

  3. idea用maven启动zookeeper源码

    在执行官网的java例子的时候,发现根本无法启动,后来发现是我的zookeeper就没编译好?试一下 idea编译启动zookeeper源码 修改配置文件 1 zoo.cfg 2 log4j.prop ...

  4. ZooKeeper 源码和实践揭秘

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:runnerzhang,腾讯 CSIG 后台开发工程 ...

  5. Zookeeper源码解读

    1.1. 客户端源码 1.1.1. 总体流程 启动客户端 zkCli.sh文件里面的配置 实际运行 public static void main(String args[])throws Keepe ...

  6. zookeeper源码分析之五服务端(集群leader)处理请求流程

    leader的实现类为LeaderZooKeeperServer,它间接继承自标准ZookeeperServer.它规定了请求到达leader时需要经历的路径: PrepRequestProcesso ...

  7. zookeeper 源码阅读(2)

    接着zookeeper 源码阅读(1) Zookeeper服务器的启动,大致可以分为以下五个步骤 1. 配置文件解析. 2. 初始化数据管理器. 3. 初始化网络I/O管理器. 4. 数据恢复. 5. ...

  8. idea zookeeper的使用_学习ZooKeeper源码,就从这篇开始吧

    [ZooKeeper系列]1.ZooKeeper单机版.伪集群和集群环境搭建 [ZooKeeper系列]2.用Java实现ZooKeeper API的调用 在系列的前两篇文章中,介绍了ZooKeepe ...

  9. 干货 | ZooKeeper 源码和实践揭秘

    精选30+云产品,助力企业轻松上云!>>> 摘要:ZooKeeper 是个针对大型分布式系统的高可用.高性能且具有一致性的开源协调服务,被广泛的使用.对于开发人员,ZooKeeper ...

  10. zookeeper源码分析之三客户端发送请求流程

    znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的 ...

最新文章

  1. Java输入输出(io)流详解、图解
  2. 【CF526F】Pudding Monsters
  3. UI组件之AdapterView及其子类(六)ExpandableListView组件和ExpandableListActivity的使用
  4. TABLES ABOUT CRM MARTETING
  5. php 多个 csv 文件,php - 如何将CSV文件上传到多个数据库目录中? - SO中文参考 - www.soinside.com...
  6. 职称计算机考试 数量,职称计算机考试WPS基础考点:自动求和
  7. AtCoderGC038B - Sorting a Segment 数据结构 + RMQ
  8. Promise的deferred对象详解
  9. 01. Introdunction to Zero Knowlege -- Alon Rosen[零知识介绍]
  10. 发动机启动计算机,不自检直接启动伤车?看完发动机电脑自检原理你就明白了...
  11. 前端解决手机拍照旋转问题及图片压缩上传
  12. 操作系统的分类有哪些?
  13. mysql 1677_MySQL之数据库主从复制配置报错Last_Errno: 1677
  14. 塔尔斯基关于实数的8条公理(原文)
  15. hbase命令集(shell 命令,如建表,清空表,增删改查)
  16. VBA批量OCR识别提取身份证照片信息_手机扫描仪:直装就是VIP,不限次数,一秒钟就能提取图片中的文字...
  17. 叼爆了!微信动态红包封面!
  18. Codeforces Round #645 (Div. 2) D. The Best Vacation
  19. 关于悬浮球(悬浮窗)Android8.0(Android O)的适配
  20. netstat 命令用法详解

热门文章

  1. 嵌入式开发环境搭建:开发板tftp下载环境搭建
  2. Httpclient远程调用WebService示例
  3. indy idhttpserver有关下载的两个问题
  4. 无法启动SQL Server 2005中的SQL Server(MSSQLSERVER)服务--zt
  5. 【Java】进制转换器的实现
  6. JAVA通过HTTPS发送POST请求的方法
  7. 03-06 APP-UI自动化测试-等待方式
  8. 不能返回函数内部new分配的内存的引用_JNI开发之局部引用、全局引用和弱全局引用(三)...
  9. python程序设计试题库_最新《Python程序设计》试题库资料
  10. 如何避免ajax重复请求?