上一篇文章提到, Raft核心部分只需要用到2个RPC: RequestVote和AppendEntries, 本文将介绍这两个RPC的格式和作用。
RequestVote RPC是由candidate发送给其他节点,请求其他节点为自己投票,如果一个candidate获得了多数节点的投票,则该candidate转变为Leader。AppendEntries RPC是由Leader节点发送给其他节点,有两个作用,当其entries域为空时,该RPC作为Leader的心跳,当entries域不为空时,请求其他节点将entries域中的log添加到自己的log中。
每个Raft节点将会根据自己节点的状态数据来对这两种RPC请求进行处理,我们先看一下,每个Raft节点保存那些状态数据:
下面是AppendEntries RPC的格式和说明:
下面是RequestVote RPC格式及说明:
上面这两个RPC就是Raft核心部分用到的全部RPC. 下面再罗列一下Raft各种状态的节点处理RPC及状态转换的规则:
本文介绍了Raft 核心部分RPC调用的详细格式及处理流程,下一篇文章我将结合本文介绍的内容进一步解释Raft 日志复制的过程。
原文地址:http://blog.csdn.net/chicm/article/details/41909261