liyefei737 / raft

A raft implementation in Go

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Overview

A raft implementation based on the paper "Search of an Understandable Consensus Algorithm". Features implemented:

  • leader election with ramdom timeout
  • heartbeat(empty log append) and log replication across nodes

A running cluster's log may look like this:

2020/06/08 06:48:23 Raft: Node 0 created        Term 0          State Follower
2020/06/08 06:48:23 Raft: Node 1 created        Term 0          State Follower
2020/06/08 06:48:23 Raft: Node 2 created        Term 0          State Follower
Test (2B): basic agreement ...
2020/06/08 06:48:23 Follower(2) timed out. New election start New Term: 1
2020/06/08 06:48:23 Raft: Node 2 send out votes         Term 1          state: Candidate
2020/06/08 06:48:23 node 2(Term 1) requests node 0(Term 0) to vote vote granted: true
 
2020/06/08 06:48:23 node 2(Term 1) requests node 1(Term 0) to vote vote granted: true
 
2020/06/08 06:48:23 Raft: Node 2 becomes leader Term 1          state: Leader
2020/06/08 06:48:23 Leader info:
Leader Node: 2          Term: 1
                        commitIndex: 0
                        lastApplied: 0
2020/06/08 06:48:23 Voting Result: Term: 1      Leader: 2       Votes: 2/3
2020/06/08 06:48:23 2b
2020/06/08 06:48:23 2b
2020/06/08 06:48:23 Term 1 Leader(2)New log appended {1 0}
2020/06/08 06:48:23 Follower(1) log updated from length 1 to 2: [{0 <nil>} {1 0}]
2020/06/08 06:48:23 Updating leader(2) commitIndex from 0 to 1
2020/06/08 06:48:23 Follower(0) log updated from length 1 to 2: [{0 <nil>} {1 0}]
2020/06/08 06:48:23 Leader(2) Updating/Applying lastApplied lastApplied: 0              commitIndex 1
2020/06/08 06:48:23 Follower(1) Updating commitIndex from 0 to 1
2020/06/08 06:48:23 Follower(0) Updating commitIndex from 0 to 1
2020/06/08 06:48:23 Follower(1) Updating/Applying lastApplied lastApplied: 0            commitIndex 1
2020/06/08 06:48:23 Follower(0) Updating/Applying lastApplied lastApplied: 0            commitIndex 1
2020/06/08 06:48:23 Raft: Node 0 Killed Term 1          State Follower
2020/06/08 06:48:23 Killed a Follower Raft instance: 0
2020/06/08 06:48:23 Raft: Node 1 Killed Term 1          State Follower
2020/06/08 06:48:23 Killed a Follower Raft instance: 1
2020/06/08 06:48:23 Raft: Node 2 Killed Term 1          State Leader
2020/06/08 06:48:23 Killed a Leader Raft instance: 2

more info: https://pdos.csail.mit.edu/6.824/labs/lab-raft.html

About

A raft implementation in Go


Languages

Language:Go 100.0%