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

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进⾏通信。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值