Zookeeper的功能简介

news2025/4/18 15:53:17

a085fdf3e8ed4d7db1af64623f4a1bb5.jpg1.ZooKeeper是什么?

 

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户

 

2.ZooKeeper提供了什么?

 

1)文件系统

 

2)通知机制

 

3.Zookeeper文件系统

 

每个子目录项如 NameService 都被称作为znode,和文件系统一样,我们能够自由的增加、删除znode,在一个znode下增加、删除子znode,唯一的不同在于znode是可以存储数据的。 

 

有四种类型的znode: 

 

1、PERSISTENT-持久化目录节点 

 

客户端与zookeeper断开连接后,该节点依旧存在 

 

2、PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点 

 

客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号 

 

3、EPHEMERAL-临时目录节点 

 

客户端与zookeeper断开连接后,该节点被删除 

 

4、EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点 

 

客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号 

 

<ignore_js_op> 

 

4.Zookeeper通知机制

 

客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,zookeeper会通知客户端。

 

5.Zookeeper做了什么?

 

1.命名服务 2.配置管理 3.集群管理 4.分布式锁 5.队列管理

 

6.Zookeeper命名服务

 

在zookeeper的文件系统里创建一个目录,即有唯一的path。在我们使用tborg无法确定上游程序的部署机器时即可与下游程序约定好path,通过path即能互相探索发现。

 

7.Zookeeper的配置管理

 

程序总是需要配置的,如果程序分散部署在多台机器上,要逐个改变配置就变得困难。现在把这些配置全部放到zookeeper上去,保存在 Zookeeper 的某个目录节点中,然后所有相关应用程序对这个目录节点进行监听,一旦配置信息发生变化,每个应用程序就会收到 Zookeeper 的通知,然后从 Zookeeper 获取新的配置信息应用到系统中就好

 

<ignore_js_op> 

 

8.Zookeeper集群管理

 

所谓集群管理无在乎两点:是否有机器退出和加入、选举master。 

 

对于第一点,所有机器约定在父目录GroupMembers下创建临时目录节点,然后监听父目录节点的子节点变化消息。一旦有机器挂掉,该机器与 zookeeper的连接断开,其所创建的临时目录节点被删除,所有其他机器都收到通知:某个兄弟目录被删除,于是,所有人都知道:它上船了。

 

新机器加入也是类似,所有机器收到通知:新兄弟目录加入,highcount又有了,对于第二点,我们稍微改变一下,所有机器创建临时顺序编号目录节点,每次选取编号最小的机器作为master就好。

 

<ignore_js_op> 

 

9.Zookeeper分布式锁

 

有了zookeeper的一致性文件系统,锁的问题变得容易。锁服务可以分为两类,一个是保持独占,另一个是控制时序。 

 

对于第一类,我们将zookeeper上的一个znode看作是一把锁,通过createznode的方式来实现。所有客户端都去创建 /distribute_lock 节点,最终成功创建的那个客户端也即拥有了这把锁。用完删除掉自己创建的distribute_lock 节点就释放出锁。 

 

对于第二类, /distribute_lock 已经预先存在,所有客户端在它下面创建临时顺序编号目录节点,和选master一样,编号最小的获得锁,用完删除,依次方便。

 

<ignore_js_op> 

 

10.Zookeeper队列管理

 

两种类型的队列:

 

1、同步队列,当一个队列的成员都聚齐时,这个队列才可用,否则一直等待所有成员到达。 

 

2、队列按照 FIFO 方式进行入队和出队操作。 

 

第一类,在约定目录下创建临时目录节点,监听节点数目是否是我们要求的数目。 

 

第二类,和分布式锁服务中的控制时序场景基本原理一致,入列有编号,出列按编号。

 

11.分布式与数据复制 

 

Zookeeper作为一个集群提供一致的数据服务,自然,它要在所有机器间做数据复制。数据复制的好处: 

 

1、容错:一个节点出错,不致于让整个系统停止工作,别的节点可以接管它的工作; 

 

2、提高系统的扩展能力 :把负载分布到多个节点上,或者增加节点来提高系统的负载能力; 

 

3、提高性能:让客户端本地访问就近的节点,提高用户访问速度。 

 

从客户端读写访问的透明度来看,数据复制集群系统分下面两种: 

 

