MIT6.824 2020 P6Raft 课程观看笔记

P6 Raft(1)

Raft的引出

MapReduce的复制完全由单个master控制

GFS依赖于单一的master节点为每一块数据选择primary

vmware fit 在一台primary虚拟机和backup虚拟机中执行写入,如果出故障,则需要接触test-and-set服务器来帮助选择一台backup来接管primary

split brain(脑裂):有多个primary

test-and-set服务器

C1 S1 state

C2 S2 state

正常情况下,C1需要将S1以及S2中的状态均设置为1,才能够成为primary,在网线断开的情况下,C1只能与S1通讯,而不能跟S2通讯,但为了提供容错,C1在将S1设置为1后也能够成为primary,同理C2也因此成为了primary,就导致了脑裂的发生,一定程度上降低了正确性。

上面的三种都是单一主体,复制能由它们自己决定,但会出现单点故障的问题

自动化的,不受脑裂影响的复制系统的关键思想少数服从多数

  • 奇数台服务器
  • leader选举和日志提交需要得到大多数服务器支持,大多数是所有服务器(包括在线的和宕机的)而不是仅指在线的。

KV服务器应用:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kOiampld-1660101549329)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8b1fc1af-c502-4efb-a256-4dd2c25a7c36/Untitled.png)]

clients把key发送到当前leader(raft中的leader)的应用层,接下来应用层来根据指令请求KV数据库。

在非副本服务器上,应用层代码执行这条请求并更新table,然后回复请求。

但在raft副本服务器中,client发送请求到leader上,应用层先不执行,先向下将请求传给raft层,并把它提交给replicated log中,直到半数以上的副本将这条操作添加到各自的日志中,表示复制完成,leader知道所有副本完成复制后,raft向上面的kv层发送通知,已经被安全的复制提交到所有的副本中,副本的应用层执行这条操作,然后给客户端发送回复消息。

leader election

通过leader来进行系统的提速,如果没有leader则一般需要两轮请求来完成一个操作(第一轮找到一个临时的leader,第二轮实际发送请求)。

每个term至多有一个leader

每一个raft服务器都有一个选举计时器

当leader出现错误时(follower在一个选举计时器的时间里没有收到leader发来的请求),选举计时器到期,就会发生新一轮的选举。

  • teram++
  • requestVotes RPC 请求给其他所有的server
  • 获得大部分选票成为leader后,需使用心跳告诉其他所有的client此次term号,所有serves收到消息后,将会重置选举定时器(除了leader,其他人不允许发送AppendEntries消息)

若三个副本的选举定时器同时到期,都将发起选举,将会很大可能导致没有leader被选出,通过随机化选举定时器的时间(最短为两倍心跳传输时间,最长时间会影响故障恢复时间)可以一定程度上解决这个问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值