Zookeeper学习笔记(2)——工作原理

ZooKeeper源码学习笔记(2)--Standalone模式下的ZooKeeper Server入口Server的启动代码位于 zkServer.sh 文件中。zkServer.sh脚本同 /etc/init.d/ 中的启动脚本比较类似,都是通过shell的case命令解析指令执行。具体指令如下: 1. start: 通过nohup后台启动org.apache.zookeeper.server.quorum.QuorumPeerMain 2. start-foreground: 阅读详情

1. 集群节点

ZK集群中的节点有3种角色和4种状态。

3种角色:

  • leader:领导者
  • follower:随从,参与选举和投票,可被选举为领导者。
  • observer:接受者,不参与选举和投票

4种状态:

  • LOOKING:当前Server不知道leader是谁,正在搜寻。
  • LEADING:当前Server即为选举出来的leader。
  • FOLLOWING:leader已经选举出来,当前Server与之同步。
  • OBSERVING:observer的行为在大多数情况下与follower完全一致,但是他们不参加选举和投票,而仅仅接受(observing)选举和投票的结果。

2. 原子广播协议

原子消息系统是ZK的核心,用于保证同步所有服务器:

  • 可靠性传输。如果消息m被到一台服务器接受,那么它将被所有的服务器接受。
  • 全局有序。如果在一台服务器上消息a在消息b前发布,则在所有Server上消息a都将在消息b前被发布。
  • 偏序。如果一个消息b在消息a后被同一个发送者发布,a必将排在b前面。

Zab(Zookeeper Atomic Broadcast)协议保证了原子消息系统的高效性、可靠性、易实现性和易维护性。Zab协议假设服务器间可以构建一个点对点的FIFO通道,FIFO通道依赖TCP进行通信:

  • 有序传输。数据传输有序,消息m之前的消息传输完成才可传输m,消息m传输完成后,消息m之后的消息才可传输。
  • 关闭后无消息。FIFO通道关闭后,从通道无法获取消息。
  • Packet。FIFO通道中的比特流。
  • Proposal。协议单元。指定数量的ZK服务器获取packets后,proposal被接受。
  • Message。原子广播到所有ZK服务器的比特流。message封装成一个proposal。

ZK不仅保证message的顺序,也保证proposal的顺序。通过zxid(ZooKeeper Transaction Id)来展示全局顺序。每次对Zookeeper的状态的改变都会产生一个zxid,zxid是全局有序的,如果zxid1小于zxid2,则zxid1在zxid2之前发生。

3. 工作过程

Zookeeper整个工作分两个阶段:

  • Leader激活。选举leader,并建立系统的状态,准备执行提议。当服务启动或者在Leader崩溃后,Zab就进入了Leader激活阶段,当领导者被选举出来,且大多数Server完成了和leader的状态同步以后,Leader激活结束。状态同步保证了leader和Server具有相同的系统状态。
  • 激活消息。leader获取消息后,请求和协调消息传输。

Leader Election

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

先介绍basic 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会记录事务日志并定期进行快照,方便在恢复时进行状态恢复。

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

Leader Election

Zookeeper Server接收到一次request,如果是follower,会转发给leader,Leader执行请求并通过Transaction的形式广播这次执行。Zookeeper集群如何决定一个Transaction是否被commit执行?通过“两段提交协议”(a two-phase commit):

  1. Leader给所有的follower发送一个PROPOSAL消息。
  2. 一个follower接收到这次PROPOSAL消息,写到磁盘,发送给leader一个ACK消息,告知已经收到。
  3. 当Leader收到法定人数(quorum)的follower的ACK时候,发送commit消息执行。

Zab协议保证:

  1. 如果leader以T1和T2的顺序广播,那么所有的Server必须先执行T1,再执行T2。
  2. 如果任意一个Server以T1、T2的顺序commit执行,其他所有的Server也必须以T1、T2的顺序执行。

“两段提交协议”最大的问题是:

如果Leader发送了PROPOSAL消息后crash或暂时失去连接,会导致整个集群处在一种不确定的状态(follower不知道该放弃这次提交还是执行提交)。Zookeeper这时会选出新的leader,请求处理也会移到新的leader上,不同的leader由不同的epoch标识。

切换Leader时,需要解决下面两个问题:

  • Never forget delivered messages
    Leader在COMMIT投递到任何一台follower之前crash,只有它自己commit了。新Leader必须保证这个事务也必须commit。
  • Let go of messages that are skipped
    Leader产生某个proposal,但是在crash之前,没有follower看到这个proposal。该server恢复时,必须丢弃这个proposal。

Zookeeper会尽量保证不会同时有2个活动的Leader,因为2个不同的Leader会导致集群处在一种不一致的状态,所以Zab协议同时保证:

  1. 在新的leader广播Transaction之前,先前Leader commit的Transaction都会先执行。
  2. 在任意时刻,都不会有2个Server同时有法定人数(quorum)的支持者。
    这里的quorum是一半以上的Server数目,确切的说是有投票权力的Server(不包括Observer)。

参考文献

http://zookeeper.apache.org/doc/trunk/zookeeperOver.html
http://www.cnblogs.com/luxiaoxun/p/4887452.html

history 历史命令记录功能如何防坏人(高级) 在 Linux 下面可以使用 history 命令查看用户的所有历史操作,同时 shell 命令操作记录默认保存在用户目录的 .bash_history 文件中。通过这个文件可以查询 shell 命令的执行历史,有助于运维人员进行系统审计和问题排查,同时在服务器遭受黑客攻击后,也可以查询黑客登录服务器的历史命令操作。但是黑客在入侵后,为了抹除痕迹,会删除 .bash_history 文件,这个就需... 阅读详情

相关推荐

单精度浮点数存储、双精度浮点数存储

单精度浮点数存储、双精度浮点数存储

fancynthia的博客 1302

聊一聊ZooKeeper的顺序一致性

ZooKeeper作为分布式应用系统协调服务,在分布式系统中的应用非常广泛,在某些业务场景下甚至可以作为注册中心、分布式锁来使用。ZooKeeper之所以能有如此广泛的应用,与它良好的数...

musicml的博客 820

别再为FPGA程序裸奔发愁了!手把手教你用Quartus和AES256给Altera芯片上把‘锁’

本文详细介绍了如何为Altera/Intel FPGA芯片(如Cyclone系列)构建可靠的AES256加密体系,涵盖密钥类型选择、Quartus实操到JTAG链路验证的全流程。通过硬件级AES256引擎实现配置流解密,确保FPGA程序的安全保护,适用于工业控制器等高安全需求场景。

weixin_28309571的博客 389

Zookeeper 2PC and 3PC

二阶段提交会统一决定事务的提交或回滚,从而能够有效地保证分布式数据一致性。 二阶段提交将一个事务的处理过程分为了投票和执行两个阶段,其核心是对每个事务都采用先尝试后提交的处理方式,因此也可以将二阶段提交看作一个强一致性的算法。

m0_51697147的博客 919

WIFI 相关的频偏调试以及天线调试记录