1、写主(WriteMaster) :对数据的修改提交给指定的节点。读无此限制,可以读取任何一个节点。这种情况下客户端需要对读与写进行区别,俗称读写分离; 

 

2、写任意(Write Any):对数据的修改可提交给任意的节点,跟读一样。这种情况下,客户端对集群节点的角色与变化透明。

 

对zookeeper来说,它采用的方式是写任意。通过增加机器,它的读吞吐能力和响应能力扩展性非常好,而写,随着机器的增多吞吐能力肯定下降(这也是它建立observer的原因),而响应能力则取决于具体实现方式,是延迟复制保持最终一致性,还是立即复制快速响应。

 

12.Zookeeper角色描述

 

<ignore_js_op> 

 

13.Zookeeper与客户端

 

<ignore_js_op> 

 

14.Zookeeper设计目的

 

1.最终一致性:client不论连接到哪个Server,展示给它都是同一个视图,这是zookeeper最重要的性能。 

 

2.可靠性:具有简单、健壮、良好的性能,如果消息被到一台服务器接受,那么它将被所有的服务器接受。 

 

3.实时性:Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。但由于网络延时等原因,Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口。 

 

4.等待无关(wait-free):慢的或者失效的client不得干预快速的client的请求,使得每个client都能有效的等待。 

 

5.原子性:更新只能成功或者失败,没有中间状态。 

 

6.顺序性:包括全局有序和偏序两种:全局有序是指如果在一台服务器上消息a在消息b前发布,则在所有Server上消息a都将在消息b前被发布;偏序是指如果一个消息b在消息a后被同一个发送者发布,a必将排在b前面。 

 

15.Zookeeper工作原理

 

Zookeeper 的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和 leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。 

 

为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务。所有的提议(proposal)都在被提出的时候加上了zxid。实现中zxid是一个64位的数字,它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标识当前属于那个leader的统治时期。低32位用于递增计数。

 

16.Zookeeper 下 Server工作状态

 

每个Server在工作过程中有三种状态: 

 

LOOKING:当前Server不知道leader是谁,正在搜寻

LEADING:当前Server即为选举出来的leader

FOLLOWING:leader已经选举出来,当前Server与之同步

 

17.Zookeeper选主流程(basic paxos)

 

当leader崩溃或者leader失去大多数的follower,这时候zk进入恢复模式,恢复模式需要重新选举出一个新的leader,让所有的Server都恢复到一个正确的状态。Zk的选举算法有两种:一种是基于basic paxos实现的,另外一种是基于fast paxos算法实现的。系统默认的选举算法为fast paxos。

 

1.选举线程由当前Server发起选举的线程担任,其主要功能是对投票结果进行统计,并选出推荐的Server; 

 

2.选举线程首先向所有Server发起一次询问(包括自己); 

 

3.选举线程收到回复后,验证是否是自己发起的询问(验证zxid是否一致),然后获取对方的id(myid),并存储到当前询问对象列表中,最后获取对方提议的leader相关信息(id,zxid),并将这些信息存储到当次选举的投票记录表中; 

 

4.收到所有Server回复以后,就计算出zxid最大的那个Server,并将这个Server相关信息设置成下一次要投票的Server; 

 

5.线程将当前zxid最大的Server设置为当前Server要推荐的Leader,如果此时获胜的Server获得n/2 + 1的Server票数,设置当前推荐的leader为获胜的Server,将根据获胜的Server相关信息设置自己的状态,否则,继续这个过程,直到leader被选举出来。 通过流程分析我们可以得出:要使Leader获得多数Server的支持,则Server总数必须是奇数2n+1,且存活的Server的数目不得少于n+1. 每个Server启动后都会重复以上流程。在恢复模式下,如果是刚从崩溃状态恢复的或者刚启动的server还会从磁盘快照中恢复数据和会话信息,zk会记录事务日志并定期进行快照,方便在恢复时进行状态恢复。选主的具体流程图所示: 

 

<ignore_js_op> 

 

18.Zookeeper选主流程(fast paxos)

 

fast paxos流程是在选举过程中,某Server首先向所有Server提议自己要成为leader,当其它Server收到提议以后,解决epoch和 zxid的冲突,并接受对方的提议,然后向对方发送接受提议完成的消息,重复这个流程,最后一定能选举出Leader。

 

<ignore_js_op> 

 

