当前位置: 首页 > article >正文

从零开始学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。

相关参数:

 


http://www.kler.cn/a/442347.html

相关文章:

  • Kafka权威指南(第2版)读书笔记
  • Lianwei 安全周报|2025.1.13
  • C#上位机通过CAN总线发送bin文件
  • Python语言的编程范式
  • docker安装mysql 5.7
  • 01.02、判定是否互为字符重排
  • 【Java】使用RSA进行数字签名详解(复制即用,内有详细注释)
  • 用 Python 从零开始创建神经网络(十七):回归(Regression)
  • 小程序转uniapp之setData
  • RabbitMQ镜像队列机制
  • 【WRF教程第3.4期】预处理系统 WPS 详解:以4.5版本为例
  • python IO编程:序列化
  • android 计算CRC
  • Windows开机黑屏|Windows开机黑屏只有鼠标|Windows开机不运行explorer
  • vue3实现商城系统详情页(前端实现)
  • 面试真题 | 虎牙 C++[20241218]
  • 5个小型多模态AI模型及其功能
  • 使用idea创建一个JAVA WEB项目
  • 小程序子组件调用父组件方法、父组件调用子组件方法
  • clion使用说明
  • 环境搭建——CUDA、Python、Pytorch
  • 【jvm】主要参数
  • Vue.js前端框架教程6:Element UI框架
  • EDAC和 MCA检验技术
  • 【Leetcode 每日一题】1847. 最近的房间
  • 【图像处理lec2】matlab的使用