WIFI RF 相关的频偏调试以及天线调试 1,频率误差(Frequency Error) 频率误差(Frequency Error):表征射频信号偏离该信号所处信道中心频率的大小,单位PPM。频偏误差要求范围如下表。 频偏越小越好。PPM的计算公式如下: 问题: 我们ESP8089认证测试的时候频偏测试超了。需要修改哪些呢。 测试频率点在2.411865385GHz 宣称点:2.412GHz 频率偏移计算:{(2.412GHz-2.411865385GHz)÷2...

armkits的博客 1万+

无监督学习初探:K-Means聚类与主成分分析(PCA)

K-Means适用于快速分组,但对数据分布敏感,可结合轮廓系数评估质量。PCA通过特征值分解实现线性降维,需注意非线性场景的替代方案(如UMAP)。进阶方向:聚类:谱聚类、高斯混合模型(GMM)处理复杂形状。降维:t-SNE、自编码器处理非线性结构。

weixin_69882801的博客 1453

zookeeper读书笔记十三 zookeeper应用之实现两段提交

2PC 2PC,二阶段提交协议,即将事务的提交过程分为两个阶段来进行处理:准备阶段和提交阶段。事务的发起者称协调者,事务的执行者称参与者。 第一阶段:提交事务阶段(投票阶段) 事务询问:协调者会询问所有的参与者结点,是否可以执行提交操作,并等待响应。 执行事务:各个参与者执行事务操作,并将Undo和Redo信息记入事务日志中。 参与者向协调者反馈事务询问的响应:如果参与者成功执行了事...

哪有什么天生王者,不过是一步一个脚印 506

LPDDR5X内存技术解析:性能提升与优化策略

内存技术在现代计算系统中扮演着核心角色,其性能直接影响整体系统效率。LPDDR5X作为JEDEC最新标准,通过提升数据传输率至8533Mbps、优化能效比15%以上,并扩展突发长度至32字节,显著提升了移动设备的处理能力。这些改进特别适用于5G通信、AI加速(如昇腾芯片)及8K视频处理等高带宽需求场景。技术原理上,LPDDR5X引入了动态电压频率调整(DVFS)和可编程突发长度等创新机制,有效降低了实际应用中的延迟。在工程实践中,合理的PCB布局和信号完整性验证是确保高速稳定运行的关键。随着AI和8K应用的

weixin_29190169的博客 395

zookeeper的一些常见知识点

Zookeeper架构图 数据一致性 zookeeper是通过zab协议来保持数据一致性。 ZAB协议包括2个阶段:leaderelection阶段和Atomicbroadcast阶段。 leaderelection阶段:当leader崩溃或者leader失去大多数的follower时,需要重新选举出一个新的leader,(使用选举算法,少数服从多数)让所有的服务器都恢复到一个正确的状态。 Atomicbroadcast阶段:当leader被选举出来,且大多数服务器完成了和leader...

L13763338360的博客 349

工业相机图像格式深度解析:从Mono8到Mono12的选型与应用

本文深度解析工业相机黑白图像格式,重点对比Mono8、Mono10与Mono12的核心差异。文章从位深、动态范围和数据量等关键概念切入,详细阐述了不同格式的优缺点及适用场景,为工业视觉项目中的相机选型提供实战指南,帮助用户在精度、速度与成本间做出最优决策。

weixin_29207439的博客 260

浏览器解析HTML的过程及编程实现

需要注意的是,上述示例代码只是简化的演示,并未涵盖浏览器解析HTML的所有细节和复杂性。实际上,浏览器的HTML解析引擎还会处理一系列的特殊情况、错误容错和性能优化等方面的内容,以确保能够正确解析各种类型的HTML代码。HTML(超文本标记语言)是构建网页的基础语言,浏览器负责将HTML代码解析并渲染成可视化的网页。本文将详细介绍浏览器解析HTML的过程,并提供相应的编程示例代码。希望以上内容能帮助您理解浏览器解析HTML的过程,并通过提供的示例代码更好地了解如何在编程中实现这一过程。

ByteJolt的博客 321

Zookeeper选举过程与ZAB协议

Zookeeper的选举 选举机制 1. 第一阶段:数据恢复阶段。 每台Zookeeper服务器在启动的时候,都会从本地的数据目录中找到自己所拥有的最大事务id。 2. 第二阶段:选举阶段。 每一个Zookeeper的服务器都会推荐自己当leade并且提交选举协议: 自己所拥有的最大事务id - Zxid 自己的选举id - myid 逻辑时钟值,作用是确保每一台Zookeeper服务器都会处在...

Arno的博客 1431

Android实现TextToSpeech控件实现语音播报--朗读文字 (附完整源码)

Android实现TextToSpeech控件实现语音播报--朗读文字 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1116

ZooKeeper工作原理

在Zookeeper集群中,Leader是负责管理集群事务的节点。它负责处理所有的写请求,并将这些请求转化为事务,并提交事务日志。Leader节点还负责发起和决议投票过程,以及更新系统状态。:学习者是Zookeeper中用于接收客户端请求并返回结果的节点。:跟随者是学习者的一种,它们参与到Zookeeper的投票过程中,帮助选举出Leader,并且同步Leader的状态。跟随者也可以处理客户端的读请求。:观察者也是学习者的一种,但它们不参与投票过程。

weixin_72583321的博客 1531

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Zookeeper工作原理(详细)

1、Zookeeper的角色   » 领导者(leader),负责进行投票的发起和决议,更新系统状态   » 学习者(learner),包括跟随者(follower)和观察者(observer),follower用于接受客户端请求并想客户端返回结果,在选主过程中参与投票   » Observer可以接受客户端连接,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度   » 客户端(client),请求发起方 .

第一次亲密接触 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Zookeeper工作原理

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。Zookeeper是hadoop的一个子项目,其发展历程无需赘述。在分布式应用中,由于工程师不能很好地使用锁机制,以及基于消息的协调机制不适合在某些应用中使用,因此需要有一种可靠的、可扩展的、分布式的、可配置的协调机制来统一系统的状态。Zookee

1万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Zookeeper的功能以及工作原理

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

空白格的空白的博客 2万+

Zookeeper工作原理和设计目的

Zookeeper设计目的1.最终一致性:client不论连接到哪个Server,展示给它都是同一个视图,这是zookeeper最重要的性能。 2.可靠性:具有简单、健壮、良好的性能,如果消息被到一台服务器接受,那么它将被所有的服务器接受。 3.实时性:Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。但由于网络延时等原因,Zookeeper不能保证两个...

展望未来 1万+

Zookeeper集群的搭建和工作原理

1.Zookeeper在Linux上的安装 首先将压缩包放到Linux系统中的某个文件路径下, 将压缩包解压在当前目录下,也可以自己指定解压目录 然后进入解压后的zookeeper文件夹中,再进入到conf目录下,将zoo_sample.cfg文件拷贝一份并改成zoo.cfg,然后打开该文件,把其中的dataDir中的路径改成zookeeper安装目录下的tmp(此时zookeeper安装目

szl13722587073的博客 9469

zookeeper(2)-集群选举实战+工作原理讲解

目录 1.工作原理 2.选举概述 3.选举机制 1.工作原理 zookeeper是一个分布式应用程序协调服务、开源的组件,有分布式服务的基本都可以用zookeeper。 zookeeper的工作原理 » Zookeeper的核心是原子广播,这个机制保证了各个server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式和广播模式。    当服...

allensandy的博客 972

Zookeeper学习笔记

Zookeeper学习笔记 注:Zookeeper = 文件系统 + 监听通知机制(观察者机制) 一、Zookeeper节点类型 PERSISTENT:持久化目录节点(客户端与zk断开后,该节点依旧存在) PERSISTENT_SEQUENTIAL:持久化顺序目录节点(同上,但是zk给节点名称进行顺序编号) EPHEMERAL:临时目录节点(客户端与zk断开后,该节点被删除) EPHEMERAL_SEQUENTIAL:临时顺序目录节点(同上,但是zk给节点名称进行顺序编号) 二、投票选举 注:zxid的产生

weixin_44653248的博客 7251

Zookeeper 3、Zookeeper工作原理(详细)

1、Zookeeper的角色   » 领导者(leader),负责进行投票的发起和决议,更新系统状态   » 学习者(learner),包括跟随者(follower)和观察者(observer),follower用于接受客户端请求并想客户端返回结果,在选主过程中参与投票   » Observer可以接受客户端连接,将写请求转发给leader,但observer不参加投票过程,只同步leader的...

男儿当自强 1507
上一篇: zookeeper学习笔记(1)——简介
下一篇: JAVA基础(12)——反射
白水不开
博客等级 码龄18年 91粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值