网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
-
- (1)只读请求本机处理
-
(2)事务请求转发给Leader协调
-
2、两阶段提交+过半数机制
-
- (1)第一阶段提交事务请求
-
(2)第二阶段执行事务提交
-
3、ZXID
-
三、事务日志
-
- 1、事务日志存放目录
-
2、文件大小和后缀名
-
- (1)磁盘空间预分配
-
(2)ZXID作为后缀名
-
3、事务日志可视化
-
4、相关配置项
-
- (1)dataLogDir
-
(2)preAllocSize
-
5、什么时候创建新日志文件
-
四、快照日志
-
- 1、文件存储
-
2、快照日志可视化
-
3、相关配置
-
- (1)snapCount
-
(2)日志清理
-
4、什么时候触发数据快照
-
- (1)事务日志写入数量达到阈值snapCount
-
(2)新Leader同步数据
-
五、ZooKeeper启动数据初始化和同步
-
- 1、加载并解析快照日志文件
-
- (1)加载最新快照文件
-
(2)解析快照文件
-
(3)获取最新ZXID(zxid_for_snap)
-
2、事务日志进行数据修正
-
- (1)获取zxid_for_snap之后提交的事务
-
(2)数据修正
-
(3)获取最新ZXID校验epoch
-
3、数据同步
-
- (1)Learner 向 Leader 发送 ACKEPOCH
-
(2)Leader 初始化 peerLastZxid、minCommittedLog、maxCommittedLog
-
(3.1)直接差异化同步(DIFF)
-
(3.2)先回滚再差异化同步(TRUNC+DIFF)
-
(3.3)仅回滚同步(TRUNC)
-
(3.4)全量同步(SNAP)
-
六、数据备份与恢复流程
-
- 1、为什么需要快照日志
-
2、数据备份策略
-
3、数据恢复
-
七、要点总结
-
八、参考资料
ZooKeeper
存储数据的底层数据结构是LSM
(Log Structured Merge-tree
)。基于LSM
实现的存储引擎有两个显著特点:MVCC
(Multi-Version Concurrency Control
)和存储KV
,即所有的更新操作,都是先追加事务日志,然后把key-value
存储到内存数据库,注意不是replace
,而是保存对一个key-value
的多个版本。
ZooKeeper
的数据备份与恢复,就用到了其事务日志文件和快照日志文件。快照日志文件是什么概念?为什么要有快照日志文件?
如何做数据备份?如何恢复数据?解开这些疑惑,需要深入了解ZooKeeper
底层是如何保证数据一致性和集群启动时如何做初始化数据加载和同步。
ZooKeeper
专门设计了 Zab
(Zookeeper Atomic Broadcast
)协议作为其数据一致性协议。所有写操作和客户端会话管理都以事务方式由 Leader
统一协调,使用两阶段提交的方式,保证数据一致性。
1、ZooKeeper如何处理请求
客户端和 ZooKeeper
集群中的任一服务建立连接,即可发送请求,请求主要包括两类,只读请求和事务请求。
(1)只读请求本机处理
只读请求包括 getData
、getChildren
、exists
等,zk服务器接收到只读请求无需转发给 Leader
,可直接本机处理响应。