005、体系结构之TiKV_Raft日志
Raft日志
- 1、Raft与Multi Raft
- 2、Raft 日志复制
- 2.1、复制流程总览
- 2.2、Propose
- 2.3、Append
- 2.3、Replicate(Append)
- 2.4 Committed
- 2.4 Apply
- 3、Raft Leader 选举
- 3.1、原理
- 3.2、节点故障
- Leader(主副本)选举
- ⽇志复制
1、Raft与Multi Raft
一个region的大小是96Mb ,最大144Mb 。它里面记录的是日志条目,是个左闭右开区间。
[1,999) [1000,1999)
一个TiKV当中如果超过5万个Region,则管理成本就很高了,因为需要向PD汇报相关信息(例如心跳)
如果持续太小,则会合并
2、Raft 日志复制
写入数据只发送给leader,然后leader分发给follower
2.1、复制流程总览
- Propose(准备)
- Append
- Replicate
- Append
- Commited
- Apply
2.2、Propose
数据的变更(增删改),都是以追加的方式记录到内存中。
propose: 收到请求,将其准备成raft 日志(日志会有唯一标识记录到region中。 按顺存regionId_seq 存放)
2.3、Append
append: 将请求写入到本地rocksdb中 持久化动作
2.3、Replicate(Append)
将leader中条目信息拷贝到follower上。并且追加到follower上的rocksdb raft。
持久化成功后,返回消息给到leader,告诉它已经append成功,当大多数节点都返回成功消息后。则leader认为这记录不会丢了,接着就下面的commited
