mit6.824 Lab2A raft

lab2A Raft-Election

2A要完成的实验主要是raft的基础架构,核心就是三大状态(follower,candidate,leader)的切换

任务说明

搭建raft集群,实现基础的超时-选举功能

一共有三个测试:

1.是否能选出一个leader,并保证任期稳定

2.是否能选出leader后,在leader挂掉后,还能选出新leader

3.更多的节点测试,更多的轮数测试集群是否正常运行

go test通过rf.GetState()来调用检查当前节点状态是否为leader,通过Make来创建节点

文件解释

下列给出本实验重要的相关文件:

.
├── config.go
├── persister.go
├── raft.go             本次实验需要修改的文件
├── test_test.go        测试用例:只用到2A部分
└── util.go

指令解释

下面解释本实验出现的部分指令:

go test -run 2A

只需要用这个指令就可以进行测试了,推荐测试一百组(约一小时)。可以写脚本测试,也可以在这条指令的基础上加参数-count 100测试。据说2A测试失败率不超过3%就可以下一步实验了。

任务目标

补全raft.go的代码,需要补全的部分基本由注释提供

1.补全raft结构体信息

2.补全拉票参数/心跳包参数信息,即RequestVoteArgs,RequestVoteReply等

3.补全Make()函数,提供测试函数初始化接口

4.补全GetState()函数,提供给测试函数接口

5.补全ticker()函数,控制状态(如follower)对应的行为

6.补全拉票函数RequestVote及对应rpc接口

7.提供心跳函数AppendEntries及对应rpc接口

学习参考

可视化动图:http://thesecretlivesofdata.com/raft/#overview

任务书:http://nil.csail.mit.edu/6.824/2020/labs/lab-raft.html

论文:http://nil.csail.mit.edu/6.824/2020/papers/raft-extended.pdf

其他参考

视频:https://www.bilibili.com/video/BV1uF411G7vc/

论文翻译:https://blog.csdn.net/erlib/article/details/53671783

任务书翻译:https://zhuanlan.zhihu.com/p/248686289

部分教程(无好坏之分,只是额外提供一个学习的方向,适合自己才是最好的):

https://blog.csdn.net/MarksSa/article/details/127429742

https://blog.csdn.net/qq_52245648/article/details/129485643

https://blog.csdn.net/Z_Stand/article/details/116565983

https://lizhaolong.blog.csdn.net/article/details/105981661

https://blog.csdn.net/lin819747263/article/details/106316163

https://blog.csdn.net/z1213035927/article/details/122867095

https://zhuanlan.zhihu.com/p/476644274

流程图

follower

最初始的状态就是follower,由于超时(没有收到心跳包)从而转变为candidate

candidate

变为candidate后,开始向其他节点通过rpc拉票,如果拉票超过半数就变为leader,否则就继续成为candidate拉票

在期间如果发现有其他leader任期更大,就变为对方(不严谨)的follower

leader

作为leader要一直向其他节点发出心跳包,维护自己的leader地位

如果遇到了其他leader任期更大,也要变为对方的follower

可能的坑

首先是测试不稳定,推荐多组测试后才能确定代码没问题(但是测一百组就要一个多小时)

注意:休眠时间的设置可能和论文不同,需要自己分析调整

如果发现任期频繁更换,可能是超时时间的设置问题

如果是发现任期没leader,可能是休眠时间设置的问题

如果发现一个任期多leader,可能是拉票出现问题

另:似乎如果先产生leader,再崩了超过一半节点,集群还会运行。但是测试似乎没有这个方面的样例

源码

https://gitee.com/jiangnan1634605411/mit6.824

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值