zk集群的选举和数据的同步

Zookeeper使用ZAB协议确保数据一致性,解决崩溃恢复和主从同步。在集群启动时,通过选举确定leader,多数选票获胜。若leader崩溃,follow会在超时后重新选举。主从数据同步由leader发起,接收到半数以上ack后向follow发送commit。NIO用于客户端连接和Watch,BIO用于选举通信。
摘要由CSDN通过智能技术生成

zab协议

zookeeper为了保证数据的⼀致性,使⽤了ZAB(Zookeeper Atomic

Broadcast)协议,这个协议解决了Zookeeper的崩溃恢复和主从数据同步的问题。

集群的选举

集群刚启动的时候

在集群启动的时候,每个结点都会生成一张自己的选票,之后各个机器之间会将自己的选票发给其他机器,机器在拿到其他机器的选票的时候,会先对比选票中的事务id,事务id大的成为主节点的权重也更大,如果事务id都是一致的话,那么对比每台机器的serviceid,结点会选出一张最合理的选票,投到选票箱中,如果投票相中每个机器的选票大于半数的话,那么就将称为集群的leader,此时leader结点的状态会从looking变成leading,follow会从looking编程following

集群崩溃的时候,重新选举leader

leader会向follow在规定的时间周期内发送心跳,如果超出该时间周期,follow会重新进入到looking阶段,重新发起集群中leader的选取,在选取的过程中,整个集群不会对外提供服务

主从之间的数据同步
明确:集群中写数据都是leader来决定的,读数据可以从follow中进行读取
  1. 向主节点写入数据,主节点将数据写入到自己的数据文件,并且给自己返回一个ack,
  2. 主节点将数据发送给所有follow,follow收到数据,也将数据存入到自己的数据文件中,并且返回一个ack给主节点
  3. 主节点接收到返回的ack,如果返回的ack数量大于集群的半数的话,会向follow发送commit,首先就是将自己的数据加载到内存,follower收到commit指令的话,也会将数据写入到内存中
Zookeeper中的NIO与BIO的应⽤
NIO

⽤于被客户端连接的2181端⼝,使⽤的是NIO模式与客户端建⽴连接

客户端开启Watch时,也使⽤NIO,等待Zookeeper服务器的回调

BIO

集群在选举时,多个节点之间的投票通信端⼝,使⽤BIO进⾏通信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值