本文源自 公-众-号 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,移动应用安全、 云直播等等。