ZooKeeper单机服务器启动

news2025/3/10 15:43:23

ZooKeeper服务器的启动,大体可以分为以下五个主要步骤:配置文件解析、初始化数据管理器、初始化网络I/O管理器、数据恢复和对外服务。下图所示是单机版ZooKeeper服务器的启动流程图。

 

预启动

预启动的步骤如下。

(1)统一由QuorumPeerMain作为启动类。

无论是单机版还是集群模式启动ZooKeeper服务器,在zkServer.cmd和zkServer.sh两个脚本中,都配置了使用org.apache.zookeeper.server.quorum.QuorumPeerMain作为启动入口类。

(2)解析配置文件zoo.cfg。

ZooKeeper首先会进行配置文件的解析,配置文件的解析其实就是对zoo.cfg文件的解析。该文件配置了ZooKeeper运行时的基本参数,包括tickTime、dataDir和clientPort等参数。关于ZooKeeper参数配置。

(3)创建并启动历史文件清理器DatadirCleanupManager。

从3.4.0版本开始,ZooKeeper 增加了自动清理历史数据文件的机制,包括对事务日志和快照数据文件进行定时清理。

(4)判断当前是集群模式还是单机模式的启动。

ZooKeeper根据步骤2中解析出的集群服务器地址列表来判断当前是集群模式还是单机模式,如果是单机模式,那么就委托给ZooKeeperServerMain进行启动处理。

(5)再次进行配置文件zoo.cfg的解析。

(6)创建服务器实例ZooKeeperServer。

org.apache.zookeeper.server.ZooKeeperServer是单机版ZooKeeper服务端最为核心的实体类。ZooKeeper服务器首先会进行服务器实例的创建,接下去的步骤则都是对该服务器实例的初始化工作,包括连接器、内存数据库和请求处理器等组件的初始化。

初始化

初始化的步骤如下。

(1)创建服务器统计器ServerStats。

ServerStats是ZooKeeper服务器运行时的统计器,包含了最基本的运行时信息,如下表所示。

属性

说明

packetsSent

从ZooKeeper启动开始,或是最近一次重置服务端统计信息之后,服务端向客户端发送的响应包次数

packetsReceived

从ZooKeeper启动开始,或是最近一次重置服务端统计信息之后,服务端接收到的来自客户端的请求包次数

maxLatency

minLatency

totalLatency

从ZooKeeper启动开始,或是最近一次重置服务端统计信息之后,服务端请求处理的最大延时、最小延时以及总延时

count

从ZooKeeper启动开始,或是最近一次重置服务端统计信息之后,服务端处理的客户端请求总次数

(2)创建ZooKeeper数据管理器FileTxnSnapLog。

FileTxnSnapLog是ZooKeeper上层服务器和底层数据存储之间的对接层,提供了一系列操作数据文件的接口,包括事务日志文件和快照数据文件。ZooKeeper根据zoo.cfg文件中解析出的快照数据目录dataDir和事务日志目录datalogDir来创建FileTxnSnapLog。

(3)设置服务器tickTime和会话超时时间限制。

(4)创建ServerCnxnFactory。

在早期版本中,ZooKeeper都是自己实现NIO框架,从3.4.0版本开始,引入了Netty。读者可以通过配置系统属性zookeeper. serverCnxnFactory来指定使用ZooKeeper自己实现的NIO还是使用Netty框架来作为ZooKeeper服务端网络连接工厂。

(5)初始化ServerCnxnFactory。

ZooKeeper首先会初始化一个Thread,作为整个ServerCnxnFactory的主线程,然后再初始化NIO服务器。

(6)启动ServerCnxnFactory主线程。

启动步骤5中已经初始化的主线程ServerCnxnFactory的主逻辑(run方法)。需要注意的一点是,虽然这里ZooKeeper的NIO服务器已经对外开放端口,客户端能够访问到ZooKeeper的客户端服务端口2181,但是此时ZooKeeper服务器是无法正常处理客户端请求的。

(7)恢复本地数据。

每次在ZooKeeper启动的时候,都需要从本地快照数据文件和事务日志文件中进行数据恢复。ZooKeeper的本地数据恢复比较复杂。

