从零开始学TiDB(5)Raft与Multi Raft

leader是集群中领导者,所有的读写都是走leader,follower副本不参加读写,leader会周期性的向follower发出心跳,同时也会把自己的日志同步给follower。

follower不参与读写,只会对其它服务做出相应,并同步leader的日志。如果长时间收不到leader的心跳信息,这时候follower会把自己的角色变为condidate(候选者),并发起投票。

其中一个region 及其两个副本 构成一个raft group ,多个raft group 构成了multi raft。

Raft 日志复制

  1. propose阶段客户端接收到请求操作
  2. append 阶段:raft log 已经持久化到 rocksdb raft中 (只在leader节点)
  3. replicate阶段:把leader节点的raft log 发到其它TiKV节点,同时持久化到自己的rocksdb raft中
  4. commit阶段:其它节点将raft log持久化成功后 返回leader 一个响应值,根据raft协议,超过一半返回响应成功,则commit成功
  5. Apply阶段:将raft log写入到rockdb KV中(这一步是实际的数据落盘,也就是用户层面的commit阶段)

Raft Leader选举

在集群刚开始创建时,大家都是follower,这时候每个region 都有一个计时器(election timeout),谁先到了election timeout则进入candidate 阶段并发起选举,当选leader。如果同时有多个candidate ,这时候每个region都会投票给自己,则选举失败,重新开启新一轮投票,直到选出leader。

如果此时leader宕机,followrer节点接收不到leader节点的心跳,则会倒计时(heart beat interval ),如果到了heart beat interval followrer节点将会进入candidate阶段,并发起选举,当选leader。

相关参数:

相关推荐
微风轻吟挽歌2 天前
TIDB创建索引失败 mkdir /tmp/tidb/tmp_ddl-4000/1370: no such file or directory.
数据库·oracle·tidb
Lucifer三思而后行13 天前
深入解析分布式数据库TiDB:原理、优化与架构实践
数据库·分布式·tidb
TiDB 社区干货传送门18 天前
从开发者角度看数据库架构进化史:JDBC - 中间件 - TiDB
数据库·oracle·中间件·tidb·数据库架构
TiDB 社区干货传送门19 天前
从40秒到11毫秒:TiDB环境下一次SQL深潜优化实战
数据库·sql·tidb
赵渝强老师25 天前
【赵渝强老师】TiDB SQL层的工作机制
数据库·sql·tidb
观测云1 个月前
TiDB 可观测性最佳实践
tidb
赵渝强老师1 个月前
【赵渝强老师】使用TiDB的审计日志
数据库·tidb
可观测性用观测云1 个月前
TiDB 可观测性最佳实践
tidb
Sirius Wu1 个月前
TiDB 深度解析与 K8S 实战指南
容器·kubernetes·tidb
PingCAP1 个月前
PingCAP“一号员工”唐刘:回顾我与 TiDB 的十年成长之旅
数据库·tidb