zookeeper知识点总结

Zookeeper是一款分布式协调服务框架,主要用于命名服务、配置管理、集群管理和分布式锁等功能。它通过Znode树结构存储数据,支持多种节点类型,如持久化节点、临时节点等。Zookeeper采用ZAB协议实现数据一致性,确保顺序一致性、原子性和单一系统映像。

什么是Zookeeper?

Zookeeper是用于分布式协调和管理的框架,zookeeper的目的就是封装好容易出错复杂的关键服务,将功能稳定的系统提供给用户。

Zookeeper的职责

1.    
命名服务:是指通过指定名字来获取资源或服务器的地址,;利用zookeeper创建一个全局的路径,也就是你唯一的路径,这个路径可以作为一个名字去指向集群中的集群,服务地址,或者是一个远程对象。

2.    
配置管理:程序分配在不同电脑上,讲程序的配置信息放在zookeeper的znode上,当有配置发生改变时。可以通知zookeeper的某个znode发生改变,利用watcher,通知给各个客户端,从而更改配置信息。

3.    
集群管理:是否有机器退出和加入,选举master,对于机器的退出,所有机器约定在父目录 下创建临时目录,对于新机器的加入,所有机器创建临时顺序编号目录节点。

4.    
分布式锁:分为俩类,一个是独占锁,另一个是共享锁,独占锁一次只能给一个线程使用,读写锁是一个写,多个读。

Zookeeper的安装方式

单机模式:在一个节点上安装,往往只能启动框架上的一部分服务

伪分布式:在一个节点上安装,去模拟集群环境,往往能启动框架大部分服务或者全服务。

完全分布式:在分布式环境安装,能启动框架全部服务。

Zookeeper的特点:

Zookeeper本身是一个Znode树,根节点是/,每一个节点都叫做Znode,任何一个节点的路径都是唯一的。任何一个持久节点都可以挂载子节点。Znode树在磁盘和内存中,磁盘为了持久储存,内存为了读写快。Zookeeper把每一个写操作看成一个事务,为事务分配一个编号,为Zxid

Zookeeper节点类型:持久化节点,临时节点,持久化顺序节点,临时顺序节点。

Znode默认大小是1m

Watcher机制:(会在znode上建立一个wacther,当znode发生改变时候,这些client会收到zk的通知,然后对应做出业务的改变,)一次性触发数据改变时;一个watch event会被发送到client,但是client只会接受一次这样的消息。因为server到client是异步的,由于网络的原因导致客户端不能同时刻监听到事件Zookeeper只能保证最终一致性,而不能保证强一致性,,数据监视是由getData和exists方法,getchildren监视子节点,

注册watcher getDa  exists getchildren

触发watcher
create delete setData

Zookeeper集群选举方式leader:

每一个zookeeper都会去参加选举,并且每一个都会推荐自己为leader,将自己的的选举信息发送给其他节点进行比较,如果比较失败就会成为follower,如果比较成功继续参加选举,直到选举出leader,其他的节点成为follower。

选举信息包括:

当前节点的最大事务id,自己的myid,控制选举轮数。。

先比最大事务id,谁大谁赢,事务id一样比较myid,谁大谁赢。一个节点要想成为leader就必须胜过一半的节点,过半性。如果一个集群已经选出了leader,剩下节点都会成为follower。

Zookeeper不存在单点故障,当zookeeper一个节点宕机,会选举出另一个leader,所有zookeeper不存在单点故障。

Zookeeper的节点个数是奇数过。

在zookeeper中当节点个数存活不到一半时,该集群不对外提供服务。

Zookeeper的脑裂。

一个集群由于环境因数网络波动产生了俩个leader  这种现象就是脑裂,

Zookeeper是怎么解决脑裂的:

它会对zookeeper每次选举的leader分配一个全局递增的epochid,当出现多个leader时 会保留最新的epochid,并且杀死其他leader。

Zookeeper节点的状态:

voting/looking

  • 选举状态

follower

  • 追随者/跟随者

leader

  • 领导者

observer

  • 观察者

观察者:一个节点一旦被视为观察者,就不参加任何选举投票,但是会对选举投票的监听。一般在集群中90的节点都会设置为观察者,会提高选举效率,在一个集群中,观察者是否存活不影响集群的操作