(8)创建并启动会话管理器。

在ZooKeeper启动阶段,会创建一个会话管理器SessionTracker。SessionTracker主要负责ZooKeeper服务端的会话管理。创建SessionTracker的时候,会初始化expirationInterval.nextExpirationTime和sessionsWithTimeout (用于保存每个会话的超时时间),同时还会计算出一个初始化的sessionID。

SessionTracker初始化完毕后,ZooKeeper就会立即开始会话管理器的会话超时检查。

(9)初始化ZooKeeper的请求处理链。

ZooKeeper的请求处理方式是典型的责任链模式的实现,在ZooKeeper服务器上,会有多个请求处理器依次来处理一个客户端请求。在服务器启动的时候,会将这些请求处理器串联起来形成一个请求处理链。单机版服务器的请求处理链主要包括PrepRequestProcessor、SyncRequestProcessor和FinalRequestProcessor三个请求处理器。

(10)注册JMX服务。

ZooKeeper会将服务器运行时的一些信息以JMX的方式暴露给外部。

(11)注册ZooKeeper服务器实例。

在步骤6中,ZooKeeper已经将ServerCnxnFactory主线程启动,但是同时我们提到此时ZooKeeper依旧无法处理客户端请求,原因就是此时网络层尚不能够访问ZooKeeper服务器实例。在经过后续步骤的初始化后,ZooKeeper服务器实例已经初始化完毕,只需要注册给ServerCnxnFactory即可,之后,ZooKeeper就可以对外提供正常的服务了。

至此,单机版的ZooKeeper服务器启动完毕。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/894468.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

游乐场vr设备虚拟游乐园vr项目沉浸体验馆

在景区建设一个VR游乐场项目可以为游客提供一种新颖、刺激和沉浸式的游乐体验。提高游客的体验类型,以及景区的类目,从而可以吸引更多的人来体验。 1、市场调研:在决定建设VR游乐场项目之前,需要进行市场调研,了解当地…

YOLOv2和YOLOv3基础

目录 v2改进网络结构先验框感受野 V3多scale残差网络架构先验框softmax层代替 v2 改进 网络结构 先验框 感受野 V3 多scale 残差 网络架构 先验框 softmax层代替

项目管理系统是什么?能干什么?有什么功能?一文看懂

阅读本文您可以了解:1、项目任务管理系统是什么;2、项目任务管理系统的作用;3、项目任务管理系统的功能 一、什么是项目任务管理 项目任务管理是指运用系统的理论方法,在有限的条件和资源下,对项目从开始到结束的全流…

jvm-类加载子系统

1.内存结构概述 类加载子系统负责从文件系统或网络中加载class文件,class文件在文件开头有特定的文件标识 ClassLoader只负责class文件的加载,至于它是否运行,则由Execution Engine决定 加载的类信息存放于一块称为方法区的内存空间&#xff…

英特尔NUC12发烧友套件(蝰蛇峡谷)评测,适合设计者的迷你主机

英特尔的下一代计算单元(NUC)系列迷你个人电脑不断发展,现在已经拥有真正的英特尔Arc游戏硬件。NUC 12蝰蛇峡谷是第一款采用英特尔Arc专用图形处理器的NUC,具体来说,是搭载了Arc A770M移动GPU和16GB独立显存。配备Core…

【数据分享】1901-2022年1km分辨率逐年最低气温栅格数据(免费获取/全国/分省)

气温数据是我们在各项研究中最常用的气象指标之一!之前我们给大家分享过1901-2022年1km分辨率逐月最低气温栅格数据(可查看之前的文章获悉详情)!该数据来源于国家青藏高原科学数据中心,这儿的逐月最低气温是当月每日最…

Android 14新增复制粘贴方式,解析工作原理

安卓14为用户提供了一种更简单的方式来在应用程序之间复制和粘贴内容,这肯定是你现在想在安卓14测试版或未来几个月该软件在你的安卓手机上推出时尝试的。 一旦更新在你的手机上(无论是测试版还是其他版本),你只需点击并按住你想…