19.Zookeeper同步流程

 

选完Leader以后,zk就进入状态同步过程。 

 

1. Leader等待server连接; 

 

2 .Follower连接leader,将最大的zxid发送给leader; 

 

3 .Leader根据follower的zxid确定同步点; 

 

4 .完成同步后通知follower 已经成为uptodate状态; 

 

5 .Follower收到uptodate消息后,又可以重新接受client的请求进行服务了。

 

<ignore_js_op> 

 

20.Zookeeper工作流程-Leader

 

1 .恢复数据; 

 

2 .维持与Learner的心跳,接收Learner请求并判断Learner的请求消息类型; 

 

3 .Learner的消息类型主要有PING消息、REQUEST消息、ACK消息、REVALIDATE消息,根据不同的消息类型,进行不同的处理。 

 

PING 消息是指Learner的心跳信息;

 

REQUEST消息是Follower发送的提议信息,包括写请求及同步请求;

 

ACK消息是 Follower的对提议的回复,超过半数的Follower通过,则commit该提议;

 

REVALIDATE消息是用来延长SESSION有效时间。

 

 

 

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

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

相关文章

超神之路 数据结构 2 —— Queue队列实现和循环队列和普通队列的性能比较

接上一篇继续往下挖&#xff0c;在上一篇&#xff0c;我们实现了一个属于自己的动态数组。利用这个动态数组&#xff0c;我们来实现一个基于动态数组&#xff0c;一个属于自己的普通队列Queue。 Queue 是一种它许我们从表的一段进行删除&#xff0c;表的另一端进行插入的线性表…

Docker—苹果Mac安装Docker的两种方式

文章目录Docker简介方式一&#xff1a;官网dmg安装方式二&#xff1a;homebrew安装前置条件brew安装docker关注微信公众号&#xff1a;CodingTechWork&#xff0c;一起学习进步。Docker简介 &emsp docker就是集镜像、容器和仓库三个概念于一身的集装箱&#xff0c;应用于…

GPO:组策略与系统配置

1、所有的服务器不需要按ctrl+alt+del交互式登录; 2、关闭所有机器的睡眠功能 3、所有计算机都不允许登录Microsoft账户; 4、允许IT组进行系统时间修改 5、设定所有职务为managers的用户为本地管理员,除了域控制器 GPO:组策略与系统配置 所有的服务器不需要按ctrl+alt+del;…

基于ELK搭建的本地社工库

简介 ELK原本是一个开源实时日志分析平台。 ELK是三个开源软件的缩写&#xff0c;分别为&#xff1a;Elasticsearch 、 Logstash以及Kibana 。目前又新增了一个Beats&#xff0c;是一个轻量级的日志收集处理工具&#xff0c;Beats占用资源少&#xff0c;适合于在各个服务器上…

Greenplum GPKafka【实践 01】使用GPKafka实现Kafka数据导入Greenplum数据库踩坑问题记录(不断更新ing)

1.说明 Kafka 是分布式消息订阅系统&#xff0c;有非常好的横向扩展性&#xff0c;可实时存储海量数据&#xff0c;是很常用的流数据处理中间件。物联网设备采集的数据很多时候就是通过 Kafka 进行处理的。当 Kafka 数据要入库分布式数据库 Greenplum 时&#xff0c;我们就需要…

二、IAR新建一个工程

之前录制了无线传感网综合项目实战课程&#xff0c;这个课程非常适合应届毕业生和想转行Linux的朋友&#xff0c;用来增加项目经验。 其中一部分内容是关于CC2530zigbee的知识&#xff0c;后面会更新几篇关于cc2530的文章&#xff0c;敬请关注&#xff01; 下面是该系列文章链…

gcc 好玩的 builtin 函数

gcc 好玩的 builtin 函数 前言 在本篇文章当中主要想给大家介绍一些在 gcc 编译器当中给我们提供的一些好玩的内嵌函数 (builtin function)&#x1f923;&#x1f923;&#x1f923; 。 __builtin_frame_address 使用内嵌函数实现 __builtin_frame_address(x) // 其中 x 一…

【GPU】Nvidia CUDA 编程高级教程——利用蒙特卡罗法求解近似值(MPI方法)

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

无线蓝牙运动耳机推荐,目前实用性不错的运动耳机推荐

