tidb 系列一:Raft与主从

Posted 数据与技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tidb 系列一:Raft与主从相关的知识,希望对你有一定的参考价值。

概述

    这阵子公司准备上tidb集群,组内同事研究的热火朝天,tidb官网说到,比起传统主从 (M-S) 复制,基于Raft协议可以提供更好的一致性和auto-failover保证,而且Raft比paxos更好,我一下子就来了兴趣。本文主要围绕简单理解Raft协议展开。


导读

    Raft角色

    角色切换

    日志同步

    Raft与主从复制区别


Raft角色

    在Raft中,任何时候一个服务器可以扮演下面三个角色:

  1. Leader对接所有客户端交互,日志复制等,同一时刻系统中最多存在1个Leader

  2. Follower:所有节点的初始状态,被动接受各种请求

  3. Candidate:Leader候选人,由Follower向Leader转换的中间状态


角色切换

    Raft角色的切换主要是靠超时和term:

  • Election Timeout

    Follower或者Candidate初始会随机分配Election Time,一旦超时,往其它节点发送vote请求

  • Heartbeats Timeout

    确定Leader之后,Follower随机分配HeartBeats Time,一旦超时,往其它节点发送vote请求。如果Follower收到Leader心跳,则HeartBeats Time重新分配

  • term

    在网络抖动或者延迟情况下,Raft会出现多个Candidate或者leader,如果多个Candidate互相发送vote请求,如何权衡选主?每次Candidate发送vote请求,带上term数,并且term加一,term大为主。

    

    切换流程如下(可耻的盗图):

  • time out,starts election(Follower->Candidate):

    Election Timeout,往其它节点发送vote 请求,并且切换为Candidate

  • discovers current leader or new term(Candidate->Follower):

    接受到leader的心跳或者接受到vote请求,并且term数大于自身,则切换为Follower

  • time out,new election(Candidate->Candidate):

    Election Timeout,继续发送vote请求,角色不变

  • receives voites from majority of servers(Candidate->Leader):

    接收到绝大多数vote响应

  • discovers server with higher term(Leader->Follower):

    接收到其它vote请求,并且term数大于自身,则切换为Follower

    角色的切换也提现了Raft协议的高可用,Leader宕机,Raft都能快速的选主,提供服务。


日志同步

    日志同步是由心跳驱动完成的,Leader收到其它节点的reply,包括committed log offset和落地的log offset,与Leader的committed log offset与落地 log offset进行比较,并且同步差异log


Raft与主从复制区别

    Raft

    优点:属于去中心化分布式协议,自动化程度高,运维部署简单

    缺点:落地实现困难(分布式一致性协议通病)

    主从复制

    优点:落地实现加单

    缺点:缺乏自动化运维,需要人工处理故障,也可以引入第三方服务,但会增加系统复杂性。


总结

    比起paxos的抽象难懂,Raft是我看过最易理解的分布式协议,流程清晰,落地实现简单。

    分布式协议涉及点较多,本文尽可能简单的阐述了Raft的角色切换,选主,日志同步等关键流程,只描述了大概的轮廓,没有涉及到底层深入,适合新手快速了解Raft协议。

    现在kafka与redis的一致性同步流程基本与tidb类似,自动选主,日志同步,auto-failover等等,不同的是协议实现方式。




以上是关于tidb 系列一:Raft与主从的主要内容,如果未能解决你的问题,请参考以下文章

TiDB 查询优化及调优系列调优案例实践

redis系列之主从复制与哨兵机制

分布式系统架构系列讲解五(分布式一致性 5):Raft算法

Raft 迷雾中寻支点

TiDB 查询优化及调优系列TiDB 优化器简介

TIDB 架构及分布式协议Paxos和Raft对比