Zookeeper原理篇-Zookeeper启动流程分析(1)_zkt开发流程详解-程序员宅基地

技术标签: 程序员  zookeeper  linux  分布式  

5.通过解析Zoo.cfg中的配置信息相关的参数,开始创建ZookeeperServer类实例,完成了这一步后,预处理阶段完成

初始化

初始化阶段,则是开始将Zookeeper中的相关服务管理类进行创建,大体流程如下:

1.创建了ZookeeperServer实例后,Zookeeper会创建一个ServerStats实例,此类用来收集Zookeeper运行过程中的统计信息,例如发送客户端的响应包次数,收到的请求包次数,最近启动后最大的延迟和最小延迟等

2.紧接着会创建Zookeeper中的数据存储管理器–FileTxnSnaplog类,此类作为最上层的,提供了一系列了操作数据文件的接口,其中包括操作事务日志和操作快照的接口,而创建当前类实例会根据zoo.cfg中的dataDir以及dataLogDir参数进行构建

3.同样根据解析出来的zoo.cfg配置文件中的tickTime以及session的会话时间来设置对应参数,并且会根据zookeeper.serverCnxnFactory参数来确定启动Zookeeper的网络连接工厂是基于Netty的还是基于jdk自身的Nio工厂

4.确定工厂类型后,Zookeeper会开始初始化一个Thread,作为整个Zookeeper运行过程中的主线程,并且开始初始化ServerCnxnFactory实例

5.当ServerCnxnFactory实例构建完毕后,开始运行对应的run方法中的业务逻辑,此时由于连接工厂已经创建,端口其实已经对外开放了,但是Zookeeper此时还未完成启动过程,还无法对外处理请求

6.开始恢复Zookeeper的数据,将从事务日志以及之前保存的快照进行数据恢复

7.数据恢复完成后,Zookeeper开始构建会话管理器–SessionTracker,此类主要负责管理Session,在创建的时候,将e xpirationlnterval, nextExpirationTimesessionsWithTimeout进行计算以及配置,并且会计算出每一个Session对应的SessionID,并且在运行过程中会负责Session的会话超时检测等

8.创建完毕后,Zookeeper会初始化对应的请求过滤链,而在Zookeeper中请求的过滤链使用了责任链模式,其中处理的顺序流程主要是PrepRequestProessor->SyncRequestProessor->FinalRequestProessor三个请求处理器,至此Zookeeper的初始化流程已经做完

注册提供服务

当Zookeeper的初始化流程完成后,服务器已经开始到就绪状态了,只需要将对应的信息注册以后即可对外提供服务了,此阶段的流程大概如下:

可以看到此阶段中,Zookeeper只需要将JMX服务注册,以及当前相关实例注册完毕,即可完成单机启动流程,此时的Zookeeper已经正常提供服务了

集群模式启动流程

集群模式的启动过程很多和单机模式是一样的,但是由于集群模式下,会有Leader机器选举以及数据同步的过程,因此Zookeeper的集群模式启动过程要复杂的多,而整个集群的启动过程,大体可以分为五个部分,分别是预处理初始化Leader选举Leader与Follower交互以及Leader与Follower启动,其中预处理过程几乎与单机模式一样,唯一的区别在于解析zoo.cfg中的连接配置,判断启动模式为集群模式,开始进入集群模式的初始化操作流程而已,因此,我们从集群模式的初始化开始

初始化

初始化过程大体和单机模式差不多,如下:

1.创建并初始化ServerCnxnFactory

2.创建Zookeeper中的数据文件管理器FileTxnSnaplog

3.在集群模式下,会去创建QuorumPeer实例,Quorum是集群模式下特有的对象,属于Zookeeper的托管者,此类的作用是在运行期间,会不停的检测当前服务器实例的状态,并且在需要选举的时候发起选举

4.创建Zookeeper中的内存数据库ZKDatabase实例,用来记录会话记录以及DataTree和事物日志

5.QuorumPeer实例作为托管者,会在启动过程中,将核心组件信息注册上去,包括之前创建的ZKDatabase、FileTxnSnaplog以及服务器列表信息,选举算法等

6.开始恢复数据

7.数据恢复完成后,开始启动ServerCnxnFactory中的主线程,运行run方法,开始执行服务器选举相关的操作

Leader选举

选举阶段的流程大概如下:

1.Zookeeper解析zoo.cfg配置文件中的 electionAlg属性,来确定进行选举的算法是哪一种,在Zk中有三种选举算法,分别是 LeaderElectionAuthFastLeaderElectionFastLeaderElection,分别对应数值0-3,不过从3.4的版本开始,zk仅支持FastLeaderElection选举算法,其他两种被废弃了。同样的,在选举的初始化阶段,zk会根据自身服务器ID、lastLoggedZxid和当前服务器的epoch初始化一个选举的票据

2.选举初始化准备好以后,开始注册JMX服务

