zookeeper知识点总结

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是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会把中途的操作放在队列里发送给这个节点,让这个节点补齐,在此期间
,该节点不对外进行服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值