在 ETCD 源码学习过程,不会讲解太多的源码知识,只讲解相关的实现机制,需要关注源码细节的朋友可以自行根据文章中的提示,找到相关源码进行学习
消息类型
注释文档: /ectd/raft/doc.go
代码地址: /ectd/raft/raft.go
消息 | 说明 |
MsgBeat | 心跳消息(tickHeartbeat),该消息会触发 Leader 广播心跳消息。 |
MsgHeartbeat | 当 Leader 被触发广播心跳消息时,会发送该类型的消息给 Follower(sendHeartbeat) |
MsgHeartbeatResp | Follower 接收到 MsgHeartbeat 消息时,返回该类型消息。 |
MsgCheckQuorum | Leader 自我检查,以判断是否能维持 Leader 状态。 |
MsgHup | Follower 在选举计数器超时时,触发该消息,尝试发起一轮新选举 (tickElection) |
MsgProp | 提案消息,收到这个消息,Leader会将消息保存到raftLog,同时同步给其他节点(msgs)。 |
MsgApp | 将msgs中的消息,封装打包成 MsgApp 消息发送给其他节点(maybeSendAppend)。 |
MsgAppResp | Follower 收到 MsgApp 消息时,会响应该类型消息给Leader,以通知 Leader 接收消息成功。 |
MsgReadIndex | 一致性读实现(linearizableReadLoop) |
MsgReadIndexResp | |
MsgUnreachable | Leader 同步日志给 Follower 时,如果发送失败,会触发该类型消息 |
MsgTransferLeader | Leader 被停止时,会选择一个合适的节点,作为下一任Leader节点。然后发送 MsgTransferLeader 消息。 |
MsgTimeoutNow | 该消息会触发新一轮的选举。 |
MsgSnap | 快照消息 |
MsgSnapStatus | Leader 发送快照消息时,会根据发送情况上报快照发送情况。 |
MsgPreVote | 如果开启预选举,那么在选举之前,会发送该消息,进行预选举。(campaign) |
MsgPreVoteResp | 节点收到 MsgPreVote之后,返回 MsgPreVoteResp 已表明当前节点是否可以参加选举。(campaign) |
MsgVote | Candidate 发送该消息,其他节点接收到该消息之后,通过一定规则判断是否选举目标节点为 Leader。(campaign) |
MsgVoteResp | 节点将结果通过 MsgVoteResp 返回给 Candidate。(campaign) |
PS:欢迎纠正