ZAB协议:

ZAB协议是一套专门为zookeeper进行崩溃恢复和原子广播的协议。它是基于2PC算法,利用了    Paxos进行了改进。

原子广播:用2PC算法,二阶段提交,核心思想就是一票否决。

请求阶段,当协调者受到请求后会发给每一个参与者,等待参与者的恢复。

提交阶段:如果每一个参与者都发送的yes,那么协调者要求所有的参与者执行请求,

终止阶段:如果协调者收到只有一个不是yes的那么会认为这个请求不能执行,并且要求每个参与者删除这个请求。

Zookeeper的数据一致性包括

顺序一致性。原子性。单一的系统映像,持久性。

原子广播的流程:原子广播是为了数据的一致性

当leader收到一个请求后,他会记录到本地的日志文件中,如果记录成功,那么就认为该请求可执行,那么会放到队列发送给每一个follower,follower收到以后也会在本地日志文件中记录,记录成功返回leader一个yes,否则返回no,当有一半返回yes时候就执行请求,否则不执行,那么要求所有follower删除这个请求。

如果leader就要执行这个请求:

那么follower会向leader发送信息,要求重新获取刚才的操作,如果因为磁盘满了,日志记录失败,那么leader就和follower频繁的发送信息。

崩溃恢复:当一个集群的leader丢失后,会自动选一个新leader,

当一个节点重新启动时候,

当旧的节点重新启动时候,会找到自己的最大事务id 请求leader判断最大事务id是否一致,如果一致那么说明,在此期间没有进行操作。如果不一致他会请求leader,leader会把中途的操作放在队列里发送给这个节点,让这个节点补齐,在此期间
,该节点不对外进行服务。

该数据集通过合成方式模拟了多种发动机在运行过程中的传感器监测数据,旨在构建一个用于机械系统故障检测的基准资源,特别适用于汽车领域的诊断分析。数据按固定时间间隔采集,涵盖了发动机性能指标、异常状态以及工作模式等多维度信息。 时间戳:数据类型为日期时间,记录了每个数据点的采集时刻。序列起始于2024年12月24日10:00,并以5分钟为间隔持续生成,体现了对发动机运行状态的连续监测。 温度(摄氏度):以浮点数形式记录发动机的温度读数。其数值范围通常处于60至120摄氏度之间,反映了发动机在常规工况下的典型温度区间。 转速(转/分钟):以浮点数表示发动机曲轴的旋转速度。该参数在1000至4000转/分钟的范围内随机生成,符合多数发动机在正常运转时的转速特征。 燃油效率(公里/升):浮点型变量,用于衡量发动机的燃料利用效能,即每升燃料所能支持的行驶里程。其取值范围设定在15至30公里/升之间。 振动_X、振动_Y、振动_Z:这三个浮点数列分别记录了发动机在三维空间坐标系中各轴向的振动强度。测量值标准化至0到1的标度,较高的数值通常暗示存在异常振动,可能与潜在的机械故障相关。 扭矩(牛·米):以浮点数表征发动机输出的旋转力矩,数值区间为50至200牛·米,体现了发动机的负载能力。 功率输出(千瓦):浮点型变量,描述发动机单位时间内做功的速率,取值范围为20至100千瓦。 故障状态:整型分类变量,用于标识发动机的异常程度,共分为四个等级:0代表正常状态,1表示轻微故障,2对应中等故障,3指示严重故障。该列作为分类任务的目标变量,支持基于传感器数据预测故障等级。 运行模式:字符串类型变量,描述发动机当前的工作状态,主要包括:怠速(发动机运转但无负载)、巡航(发动机在常规负载下平稳运行)、重载(发动机承受高负荷或高压工况)。 数据集整体包含1000条记录,每条记录对应特定时刻的发动机性能快照。其中故障状态涵盖从正常到严重故障的四级分类,有助于训练模型实现故障预测与诊断。所有数据均为合成生成,旨在模拟真实的发动机性能变化与典型故障场景,所包含的温度、转速、燃油效率、振动、扭矩及功率输出等关键传感指标,均为影响发动机故障判定的重要因素。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值