3.前面创建好的QuorumPeer实例会不断检测当前的服务器状态,在正常情况下,QuorumPeer的状态应该是LOOKING,才会开始进行选举操作

4.开始进行选举操作,简单来说,zk中一般是ZXID最大的机器成为Leader,如果ZXID一样,SID越大的则成为Leader。(zk的详细选举流程,则在后续的文章中分析)

Leader与Follower交互

当选举出Leader机器以后,其他的机器则会开始与Leader进行交互,进行数据同步等操作,此阶段的流程大致如下:

1.不同角色(Leader和Follower)的zookeeper服务器在选举完毕后,会开始进入各自角色的主流程

2.在Zookeeper集群运行期间,Leader服务器需要和其他的服务器保持连接确定集群的机器存活情况,zk创建LearnerCnxAcceptor实例用来负责处理所有的非Leader机器的连接请求

3.非Leader服务器在启动完毕后,会从选举的结果中找到集群的Leader,并且尝试进行连接

4.Leader的LearnerCnxAcceptor实例在接受到非Leader机器的请求后,会创建LearnerCnxHandler实例,每个实例会对应一个Leader与非Leader机器的连接,负责对应服务器之间的消息通信处理以及数据同步操作

5.当非Leader机器与Leader服务器建立连接后,非Leader机器就会将自己的信息发送给Leader,此过程的数据称之为LearnerInfo,其中包括了当前服务器的SID以及最大的ZXID

6.Leader收到LearnerInfo消息后,从中解析出SID和ZXID,然后根据ZXID解析出epochoflearner,和Leader自身的epochofleader进行比较,如果发现Leader的epochofleader比较小,则会更新Leader的epoch:

  1. epoch_of_leader = epoch_of_learner + 1
    自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

谈到面试,其实说白了就是刷题刷题刷题,天天作死的刷。。。。。

为了准备这个“金三银四”的春招,狂刷一个月的题,狂补超多的漏洞知识,像这次美团面试问的算法、数据库、Redis、设计模式等这些题目都是我刷到过的

并且我也将自己刷的题全部整理成了PDF或者Word文档(含详细答案解析)

我的美团offer凉凉了?开发工程师(Java岗)三面结束等通知...

66个Java面试知识点

架构专题(MySQL,Java,Redis,线程,并发,设计模式,Nginx,Linux,框架,微服务等)+大厂面试题详解(百度,阿里,腾讯,华为,迅雷,网易,中兴,北京中软等)

我的美团offer凉凉了?开发工程师(Java岗)三面结束等通知...

算法刷题(PDF)

我的美团offer凉凉了?开发工程师(Java岗)三面结束等通知...

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
3380781616)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

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

智能推荐

1day漏洞包含POC-金和OA jc6 viewConTemplate.action存在FreeMarker模板注入漏洞-程序员宅基地

文章浏览阅读612次,点赞5次,收藏16次。金和JCS协同管理应用软件采用了精确管理模型的最新指导思路,充分融入现代企业的管理科学精髓,通过结合最新的信息化技术,从而更高效的帮助客户开展业务、管理企业,提高效率。JCS除了显著的“集团化应用”的特色外,还具有灵活易用的“信息门户应用”功能,可以根据个人需求,定制灵活的个性化工作台,全面体现了金和JCS以人为本、管理精确的理念。其接口存在命令执行漏洞,可能导致服务器被攻击者接管。

Linux学习——uboot入门_linux uboot-程序员宅基地

文章浏览阅读3.1k次,点赞4次,收藏34次。uboot是一个裸机程序,是一个,用于启动Linux 或者其他其他系统。uboot主要工作是初始化DDR,因为Linux是运行在DDR里的,Linux镜像(Zimage /ulmage)+设备树(.dtb)存放在SD、EMMC、NAND、SPI Flash等外置存储器中。Uboot需要将Linux镜像从外置Flash拷贝到DDR中,linux系统才能运行。_linux uboot

解决Windows中mfc110u.dll文件丢失问题-程序员宅基地

文章浏览阅读2.8k次。或者将文件复制到Windows系统目录,这个需要注意电脑的系统是32位还是64位,如果是32位的系统,那就将本站下载32位的dll文件放到“C:/Windows/System32”这个文件夹里面,如果是64位的系统,那就将本站下载的32位dll文件放到“C:/Windows/SysWOW64”这个文件夹里面,本站下载的64位文件放到“C:/Windows/System32”这个文件夹里面.二、扫描完成,扫描结果分成三部分,包括1,待修复的丢失文件。1、从下面列表下载mfc110u.dll文件。_mfc110u.dll

爬虫中常见的反爬手段和解决方法-程序员宅基地

