Zookeeper入门之七-ZK的数据同步

ZK的数据存储、集群间通信及数据同步

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

snapshot:

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

事务日志:

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

数据同步

数据的同步都是由leader发起,简单来说,learner启动时都会向leader建立连接,由leader分别对followe和observer进行数据同步,有全量同步、仅回滚同步、先回滚再差异化同步、直接差异化同步四种同步指令。

leader发送给learner的差异化数据同步指令(proposal),如果learner同意就会返回ack,如果leader收到ack,就会同时进入过半策略的等待阶段—leader会和其他learner服务器进行上述同样的数据同步流程,知道集群中有过半的learner机器响应了leader的这个ack消息。

一旦满足过半策略后,leader服务器就会向所有已经完成数据同步的learner机器发送一个uptodate指令,用来通知learner已经完成了数据同步,同时集群中已经有过半机器完成了数据同步,集群已经具备了对外服务的能力了。

learner在接收到这个uptodate指令后,会终止数据同步流程,然后向leader再反馈一个ack消息。

请求

如果集群中的follewer接收到来自客户端的写请求,follower会将消息通过REQUEST请求给到leader,统一交给leader来处理,leader处理结束之后,会再次广播数据。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容