TIDB——TIKV——raft

一、raft

定义:1个leader与多个follower的集群叫做1个raft group ,多个raft group也就是multi raft

二、具体分析

region内的存储方式

tikv node中的region有leader,follow之称,region内的数据按照key的顺序排序,存储形式为键值对

场景1:region内无数据时

  • 连续插入数据时,region默认96MB,超过之后,创建下一个逻辑单元 region,逻辑单元的key都是左闭右开,例如[1,1000),[1001.2000)

场景2:region内有数据时

  • update与delete处理region内的数据,数据可能少于96MB,当小于设定数值(96)时进行region的合并,也有可能多于这个数,当到达144MB时1分为2

功能:

日志复制(多副本数据复制,即为多副本一致)
实现步骤
1、进入propose

leader会把写入请求到日志文件格式<region号_ID,写入请ID>

注:客户端的写入数据只发送给leader,因leader负责读写follower不负责;ID为第几条写入请求,请求按照先后顺序

2、进入append:持久化

leader将日志文件存储到rocksdb raft中

3、复制replicate

将leader raft的日志文件复制给follower内的leader raft

4、committed

follower复制完毕会给leader给一个回应,大多数follower给出信号,

5、apply

根据rocksdb raft将数据写入rocksdb kv中

注:用户提交指的是rocksdb kv中的数据

leader选举

选举概念:term时期,是集群维持关系的周期,无固定长度

场景1:初始状态即集群无leader时期
  • 关键点:全follower但region都有election timeout(raft-election-timeout-ticks)
  • 具体实现:当谁率先超过这个值时,意识到集群无leader,谁就是candidate,并且term时期数字变大,然后给集群中的region发起选举信号,其它region投票给term大的region,candicate票给自己,票超过集群一半就变为leader
场景2:leader节点宕机
  • 关键点:leader心跳信息传递给follower确认term时期,heartbeat time interval(raft-heartbeat-ticks)
  • 具体实现:但是隔heartbeat time interval所设定时间,leader没有发心跳信息,即leader挂掉,开始下一段term,region率先到heartbeat time interval,谁就是candidate,宕机的leader恢复正常变成candidate,term数大者为leader
场景3:region同时迈入另一terms时期

region出现同时到达election timeout或者是heartbeat time interval,各自投票给自己,term时期数字增大,变为candidate,要是没有选出,系统进行下一轮投票(设置election timeout为random 数值)

注:ticks是什么?设置raft-base-tick-interval默认1s,那么raft-election-timeout-ticks等于5,就是5s了

raft-election-timeout-ticks不能小于raft-heartbeat-ticks


题外话:

  • 要是node内超过5w个region,管理成本很高

更于2025-12-16 0:42:48

相关推荐
Gent_倪7 分钟前
MySQL分库、分表、分区详解
数据库·mysql
额额额对了13 分钟前
Linux 数据库开发实战:使用 C 语言与 SQLite3 构建轻量级终端词典
linux·数据库·oracle
qq_2468397531 分钟前
postgresql xxhash64 哈希函数实现
数据库·postgresql·哈希算法
希望奇迹很安静32 分钟前
等级保护测评
网络·数据库
会博通·代码搬运工43 分钟前
疾控档案落地难点:异构业务系统并存,高价值纸质凭证如何回流业务闭环
数据库·档案管理·档案管理系统·智能扫描设备·会博通
数智启示录1 小时前
Apache Kafka Consumer 扩到 40 个仍不提速:Partition 上限锁死有效并行度 【Kafka合集】
数据库·经验分享·分布式·缓存·面试·kafka·apache
数智启示录1 小时前
Apache Kafka 幂等 Producer 的边界:Exactly-Once 到了 MySQL 为什么失效 【Kafka合集】
数据库·经验分享·分布式·mysql·面试·kafka·apache
Java小白笔记1 小时前
Java 实现阿里云 OSS 文件上传链路:普通上传、秒传、分片与断点续传
java·开发语言·数据库·spring·阿里云
—Miss. Z—1 小时前
计算机三级数据库技术—填空题
数据库·mysql
数智启示录1 小时前
Apache Kafka 不只是消息队列:日志与 Offset 分离如何让事件可重放 【Kafka合集】
经验分享·分布式·面试·kafka·apache