文章浏览阅读9.6k次,点赞25次,收藏113次。了解反爬的三个方向 了解常见基于身份识别进行反爬 了解常见基于爬虫行为进行反爬 了解常见基于数据加密进行反爬一、反爬的三个方向基于身份识别进行反爬 基于爬虫行为进行反爬 基于数据加密进行反爬二、常见基于身份识别进行反爬1. 通过headers字段来反爬headers中有很多字段,这些字段都有可能会被对方服务器拿过来判断是否为爬虫1.1 通过headers中的user-agent字段进行反爬反爬原理:爬虫默认情况下没有user-agent,而是使用模块默认设置 解决.._反爬

基于TX2的全向四轮小车搭建(一)_搭载了tx2的无人车-程序员宅基地

文章浏览阅读1.6k次,点赞3次,收藏28次。全向四轮小车搭建(一) - 硬件清单全向四轮小车实物图小车硬件清单小车功能说明全向四轮小车实物图全向四轮小车是一类差分式自主移动小车,该小车基于Jetson TX2 作为主控板,以树莓派3b+作为从机控制电机转速,四个直流电机由两个电机驱动板驱动。这一系列介绍本人从零开始搭建该小车的过程,记录下该过程中走过的弯路和一些个人心得,作为学习记录。小车硬件清单名称数目单价Jetson TX2 主控板1¥3299树莓派3b+1¥499树莓派3电机扩展版1¥20_搭载了tx2的无人车

JavaSE-13笔记【集合2(+2024新)】-程序员宅基地

文章浏览阅读819次,点赞18次,收藏8次。return age;} }Objects;return age;@Override//key中存储自定义类型User Map < User , String > map = new HashMap < User , String >();//创建User对象 User user1 = new User("张三" , 18);User user2 = new User("李四" , 23);

随便推点

Ubuntu下搭建Redis主从集群_ubuntu22 redis 主从-程序员宅基地

文章浏览阅读870次。共包含三个节点,一个主节点,两个从节点。这里我们会在同一台虚拟机中开启3个redis实例,模拟主从集群,信息如下。_ubuntu22 redis 主从

quartus仿真文件的编写_reg eachvect-程序员宅基地

文章浏览阅读8k次,点赞5次,收藏56次。步骤与实现1.verilog代码写完之后,进行语法错误检查和全编译,编译成功之后,需要进行仿真文件的编写,在已有的模板上进行修改。(接上一篇如何获取仿真文件模板)2.修改主要是进行输入信号的赋值,仿真文件内容组成如下:(以按键点亮自己的led灯仿真文件代码编译为例看内容组成)3.二选一选择器就是,三个输入,一个输出,当选通信号为低电平,选择输入2=输出,当选通信号为高电平,选择输入1=输出。二选一选择器verilog代码如下:module choose(input wire [0:0] in__reg eachvect

编程环境和软件工具安装手册_服务器编程环境安装手册-程序员宅基地

文章浏览阅读160次。Linux 服务器软件安装_服务器编程环境安装手册

Python编写简单的学生管理系统_test_student.py-程序员宅基地

文章浏览阅读1w次,点赞9次,收藏47次。Python编写简单的学生管理系统一共两个文件,其中一个定义函数,另一个是主程序,调用函数,运行程序CMS.py'''编写“学生信息管理系统”,要求如下:必须使用自定义函数,完成对程序的模块化学生信息至少包含:姓名、年龄、学号,除此以外可以适当添加必须完成的功能:添加、删除、修改、查询、退出'''# 定义一个列表用来存储多个学生信息stuList = []# 定义系统..._test_student.py

【看表情包学Linux】文件描述符 | 重定向 Redirection | dup2 函数 | 缓冲区的理解 (Cache)_重定向要刷新缓冲区函数-程序员宅基地

文章浏览阅读2.1k次,点赞72次,收藏65次。在上一章中,我们已经把 fd 的基本原理搞清楚了。本章我们将开始探索 fd 的应用特征,探索文件描述符的分配原则。讲解重定向,上一章是如何使用 fflush 把内容变出来的,介绍 dup2 函数,追加重定向和输入重定向的知识。最后我们讲解缓冲区,研究缓冲区的刷新策略。_重定向要刷新缓冲区函数

【深度学习】因果推断与机器学习的高级实践 | 数学建模_问题根因 分析 机器学习-程序员宅基地

文章浏览阅读1.5w次,点赞106次,收藏76次。当前,以深度学习为核心的机器学习和人工智能技术迅猛发展,给人们生产生活带来了巨大的深刻变化。人工智能在带来巨大机遇的同时,也蕴含着风险和挑战。现阶段以数据驱动、关联学习为模式的机器学习方法倾向于在数据驱动下对变量之间关联关系进行统计建模,缺乏以知识指导机制实现变量之间“由果溯因”的因果推断与分析有效方法,导致其普遍存在解释性不强、稳定性不高等问题。复杂数据中变量之间关联关系有三种来源:因果关联(Causation)、混淆偏差(Confounding Bias)和选择偏差(Selection Bias)。_问题根因 分析 机器学习

推荐文章

热门文章

相关标签