首页 > 数据库 >数据库必知必会:TiDB(5)TiKV Raft

数据库必知必会:TiDB(5)TiKV Raft

时间:2023-02-10 11:37:29浏览次数:47  
标签:term 必知 Region TiKV 节点 follower TiDB Raft leader

(数据库必知必会:TiDB(5)TiKV Raft)

Raft

角色介绍

TiKV中的Region保存了3份数据,其中一份数据是主数据,称为leader,另外两份是follower。

image-20230131223729507

Region中的数据是按照key进行排序的。当Region的数据增长达到96MB的时候,就会新建一个Region进行写数据。

由于Region的数据可能存在修改、删除等操作,所以Region的数据就会在96MB的基础上再变化。当增长达到144MB的时候,Region会拆分;当减小到一个较小的大小的时候,Region可以合并。

一个TiKV节点上的Region个数达到5万个的时候,管理成本就比较高了。

Raft日志复制

TiKV节点中存在两种类型的RocksDB,RocksDB kv是存储的K-V型数据,RocksDB raft存放的是数据从操作指令,即数据操作的增删改查指令,也就是Raft日志。

数据写入的时候,将数据写入日志写到leader。

image-20230131224643543

leader收到写入请求后:

第1步,propose阶段,leader将写请求写入Raft日志,Raft日志的唯一标识是:Region号+日志当前的序号。

image-20230131230646476

第2步,append阶段,leader将Raft日志写入到本地的RocksDB。

image-20230131230744610

第3步,replicate阶段,leader将本地的Raft日志逐条发送到follower,follower在本地完成append。

image-20230131230816244

第4步,commited阶段,follower在完成append的时候,会将状态反馈给leader。

image-20230131230910476

第5步,apply阶段,当大多数follower都反馈append成功,leader会认为数据持久化已经稳妥了,就会执行commit,否则leader会认为数据持久化失败,不会进行commit。

image-20230131231003509

Raft Leader选举

当集群刚启动的时候,所有TiKV节点都是follower,term=1,此时follower会一直等待leader的信息,直到超过election timeout(默认10秒钟)的时间都还没等到,则region会把自己变成candidate,term=2,并将这个信号发送给其他节点。其他节点收到信号后,会用term值与自己保存的term值进行比较,如果收到的term比自己的term值大,则其他节点会同意这个信号请求,并将自己的term更新成信号中的term值表示一段新关系的开始。当大多数节点都同意,则leader选举成功。

image-20230131232325522

当集群中有leader的时候,leader会按一定的时间间隔heartbeat time interval(默认10秒)给folloer发送心跳,表示leader存在,follower禁止起义,follower收到心跳信息后,只能按兵不动。当集群中突然失去leader节点的时候,follower无法收到心跳信号,当超过election timeout还没收到心跳信号,则有follower就会起义,将自己变成candidate,并发送选举请求给其他节点开始进行选举。

image-20230131232402962

一个问题

如果在选举leader的过程中,出现多个节点都选择自己做为candidate的,都选自己做leader,则有可能导致无法选举出新的leader。

image-20230131233040292

解决办法就是不同的节点采用随机的、不同的无主选举时间election timeout,防止多个节点同时发起选举。

几个概念

  • Election timeout,无主选举时间,超过这个时间还没收到leader的信息就会发起leader选举,对应参数raft-election-timeout-ticks,默认值raft-base-tick-interval
  • Heartbeat time interval,心跳时间,leader发送心跳到follower的时间间隔,需要小于Election timeout,对应参数raft-heartbeat-ticks,默认值raft-base-tick-interval

标签:term,必知,Region,TiKV,节点,follower,TiDB,Raft,leader
From: https://blog.51cto.com/u_15943369/6049007

相关文章

  • TiDB集群安装TiDB Dashboard
    TiDBDashboard是从TiDB4.0版本起引入的可视化面板,用于帮助观察与诊断整个TiDB集群,详情参见 ​​TiDB文档-TiDBDashboard​​。本篇文章将介绍如何在Kubernetes......
  • 数据库必知必会:TiDB(4)TiKV分布式事务
    (数据库必知必会:TiDB(4)TiKV分布式事务)分布式事务存在的问题假设有这样一个事务:begin:updatepersonsetname='Tom'whereid=1;updatepersonsetname='Jack'......
  • TiDB增强型 StatefulSet 控制器--Advanced StatefulSet
    K8S内置的 ​​StatefulSet​​ 为Pods分配连续的序号。比如3个副本时,Pods分别为pod-0,pod-1,pod-2。扩缩容时,必须在尾部增加或删除Pods。比如扩容到4个副本时......
  • TiDB Operator配置TiDB集群故障自动转移
    TiDB集群包括PD、TiKV、TiDB、TiFlash、TiCDC和Pump六个组件。目前TiCDC和Pump并不支持故障自动转移,PD、TiKV、TiDB和TiFlash的故障转移策略会有所不同。PD故障......
  • 必知必会的设计原则——依赖倒置原则
    概述开放封闭原则是面向对象的设计的中级目标,而依赖倒置原则是实现开放封闭原则的基础。如果开放封闭原则是设计大楼的蓝田,那么依赖倒置原则就是大楼的钢铁架构。高层模......
  • 大数据必知必会:Zookeeper(3)集群环境安装
    摘要】Zookeeper3.8.0集群环境安装安装前准备集群环境下,至少需要3台服务器。IP地址主机名称10.0.0.5node110.0.0.6node210.0.0.7node3需要保......
  • MySql查询性能优化必知必会
    作为一个写业务代码的"JAVACURDBOY",具备写出高效率SQL让应用高性能访问数据库的能力非常重要。获得这个能力的过程我收获了点知识和经验,今天在这里分享出来,希望大家多多......
  • 必知必会的设计原则——开放封闭原则
    概述开放封闭原则是面向对象所有原则的核心。对功能扩展开放,面向修改代码封闭。需求改变时,在小改变软件实体源代码(类、接口、方法等)的前提下通过扩展功能使其满足新的需......
  • K8S下TiDB集群基础环境配置
    软件版本要求软件名称版本DockerDockerCE18.09.6Kubernetesv1.12.5+CentOSCentOS7.6,内核要求为3.10.0-957或之后版本Helmv3.0.0+防火墙配置建议关闭防火墙systemctlst......
  • 数据库必知必会:TiDB(1)数据库架构概述
    (数据库必知必会:TiDB(1)数据库架构概述)TiDB体系架构TiDB兼容MySQL5.7协议,支持水平扩容或者缩容的金融级高可用的云原生分布式数据库。TiDB的体系架构为:TiDBServer,接收......