对于运动人士来说&#xff0c;运动耳机是日常出门标配&#xff0c;一款实用性好的运动耳机能给我们带来很大的动力&#xff0c;在运动时戴着听音乐&#xff0c;能够释放压力的同时让运动过程变得更加心情愉快。但是运动耳机实在是太多了&#xff0c;琳琅满目&#xff0c;各种各…

c++11特性(3)

1.lambda表达式 a.出现由来&#xff1a; 以sort为例&#xff0c;我们可以传入一个仿函数对自定义类型进行排序。但是&#xff0c;对每一种比较方式我们都要显示传一个仿函数太麻烦。要是乱命名更加要命&#xff0c;那就除了写这段代码的人没人看得懂了&#xff01; b.lambda…

基于象虫损害优化算法的投资组合问题(Matlab代码实现)

&#x1f4dd;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;…

我的写作心得

前言 首先&#xff0c;博主是一个在校高中生&#xff0c;平常可以说几乎没有时间来创作文章&#xff0c;所以说断更也是很正常的 时隔半年&#xff0c;我也在csdn累计了400多个粉丝&#xff08;截止我创作这篇文章的时候&#xff09;&#xff0c;从之前的一无所有&#xff0c…

PCL交互选择ROI区域

PCL的配置和如何配准点云可见博主之前的博客 win10环境下PCL安装和配置回顾&#xff08;一&#xff09;_竹叶青lvye的博客-CSDN博客_pcl win10 win10环境下PCL安装和配置回顾&#xff08;二&#xff09;_竹叶青lvye的博客-CSDN博客_win10 安装pcl PCL - 3D点云配准(registra…

状态保持-JWT

“ Web的状态保持技术 -JWT&#xff08;Json Web Token&#xff09;” 在分布式微服务技术流行的今天&#xff0c;大型网站对JWT的使用愈加频繁&#xff0c;相比较于传统的session cookie。 HTTP 是一个无状态的协议&#xff0c;何为无状态呢&#xff1f;就是说这本次请求和上次…

【毕业设计】67-基于单片机的三相电压型SPWM逆变器控制设计及应用(仿真、原理图、源代码、低重复参考文档、答辩PPT、英文文献)

【毕业设计】67-基于单片机的三相电压型SPWM逆变器控制设计及应用&#xff08;仿真、原理图、源代码、低重复参考文档、答辩PPT、英文文献&#xff09; 文章目录【毕业设计】67-基于单片机的三相电压型SPWM逆变器控制设计及应用&#xff08;仿真、原理图、源代码、低重复参考文…

网站文章采集器-万能文章采集器

随着时代的发展。互联网无时不刻地出现在我们的生活中&#xff0c;大家也越来越注重效率&#xff0c;今天小编就给大家来分享一款网站文章采集器。只需要点几下鼠标就能轻松获取数据&#xff0c;不管是导出本地还是发布到网上。网站人员可以实现自动采集&#xff0c;定时发布&a…

[计算机毕业设计]食品安全数据的关联分析模型的应用

前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着准备考研,考公,考教资或者实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过…

idea里面完整创建maven项目(包含如何使用)

目录 前言&#xff1a; 1.Maven和Maven Archetype区别&#xff1f; 2.创建maven项目之前的步骤&#xff08;必看&#xff09; 一、创建maven 1.打开idea--->文件--->新建--->项目 2.新建项目--->自定义项目名称--->选择Maven-->创建 3. 创建成功 二、…

微信小程序连接蓝牙汉印HM-A300L标签打印机

需求&#xff1a; 参考文章&#xff1a; 微信小程序实现蓝牙打印 打印机CPCL编程参考手册&#xff08;CPCL 语言&#xff09; 蓝牙打印机CPCL编程手册~汉印HM-A300 无用小知识&#xff1a; A300系列&#xff1a;先将打印机关机然后装好纸&#xff0c;同时按住屏幕左右两边的按…

UDS诊断网络层ISO15765-2(CAN)

诊断协议那些事儿 本文为诊断协议那些事儿专栏文章&#xff0c;从一个 ECU 到另一个 ECU&#xff0c;或外部诊断设备和一个 ECU 之间的通信&#xff0c;不仅依赖前文介绍的诊断寻址方式&#xff0c;更需要关注数据的传输&#xff0c;依赖网络层、传输层协议去完成&#xff0c;…