高忆管理:药店零售概念回落,开开实业走低,此前7日大涨超80%

药店零售概念18日盘中大幅下挫,到发稿,华人健康跌逾11%,漱玉布衣、塞力医疗跌超9%,重药控股、浙江震元、榜首医药等跌超7%,药易购跌超6%,开开实业跌超3%。 值得注意的是,开开实业此前7个交易日斩…

单因素多变量方差分析

多变量方差分析:是对多个独立变量是否受单个或多个因素影响而进行的方差分析。它不仅能够分析多个因素对观测变量的独立影响,更能够分析多个因素的交互作用能否对观测变量产生影响。本章以单因素多变量分析为例,即一个分组变量和多个欲分析的…

这几点,RunnerGo领先太多了

在用jmeter做性能测试时想看完整一点的测试报告,想配置阶梯模式来压测,想配置不同的接口并发这些都需要安装插件并且影响机器性能,想做自动化测试还得放到jenkins,这些配置起来太繁琐。今天给大家推荐一款测试平台RunnerGo&#x…

如何禁止windows系统自动更新

自从升级到win11之后,发现更新插件的频率高得有点过分,基本上每周都有提醒让你更新软件。 对于我这种经常半年都不关机的使用者,这玩意真的蛮烦躁的,关键更新的内容我看了都很无聊。 系统到是给了暂停更新的功能,但是…

flink jira 提交开源bug

注册apache issue账号,并申请flink空间的权限后. 提问题/bug 查看已经提交的问题:

全自动模拟量采集软件框架详解

Monitor.Analog采用一种MVVM架构模式,用于将用户界面(View)与业务逻辑(Model)进行分离,并通过ViewModel来进行连接和交互。以下是MVVM框架的介绍: 1. Model(模型)&#x…

Java版 招投标系统简介 招投标系统源码 java招投标系统 招投标系统功能设计tbms

​ 项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以…

【【Verilog典型电路设计之FIFO设计】】

典型电路设计之FIFO设计 FIFO (First In First Out)是一种先进先出的数据缓存器,通常用于接口电路的数据缓存。与普通存储器的区别是没有外部读写地址线,可以使用两个时钟分别进行写和读操作。FIFO只能顺序写入数据和顺序读出数据&#xff0…

SpringBoot复习:(55)在service类中的方法上加上@Transactional注解后,Spring底层是怎么生成代理对象的?

SpringBoot run方法代码如下: 可以看到它会调用refreshContext方法来刷新Spring容器,这个refreshContext方法最终会调用AbstractApplicationContext的refresh方法,代码如下 如上图,refresh方法最终会调用finisheBeanFactoryInit…

红帽8.2版本CSA题库:第十二题查找字符串

红帽8.2版本CSA题库:第十二题查找字符串 grep ng /usr/share/xml/iso-codes/iso_639_3.xml > /root/list #查找并重定向写入 cat /root/list #查看

LVS负载均衡群-DR模式

目录 1、LVS-DR数据包流向分析 2、DR 模式的特点 3、LVS-DR中APP的问题 3.1 ari jignore-1 3.2 arp announce-2 4、DR模式 LVS负载均衡群集部署 5、简述LVS三种工作模式,简述他们的区别? 6、LVS调度算法 7、LVS的工作模式及其工作过程及其优缺点 1、LVS-DR…

剑指 Offer 62. 圆圈中最后剩下的数字 (这题纯无语)

文章目录 题目描述思路分析完整代码 题目描述 0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字(删除后从下一个数字开始计数)。求出这个圆圈里剩下的最后一个数字。 例如,0、1、2、3、4这5个…

Spring框架之AOP详解【面向切面技术完成日志及事物管理】

目录 一、前言 1.1.Spring简介 1.2.使用Spring的优点 二、Spring之AOP详解 2.1.什么是AOP 2.2.AOP在Spring的作用 2.3.AOP案例讲解 三、AOP案例实操 3.0.代理小故事(方便理解代理模式) 3.1.代码演示 3.2.前置通知 3.3.后置通知 3.3.环绕通知…