日志级别
在 etcd 集群中,领导者选举是 Raft 协议的一部分,用于在当前领导者失败或无法与集群中的其他节点通信时选出新的领导者。以下是您提供的日志中与领导者选举相关的一些关键条目,以及对它们的详细说明:
-
节点失去领导者:
{"level":"info","ts":"2024-05-07T01:54:04.948Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"raft.node: 9afce9447872453 lost leader 5ee9c643fc08f96b at term 52"}
这条日志表明节点
9afce9447872453
丢失了它的领导者5ee9c643fc08f96b
,这通常发生在领导者无法响应其他节点的心跳或请求时。 -
开始新的选举:
{"level":"info","ts":"2024-05-07T01:54:04.948Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"9afce9447872453 is starting a new election at term 52"}
由于丢失了领导者,节点
9afce9447872453
开始了一个新的选举过程。在 Raft 协议中,选举过程包括预投票(PreVote)和投票(Vote)阶段。 -
节点成为候选者:
{"level":"info","ts":"2024-05-07T01:54:04.948Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"9afce9447872453 became pre-candidate at term 52"}
节点
9afce9447872453
成为了一个预候选者(pre-candidate),这是选举过程的第一步,节点会请求其他节点的预投票。 -
发送预投票请求:
{"level":"info","ts":"2024-05-07T01:54:04.948Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"9afce9447872453 [logterm: 52, index: 456617084] sent MsgPreVote request to 2fa50bf947c1df3a at term 52"}
节点
9afce9447872453
向另一个节点2fa50bf947c1df3a
发送了一个预投票请求。这是为了确认是否有其他节点已经在一个更高的任期(term)上。 -
接收预投票响应:
{"level":"info","ts":"2024-05-07T01:54:04.948Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"9afce9447872453 received MsgPreVoteResp from 9afce9447872453 at term 52"}
节点
9afce9447872453
接收到了它自己的预投票响应,这是预投票过程的一部分。 -
选举超时:
{"level":"warn","ts":"2024-05-07T01:54:17.333Z","caller":"etcdserver/v3_server.go:852","msg":"timed out waiting for read index response (local node might have slow network)","timeout":"7s"}
这个警告表明在尝试进行线性化读取时,节点在等待 ReadIndex 响应时超时了。这可能是由于网络问题导致的通信延迟,也可能是由于节点性能问题。
-
健康检查失败:
{"level":"warn","ts":"2024-05-07T01:54:17.332Z","caller":"etcdhttp/metrics.go:173","msg":"serving /health false; no leader"}
这条日志表明 etcd 集群的健康状况检查失败,原因是没有领导者。这通常意味着集群无法处理请求,直到新的领导者被选举出来。
在 Raft 协议中,如果一个节点在一段时间内没有收到领导者的消息,它就会认为自己是孤立的,并开始新的领导者选举过程。这个过程包括增加任期计数,并尝试通过预投票和投票阶段获得集群中大多数节点的支持。如果一个节点成功地获得了足够的投票,它就会成为新的领导者,并开始接受和处理请求。
解决领导者选举问题通常需要确保 etcd 集群中的所有节点都可以相互通信,并且没有任何网络分区或其他通信障碍。此外,可能需要检查节点的配置和系统资源,以确保它们可以正常运行。如果问题持续存在,可能需要进行集群恢复或联系专业支持。
代码级别
深入浅出etcd系列 – 心跳和选举