美文网首页云原生
共识算法raft的关键概念

共识算法raft的关键概念

作者: 印随2018 | 来源:发表于2019-07-06 22:48 被阅读3次

从etcd源码里看raft

raft 算法主要有两个过程:一个过程是领导者选举,另一个过程是日志复制,其中日志复制过程会分记录日志和提交数据两个阶段。raft 算法支持最大的容错故障节点是(N-1)/2,其中 N 为 集群中总的节点数量。

三种状态

raft算法中只有三种状态,etcd的实现中增加了一种状PreCandidate

  • Follower(群众)
  • Candidate(候选人)
  • Leader(领导)
image.png

https://github.com/etcd-io/etcd/blob/master/raft/raft.go#L36,L43

// Possible values for StateType.
const (
    StateFollower StateType = iota
    StateCandidate
    StateLeader
    StatePreCandidate
    numStates
)

两种超时机制

  • election timeout(选举超时)
  • heart timeout(心跳超时)

https://github.com/etcd-io/etcd/blob/master/raft/raft.go#L619,L653

// tickElection is run by followers and candidates after r.electionTimeout.
func (r *raft) tickElection() {
    r.electionElapsed++

    if r.promotable() && r.pastElectionTimeout() {
        r.electionElapsed = 0
        r.Step(pb.Message{From: r.id, Type: pb.MsgHup})
    }
}

// tickHeartbeat is run by leaders to send a MsgBeat after r.heartbeatTimeout.
func (r *raft) tickHeartbeat() {
    r.heartbeatElapsed++
    r.electionElapsed++

    if r.electionElapsed >= r.electionTimeout {
        r.electionElapsed = 0
        if r.checkQuorum {
            r.Step(pb.Message{From: r.id, Type: pb.MsgCheckQuorum})
        }
        // If current leader cannot transfer leadership in electionTimeout, it becomes leader again.
        if r.state == StateLeader && r.leadTransferee != None {
            r.abortLeaderTransfer()
        }
    }

    if r.state != StateLeader {
        return
    }

    if r.heartbeatElapsed >= r.heartbeatTimeout {
        r.heartbeatElapsed = 0
        r.Step(pb.Message{From: r.id, Type: pb.MsgBeat})
    }
}

任期制

哪个节点做leader是大家投票选举出来的,每个leader工作一段时间,然后选出新的leader继续负责。这跟民主社会的选举很像,每一届新的履职期称之为一届任期,在raft协议中,也是这样的,对应的术语叫term。


image.png

相关文章

  • 共识算法raft的关键概念

    从etcd源码里看raft raft 算法主要有两个过程:一个过程是领导者选举,另一个过程是日志复制,其中日志复制...

  • 共识算法:Raft

    共识算法:RaftRaft 官网Raft 原理动画 (推荐看看Raft 算法解析图片来源

  • raft算法笔记

    raft算法动画地址:http://thesecretlivesofdata.com/raft/raft是一个共识...

  • 分布式系统协议Raft

    Raft leader-based的共识算法raft会先选出leader,leader完全负责replicated...

  • Raft 协议

    Raft 协议是一个分布式共识(consensus)算法, 可以参考 ATC-Raft 和 Thesis-Raft...

  • 分布式共识算法

    分布式共识算法 分布式共识(Consensus):Viewstamped Replication、Raft以及Paxos

  • Fabric 1.4 raft 共识源码浅析

    �fabric 在 1.4.1 版本正式引入 Raft 共识算法,用于替代现有的 Kafka 共识。fabric ...

  • Raft协议

    1.raft协议 raft协议是一个共识算法,主要包括leader election,log replicatio...

  • 共识算法:Raft

    一 SMR 副本状态机:每个服务器节点作为状态机,接收相同顺序的操作指令,产生相同的状态变更,构成一组强一致的副本...

  • 共识算法:Raft

    上篇讲到了「拜占庭将军问题」:多个拜占庭将军要如何在可能有叛徒、信使可能被策反或者暗杀的情况下达成是否要进攻的一致...

网友评论

    本文标题:共识算法raft的关键概念

    本文链接:https://www.haomeiwen.com/subject/puimhctx.html