最后的话
最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!
资料预览
给大家整理的视频资料:
给大家整理的电子书资料:
如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
* [(3)获取最新ZXID(zxid\_for\_snap)](#3ZXIDzxid_for_snap_235)
- [2、事务日志进行数据修正](#2_241)
- * [(1)获取zxid\_for\_snap之后提交的事务](#1zxid_for_snap_245)
* [(2)数据修正](#2_249)
* [(3)获取最新ZXID校验epoch](#3ZXIDepoch_255)
- [3、数据同步](#3_265)
- * [(1)Learner 向 Leader 发送 ACKEPOCH](#1Learner__Leader__ACKEPOCH_269)
* [(2)Leader 初始化 peerLastZxid、minCommittedLog、maxCommittedLog](#2Leader__peerLastZxidminCommittedLogmaxCommittedLog_273)
* [(3.1)直接差异化同步(DIFF)](#31DIFF_283)
* [(3.2)先回滚再差异化同步(TRUNC+DIFF)](#32TRUNCDIFF_301)
* [(3.3)仅回滚同步(TRUNC)](#33TRUNC_320)
* [(3.4)全量同步(SNAP)](#34SNAP_328)
+ [六、数据备份与恢复流程](#_341)
+ - [1、为什么需要快照日志](#1_343)
- [2、数据备份策略](#2_349)
- [3、数据恢复](#3_359)
+ [七、要点总结](#_373)
+ [八、参考资料](#_389)
一、前言
ZooKeeper
存储数据的底层数据结构是LSM
(Log Structured Merge-tree
)。基于LSM
实现的存储引擎有两个显著特点:MVCC
(Multi-Version Concurrency Control
)和存储KV
,即所有的更新操作,都是先追加事务日志,然后把key-value
存储到内存数据库,注意不是replace
,而是保存对一个key-value
的多个版本。
ZooKeeper
的数据备份与恢复,就用到了其事务日志文件和快照日志文件。快照日志文件是什么概念?为什么要有快照日志文件?
如何做数据备份?如何恢复数据?解开这些疑惑,需要深入了解ZooKeeper
底层是如何保证数据一致性和集群启动时如何做初始化数据加载和同步。
二、ZooKeeper顺序一致性
ZooKeeper
专门设计了 Zab
(Zookeeper Atomic Broadcast
)协议作为其数据一致性协议。所有写操作和客户端会话管理都以事务方式由 Leader
统一协调,使用两阶段提交的方式,保证数据一致性。
1、ZooKeeper如何处理请求
客户端和 ZooKeeper
集群中的任一服务建立连接,即可发送请求,请求主要包括两类,只读请求和事务请求。
(1)只读请求本机处理
只读请求包括 getData
、getChildren
、exists
等,zk服务器接收到只读请求无需转发给 Leader
,可直接本机处理响应。
(2)事务请求转发给Leader协调
事务请求包括 create
、delete
、setData
以及客户端会话的创建和销毁(createSession
、closeSession
)。
Leader
收到事务请求可以直接协调处理,并发给Follower
做数据一致性同步;Follower
收到事务请求就需要先转发给 Leader
,由Le