Raft日志复制
2021-06-01 14:38:45 1 举报
Raft日志赋值流程
作者其他创作
大纲/内容
Leader为每个Follower广播AppendEntries RPC,要求其他节点复制这个日志条目
Leader和Follower的日志就可以保持一致
Follower上prevLogIndex及之前位置之前的日志条目将全部保留
Follower返回拒绝,并返回min(自己的commit的索引,prevLogIndex)
Leader根据返回的索引,计算新的prevLogIndex和prevLogTerm,重新发起AppendEntries
Follower从prevLogIndex位置后追加Leader上在该位置之后的所有日志条目
Leader将写请求解析成操作指令追加到本地日志文件中
Leader通过AppendEntries RPC将已经成功(在大多数节点上)提交的日志项告知Follower
Follower收到提交的日志项之后,将其应用至本地状态机
AppendEntries RPC请求参数和返回值
Follower检查AppendEntries中prevLogIndex和prevLogTerm是否与自己中一致?
是
开始
客户端向Leader发送写请求
否
Leader检测到半数以上节点对AppendEntries返回成功
结束
Follower上在prevLogIndex之后的日志条目将被Follower全部删除(如果存在的话)
Follower对AppendEntries RPC返回成功
Leader就将该日志条目对应的指令应用(apply)到本地状态机,并向客户端返回操作结果
0 条评论
下一页