Zookeeper总结

Zookeeper总结
一、Zookeeper说明
zookeeper是一个分布式协调事物框架,主要用来解决分布式集群服务系统中数据一致性问题、分布式集群环境中高并发(分布式锁)问题等。Zookeeper本身是一个分布式的小型文件系统,提供类似于linux目录树的存储结构,数据在每个节点是通过日志的形式最终持久化到磁盘和内存中的DataTree中,提高查询效率。Zookeeper保证的是CAP中的cp,最终一致性,C(一致性),A(可用性),P(分区容错性)
Zookeeper集群节点类型:leaderr(参与集群选举)、followerr(参与集群选举)、observer(不参与集群选举)

二、ZAB协议
一、领导选举
1、leader选举的关键信息
(1)投票:进行选举领导的一种机制
(2)选票:进行领导选举的凭据
(3)投票箱:用于存放选票信息
(4)过半机制:zookeeper确认领导的一种依据(确认领导的其他依据zxid、myid)
2、触发领导选举的几种情况
(1)首次启动:首次启动的时候进行leader选举
(2)leader挂掉:leader挂掉的时候进行leader选举
(3)follower挂掉:follower挂掉后leader判断跟随自己的follower是否过半,如果少于一半进行leader选举
3、leader选举
leader选举机制比较规则
过半机制、(zxid越大认为数据最新,能力最强,如果zxid都相同,进行myid比较,myid越大能力越强)
假设现有3台机器 server1、server2、server3。
在这里插入图片描述

例1如下:
在这里插入图片描述

如果启动顺序按照 server1、server2、server3顺序启动。则选举流程如下,
server1首先选举自己、server2选举自己。然后server1发送选票到server2,server2发送选票到server1,然后进行pk,通过比较zxid都相同,myid server2大于server1,此时,server1进行改选,选择server2为leader,同时再次发送选票到server2,server2判断进行投票统计得出自己选票过半则选择自己为leader。server1为follower,此时由于集群已经稳定,server3启动后不会在触发领导选举,直接跟随server2,自己是follower。

例2如下:
在这里插入图片描述

如果启动顺序按照 server1、server2、server3顺序启动。则选举流程如下,server1首先选举自己、server2选举自己。然后server1发送选票到server2,server2发送选票到server1,然后进行pk,通过比较server1 zxid大于server2,此时,server2进行改选,选择server1为leader,同时再次发送选票到server1,server1判断进行投票统计得出自己选票过半则选择自己为leader。Server2为follower,此时由于集群已经稳定,server3启动后不会在触发领导选举,直接跟随server1,自己是follower。
三、两阶段提交
1、两阶段提交关键信息
1、预提交:leader将写请求的输出发送给所有的follower
2、Ack:follower收到leader预提交请求将数据成功写入日志后发送一个确认消息到leader
3、Commit:当leader收到半数以上的 follower发送的ack消息后进行commit,并且返回信息给客户端
2、两阶段提交
客户端提交的写请求有两种情况,一种提交到leader,一种提交到follower,如果提交到follower,则最终会转发到leader来处理。Leader收到请求后向所有的follower发送一个预提交请求,follower收到请求后写日志生成zxid,操作完成后向leader发送ack确认请求,当leader收到一半以上follower的ack后向follower进行commit提交,返回成功到客户端,follower收到commit后通过日志进行数据持久化到磁盘,并且写入数据到DataTree
在这里插入图片描述

四、数据同步
数据同步是zookeeper保持数据最终一致性的重要过程,当zookeeper在节点挂掉,或者重启等出现集群中节点中的zxid不一致后,他会根据实际情况进行数据追平或者数据回滚等过程。
三、zookeeper节点
1、持久化节点:
该数据节点被创建后,就会一直存在于zookeeper服务器上,直到有删除操作来主动删除这个节点。
2、临时节点:
临时节点的生命周期和客户端会话绑定在一起,客户端会话失效,则这个节点就会被自动清除。
3、顺序节点:
总结:
具体在节点创建过程中,通过组合使用,可以生成 4 种节点类型:持久节点(PERSISTENT),持久顺序节点(PERSISTENT_SEQUENTIAL),临时节点(EPHEMERAL),临时有序节点(EPHEMERAL_SEQUENTIAL)。
4、ZooKeeper的Watcher机制

ZooKeeper的Watcher机制:一个Watcher事件是一个一次性的触发器,当被设置了Watch的数据发生了改变的时,服务器将这个改变发送给设置了Watcher的客户端,接着会将这个Watcher从session中删除,因此,如果想继续监控,必须重新注册。当前ZooKeeper有如下四种Watch事件:1)节点创建;2)节点删除;3)节点数据修改;4)子节点变更。
四、zookeeper分布式锁
1、实现步骤
(1)、每当进程需要访问共享资源时,客户端调用create()方法创建名为“disLock/lock”的节点,需要注意的是,这里节点的创建类型需要设置为临时有序节点。
(2)、在建立子节点后,客户端调用getChildren(“disLock”)方法来获取所有已经创建的子节点,注意此时不用设置任何Watcher。
(3)、如果发现自己在步骤1中创建的节点序号最小,那么就认为这个客户端获得了锁。
(4)、假如不是序号最小的节点,就获得该节点的上一顺序节点,并给该节点是否存在注册监听事件。同时在这里阻塞,等待监听事件的发生,获得锁控制权。
(5)、当调用完共享资源后,删除被关注的临时节点,进而可以引发监听事件,释放该锁。
2、主要优点

(1)、ZooKeeper分布式锁使用临时节点可以有效的解决锁无法释放的问题,一旦客户端获取到锁之后突然挂掉(Session连接断开),那么这个临时节点就会自动删除掉。其他客户端就可以再次获得锁。
(2)、ZooKeeper分布式锁支持Watcher机制,这样实现阻塞锁,可以watch锁数据,等到数据被删除,ZooKeeper会通知客户端去重新竞争锁。
(3)、ZooKeeper可以有效的解决单点问题,ZooKeeper是集群部署的,只要集群中有半数以上的机器存活,就可以对外提供服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值