zookeeper知识点梳理,面试必看

2020-09-21 15:08:52 浏览数 (1)

本文源自 公-众-号 IT老哥 的分享

IT老哥,一个在大厂做高级Java开发的程序员,每天分享技术干货文章

1、zookeeper是什么

zookeeper是一个分布式的,开发源码的分布式应用程序协调服务,它是集群的管理者,监视着集群的各个节点根据节点提交的反馈进行下一步合理的操作

2、zookeeper提供了什么

文件系统、通知机制

3、zookeeper文件系统

zookeeper提供一个多层次节点的命名空间(节点名称叫znode),与文件系统不同的是,这些节点都可以设置关联 的数据,zookeeper为了保证高吞吐量和低延迟,在内存中维护了这个树状结构,这个特性使得zookeeper不能存储搭大量的数据,每个节点的上限为1M

4、znode4种类型

1、persistent—持久性目录节点,当客户端会话结束,此节点依然存在

2、persistent_sequential,持久性有顺序编号节点,zookeeper自动为你产生后面的序号(10位的数字)

3、ephemeral,临时目录节点,当客户端结束会话,此临时节点被删除,如果是正常结束会话,基本上无延时删除临时节点,如果是强制关闭会话,会有一定的延迟删除临时节点

4、ephemeral_sequential,临时有顺序目录节点,zookeeper自动生成序号(10位的数字)

5、zookeeper通知机制

client会对某个znode设置一个watcher事件,当这个znode发生改变时,zk会通知客户端znode的变化,注意:watcher监听事件是一次性操作,不会一直有效监听

6、zookeeper做了什么

命名服务、配置管理、集群管理、分布式锁、队列管理

6.1 命名服务(文件系统)

命名服务是指通过指定名称来获取资源或者服务地址,利用zk创建一个全局的路径,路径是唯一的,同一层目录不能有相同的目录名

6.2 配置管理

程序分布式的部署到多个机器上,将配置文件信息放到某一个znode上,当配置文件改变,zk会通知设置了watcher这个znode的客户端,客户端从这个znode上获取到最新的配置文件进行配置

6.3 集群管理

集群新机器加入与老机器退出,机器master选举

所有机器约定在父目录下创建一个临时目录节点,监听父目录下临时节点的子节点变化,一旦有机器加入或者机器宕机,其他机器就会收到通知

6.4 分布式锁(文件系统,通知机制)

zk是一致性文件系统,目录具有唯一性,zk的锁分为独占锁和时序锁

独占锁:zk上的znode看做是一把锁,通过createznode创建一个临时目录,当所有客户端去创建这个znode时,谁创建成功了,谁就抢到锁了,当处理完业务结束会话时删除临时目录,相当于释放锁,其他客户端在进行创建znode抢锁

时序锁:在一个已经存在的znode下面,所有客户端创建临时顺序目录znode,顺序号最小的节点最先获得锁,使用完释放锁,让下一个顺序号获取锁

客户端设置watcher在znode上,监听节点变化信息

6.5 队列管理(文件系统,通知机制)

1、同步队列,当这个队列的所有成员都到齐后才能开始使用,否则一直等待成员到齐,在约定目录下创建临时节点,监听这个临时节点下所有子节点是否全部到齐

2、FIFO进队和出队操作,入队有编号,出队按照编号,在特定的目录下创建一个persistent_sequential节点,创建成功队列watcher监听到目录变化,队列删除序列号最小的一个节点来消费,此时znode用于消息存储,znode里存储的数据就是队列里的消息内容,sequential是队列的消费序号,因为创建的是persistent_sequential节点,所以不怕数据丢失

7、zookeeper数据复制

zk做为一个集群对外提供一致性服务,所以集群间机器要同步复制数据,数据复制好处如下:

1、容错性:一个节点宕机,不至于整个集群不能对外提供服务

2、提高系统的扩展能力:增加节点提高负载能力

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

数据集群复制分为以下两种:

1、写主:对数据的修改提交要到指定的服务器,读数据没有限制,任何一个节点都可以,所以客户端要区分读和写,俗称读写分离

2、写任意:对数据的修改可以提交给任意一台服务器

zk采用的是写任意,通过增加机器,读吞吐能力和响应能力会提高,但是写吞吐能力下降(这也是建立obeserver的原因)

8、zookeeper工作原理

zk的核心是原子广播,这个机制是各个服务器之间保持数据状态同步的关键,实现这个机制的协议是zab协议,zab协议有两种模式,分别是恢复模式(选主)和广播模式(同步数据状态),当服务启动或者master崩溃后,zab进入恢复模式进行选主,当选出主节点并且大多数flow和master同步完数据状态后恢复模式结束,状态同步保证了master和follow具有相同的系统状态

9、zookeeper保证事物顺序一致性

zk采用递增的事物id来标识,所有的proposal(提议)在提出时都加上了zxid,zxid是一个64位的数字,高32位是epoch(时期; 纪元; 世; 新时代)用来标识master是否发生改变,如果有新的master被选举出来,那么epoch自增,低32位用来递增计数。新的proposal产生的时候,会像其他服务器发出事物执行请求,如果超过半数的服务器都能执行并且成功,那么就会开始执行

10、zookeeper的工作状态

1、looking:不知道master是谁,正在查找master

2、leading:当前server就是被选举出来的master

3、following:master已经选举出来,当前server与之同步

11、zookeeper同步过程

当zab完成恢复模式,就会进入广播模式,开始master与follow之间的同步

1、master等待follow的连接

2、follow连接master,将自己最大的zxid发送给master

3、master根据follow的zxid确定同步点

4、完成同步后通知follow已经成为uptodate状态

5、follow接收到uptodate状态后,又可以对客户端请求进行提供服务了

12、 zookeeper中主节点的作用

在分布式环境中,zookeeper集群有些业务逻辑通过master去计算,其他follow共享这个计算结果,大大的减少了重复数据计算,提高性能

13、zookeeper宕机处理

zookeeper集群默认server公式:(2n 1) ,不少于3台,当server宕机时,只要存活的server不少于(2n 1)/2个,就能进行选主,对外进行提供服务,数据不会丢失,因为广播模式使得每台机器上都有数据副本

云服务器,云硬盘,数据库(包括MySQL、Redis、MongoDB、SQL Server),CDN流量包,短信流量包,cos资源包,消息队列ckafka,点播资源包,实时音视频套餐,网站管家(WAF),大禹BGP高防(包含高防包及高防IP),云解析,SSL证书,手游安全MTP,移动应用安全、 云直播等等。

0 人点赞