Leader:

  • 集群的管理者
  • 所有读写流量都是走Leader
  • Leader会周期性向follower发出心跳信息;并且会将写的数据以日志的方式传递给其他follower;
  • 当写入的数据成员过半,就认为写入成功;

Follower:

  • 被管理者
  • 对其他的服务作出响应
  • 接受leader的日志;
  • 如果长时间没收到leader的通知信息,就会将自己角色转换为后选择candidate,发起投票,票多着升级为Leader;

Region

  • 是按照Key排序的连续的有序集合;
  • 当Region插入达到96MB后会另起一个新Region;
  • 初始化时,Region内的数据是连续的,Region中间也是连续的,左闭右开区间;region1: [1,1000), region2:[1000-2000),region3:[2000,3000)
  • 随着数据的修改(例如UPDATE等),Region大小会发生变化,当数据涨到144M的时候会自动分裂;当Region过小的时候会进行Region的合并;(分裂和合并的大小可以自定义)
  • 一个Region构成一个Raft group,多个Region会形成多个Raft Group--Multi Raft
  • 如果一个TiKV中的Region超过5W,会影响性能;

Raft 日志复制

Leader日志写入的过程:

  1. Propose, Leader将写请求转化为Raft Log;
  2. Append: 日志持久化日志, Leader在Propose后会将写入请求转换为写入日志,存到日志文件中;(日志组成:region_id + 序号+数据组成,日志存储在本地的RocksDB实例中);
  3. Replicate: Leader将日志分发给follower;follower收到日志后写入到本地存储中(Append); 返回消息给Leader确认;
  4. Commited: 当多数节点都返回了Append成功的消息后,Leader认为写入成功;此时可以保证Raft rocksdb的日志不丢失;(区别于用户的commit)
  5. Apply:将数据写入TiKV中(一个TiKV中实际上有两个RocksDB,一个用于存储Raft Log,一个用于存储KV信息;)

Raft- Leader选举

election_timeout默认10s,Raft在无主状态下多长时间会发起选举,如果follower 超过10s没收到Leader信息,该Region就会重新选举;第一个计时到时间的人首先称为candidate,并发起投票;

heartbeat_time_interval, Raft和follower的心跳间隔,默认10s;Leader和Follower的心跳检测,如果没收到心跳就会发起Vote

election_timeout > heartbeat_time_interval

election timeout:raft-election-timeout-ticks

heartbeat time interva: raft-heartbeat-ticks

raft-base-tick-interval =1s

真实心跳时间: raft-heartbeat-ticks * raft-base-tick-interval

TiDB:Raft与Multi Raft相关推荐

  1. 【转】分布式一致性算法:Raft 算法(Raft 论文翻译)

    编者按:这篇文章来自简书的一个位博主Jeffbond,读了好几遍,翻译的质量比较高,原文链接:分布式一致性算法:Raft 算法(Raft 论文翻译),版权一切归原译者. 同时,第6部分的集群成员变更读 ...

  2. Nacos如何实现Raft算法与Raft协议原理详解

    前言 大名鼎鼎的Paxos算法可能不少人都听说过,几乎垄断了一致性算法领域,在Raft协议诞生之前,Paxos几乎成了一致性协议的代名词.但是对于大多数人来说,Paxos算法太难以理解了,而且难以实现 ...

  3. raft java库_结合consul raft库理解raft

    一 入口 github.com/hashicorp/consul/agent/consul/server.go func (s *Server) setupRaft() error { 状态机,用于c ...

  4. TiDB ——TiKV

    TiDB --TiKV TiKV持久化 TiKV架构和作用 TiKV数据持久化和读取 TiKV如何提供MVCC和分布式事务支持 TiKV基于Raft算法的分布式一致性 TiKV的coprocessor ...

  5. TiDB:基于 Raft 的 HTAP 数据库

    目录 1. 简介 2. 基于 Raft 的 HTAP 3. TiDB 架构 4. Multi-Raft 存储 5. HTAP 引擎 6. 实验 7. 相关工作 8. 结论 摘要 混合事务和分析处理(H ...

  6. CockroachDB的raft优化

    读了一下CockroachDB的16年的设计翻译,找了一些CockroachDB的raft优化方法 1.选举优化,Cockroach使用随机时间,这样通信往返时间短的会更易第一个发起选举,更容易成为l ...

  7. 从paxos到raft zab,为何raft能够“独领风骚”

    文章目录 RAFT出现的缘由 RAFT 的实现 STATE MACHINE Log Replicated State Machine Leader Election 基本角色 关键变量 基本选举过程 ...

  8. Paxos和Raft的前世今生

    前言 在保证数据安全的基础上,保持服务的持续可用,是核心业务对底层数据存储系统的基本要求.业界常见的1主N备的方案面临的问题是"最大可用(Maximum Availability)" ...

  9. 浅谈分布式一致性:Raft 与 SOFAJRaft

    简介: SOFAJRaft已开源 作者 | 家纯 来源 | 阿里技术公众号 一 分布式共识算法 (Consensus Algorithm) 1 如何理解分布式共识? 多个参与者针对某一件事达成完全一致 ...

最新文章

  1. [k8s] 第二章 十分钟带你搭建k8s集群环境
  2. lte 中crs_LTE网络CRS功率配置及其影响研究
  3. excel可视化图表插件_Axure 教程:利用图表前端插件实现高级可视化图表
  4. [LeetCode] NO.292 Nim Game
  5. flash写保护原理_为什么固态会掉盘?著名的30分钟大法修复是什么原理?
  6. python中merge函数怎么用_Python Merge函数原理及用法解析
  7. luogu P3295 [SCOI2016]萌萌哒
  8. Python——单元测试
  9. 1.7见识一下什么叫Linux驱动:LED
  10. 如果每天给你888元,只能看书学习,不能玩手机电脑,你能坚持多少天?
  11. Tcp keepalive详解
  12. URAL K-based Numbers(1-3)
  13. 设计模式,六大设计原则,类的特性
  14. CNC加工中心程序代码大全,你还不收藏吗?
  15. 海信电视显示有设备连接服务器,海信电视屏幕上显示“智能电视系统启动中,请稍后”是什么意思?怎样处理?...
  16. Zhu-Net——一个隐写分析网络
  17. 判断入射满射c语言编码,数学上可以分三类函数包括() 答案:单射双射满射...
  18. js身份证号码带*号处理
  19. 情怀——推荐梁晓声新作《未死的沙威》
  20. twitter开源_30位开源社区经理将在Twitter上关注

热门文章

  1. TikTok话题标签玄机何在,KOLBOX带你摆脱无效标签!
  2. with root cause解决办法
  3. 涡轮发动机图测试线2010开关测试机SW辊子输送机用抓手SW双头精雕机IGSFPC折弯设备、FPC软板折弯机SWZ4直流电机_三维图Z4-112-4-1_5.5KW_160-1抛光机三维图
  4. [BZOJ 3894]文理分科
  5. tf.expand_dims和tf.squeeze函数
  6. H264的I/P/B帧类型判断(一)
  7. Vue框架的学习(Vue的基础指令操作二 V-For)第二课
  8. 字母上面加(箭头,^,波浪线,横线,一个点,两个点)markdown表达
  9. 生产车间管理制度:优化生产流程,提高效率和安全性
  10. cordova安装启动