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

zk集群的选举和数据的同步,第1张

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5699014.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存