发表时间: 2019-10-16  |  分类: Raft  |  标签: Raft 分布式 笔记

问题1

  1. 目前已经有一个正常的Leader节点A,任期号为1
  2. 由于丢包或网络波动等可能的原因,节点X心跳超时
  3. 节点X自增当前任期号,自增后节点X的当前任期号为2,并转为候选人
  4. 此时节点X的网络恢复正常
  5. 节点X向集群中其他节点发送RequestVote RPC

:

  1. 此时其他Follower节点如何响应节点XRequestVote RPC
  2. 此时Leader节点A如何响应节点XRequestVote RPC

个人见解:如果在节点X发起选举请求的过程中,Leader和其他Follower都没有收到来自客户端的写操作,那么所有节点都承认节点X的选举,Leader节点A自动退化为Follower。如果在这个选举期间有新的日志条目成功提交,那么自然大多数节点都会拒绝节点X的请求,因为它不持有最新的数据。

论文中有以下这段话与个人见解冲突 :
when they believe a current leader exists. Specifically, if a server receives a RequestVote RPC within the minimum election timeout of hearing from a current leader, it does not update its term or grant its vote.
each server waits at least a minimum election timeout before starting an election.
if a leader is able to get heartbeats to its cluster, then it will not be deposed by larger term numbers
因此,像问题中描述的情况,除了节点X外,其他的节点依然是有收到节点A的心跳的,会忽略节点X的投票请求。

阅读
关闭

分类

Linux JavaScript Raft Java Git iptables 内网穿透 RocketMQ 算法 Go Hystrix

标签

Linux bond JavaScript Vue Raft 分布式 笔记 Java 字符串拆分 Git Socks5 iptables zerotier 内网穿透 网络 RocketMQ Docker 字符串 VPS VPN 算法 kmp Go json 日志 log4j slf4j 面试 后端开发 系统界面 翻译 Feign Spring Cloud Hystrix