Etcd集群选举细节

日志级别

在 etcd 集群中,领导者选举是 Raft 协议的一部分,用于在当前领导者失败或无法与集群中的其他节点通信时选出新的领导者。以下是您提供的日志中与领导者选举相关的一些关键条目,以及对它们的详细说明:

  1. 节点失去领导者

    {"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,这通常发生在领导者无法响应其他节点的心跳或请求时。

  2. 开始新的选举

    {"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)阶段。

  3. 节点成为候选者

    {"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),这是选举过程的第一步,节点会请求其他节点的预投票。

  4. 发送预投票请求

    {"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)上。

  5. 接收预投票响应

    {"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 接收到了它自己的预投票响应,这是预投票过程的一部分。

  6. 选举超时

    {"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 响应时超时了。这可能是由于网络问题导致的通信延迟,也可能是由于节点性能问题。

  7. 健康检查失败

    {"level":"warn","ts":"2024-05-07T01:54:17.332Z","caller":"etcdhttp/metrics.go:173","msg":"serving /health false; no leader"}
    

    这条日志表明 etcd 集群的健康状况检查失败,原因是没有领导者。这通常意味着集群无法处理请求,直到新的领导者被选举出来。

在 Raft 协议中,如果一个节点在一段时间内没有收到领导者的消息,它就会认为自己是孤立的,并开始新的领导者选举过程。这个过程包括增加任期计数,并尝试通过预投票和投票阶段获得集群中大多数节点的支持。如果一个节点成功地获得了足够的投票,它就会成为新的领导者,并开始接受和处理请求。

解决领导者选举问题通常需要确保 etcd 集群中的所有节点都可以相互通信,并且没有任何网络分区或其他通信障碍。此外,可能需要检查节点的配置和系统资源,以确保它们可以正常运行。如果问题持续存在,可能需要进行集群恢复或联系专业支持。

代码级别

深入浅出etcd系列 – 心跳和选举
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

选举过程中

1、选举期间etcd集群无法处理写请求。
2、触发选举的条件:leader节点会每隔100ms跟所有的follower节点发送心跳,etcd集群中只要有一个follower 接收不到心跳就会触发选举。

  1. 在etcd集群中,当发生选举过程时,可能会导致写请求无法被处理。这是因为在选举期间,没有确定的leader节点来处理写请求。选举过程将导致系统暂时无法处理新的写操作,直到新的leader节点选举完成。

  2. 触发选举的条件是,leader节点每隔一定时间(如100ms)向所有follower节点发送心跳信号。如果有一个或多个follower节点在规定时间内未能接收到心跳信号,将触发选举过程。这确保了etcd集群中只要有一个follower节点无法与leader节点保持正常的心跳通信,就会启动选举以选择一个新的leader节点来维护集群的稳定性。

以下是官方文档中关于etcd raft协议选举的参考链接:

在这里插入图片描述

  • 32
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值