Zookeeper 数据同步

2020-02-14  本文已影响0人  taj3991

zk中所有数据都是放在内存中的,当然也有snapshot、事务日志。

snapshot

用于记录zk服务器上某一时刻的全量内存数据内容。snapshot.2c021384ce,后缀也是一个zxid,表示本次数据快照开始时刻的服务器最新zxid。没有预分配机制,所有内容都是有效的。

事务日志:

每次事务操作都会有一条记录保存在事务日志文件中,文件大小都是64M(包含填充,也就是预分配,主要为了提高事务日志的写入效率,不需要重新分配磁盘空间),日志后缀是一条zxid,也就是写入该事务文件的第一条事务记录的zxid

数据同步

一、已提交的数据不能丢失

节点1为leader,节点2、3、4、5为follower

节点1发起新的事物投票通过后,将事物保持在本地,然后同步给follower们,当节点2、3收到commit指令后,提交事物,4、5尚未收到commit指令,节点1宕机;此时需要重新选主,因为2、3的txid事物ID比4、5的事物ID大,并且节点3的myid比节点2的大,所以最终节点3成为主节点,4、5向2发送心跳,然后从2处开始同步新的数据,4、5找到3中与自己相同的txid,并且比较此txid下数据是否和3中的一致,如果不一致,删除4、5中此txid下的数据,再递归比较再早的一个txid,直到txid在3中存在,并且该事物下的数据与3中相同,则开始同步3中该txid往后的数据。

二、已丢弃的事物不能再现

节点1为leader,节点2、3、4、5为follower

节点1发起新的事物投票通过后,将事物保持在本地,节点1宕机;其他所有follower节点都没有收到commit指令。此时5成为leader节点,节点1重起后,成为follower节点,但是数据比5多,数据不一致。此时节点1取出当前最新的txid,去leader上查找,没有此txid,则丢弃本地的txid,再递归查找上一个txid,不一致就一直丢弃,直到找到与leader上txid一致,并且数据一致;从该txid往后开始同步数据。

原文

https://www.jianshu.com/p/5151f6ec5238

https://blog.csdn.net/shaolong1013/article/details/100087048

上一篇 下一篇

猜你喜欢

热点阅读