从零开始学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 天前
避坑指南:MySQL 迁移到 TiDB
数据库·mysql·tidb
5***79002 天前
JavaScript生成器函数
hive·tidb·consul
北i13 天前
TiDB 关联子查询去关联优化实战案例与原理深度解析
java·数据库·sql·tidb
Lucifer三思而后行14 天前
使用 BR 备份 TiDB 到 AWS S3 存储
数据库·tidb·aws
Lucifer三思而后行16 天前
使用 BR 备份 TiDB 到阿里云 OSS 存储
阿里云·云计算·tidb
落叶的悲哀17 天前
mysql tidb like查询有换行符内容问题解决
数据库·mysql·tidb
得物技术18 天前
得物TiDB升级实践
数据库·性能优化·tidb
言之。19 天前
【数据库】TiDB 技术选型与架构分析报告
数据库·架构·tidb
熙客21 天前
TiDB:分布式关系型数据库
java·数据库·分布式·tidb