07 | Raft算法(一):如何选举领导者?
该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结
Raft算法是一种常用的共识算法,相对于Paxos算法更加简化和易于理解。它通过领导者选举、日志复制和成员变更等核心机制,实现了分布式系统中的容错和一致性需求。文章首先介绍了Raft算法中的成员身份,包括领导者、跟随者和候选人三种状态,以及它们的角色和行为。然后详细讲解了选举领导者的过程,包括节点间通讯采用的远程过程调用(RPC)、任期的概念和选举规则。整体而言,本文通过简洁清晰的语言和图例,深入浅出地介绍了Raft算法的原理和实现细节,适合读者快速了解和掌握该算法。文章还强调了Raft算法中的选举规则和随机超时时间的重要性,以及其对选举失败情况的处理方式。此外,文章提出了一些课堂思考问题,引发读者对Raft算法设计的限制和局限性进行思考。整体而言,本文全面介绍了Raft算法的特点、领导者选举等内容,为读者提供了深入了解该算法的良好基础。
《分布式协议与算法实战》,新⼈⾸单¥59
全部留言(93)
- 最新
- 精选
- 益军关于raft的领导者选举限制和局限,我的理解: 1.读写请求和数据转发压力落在领导者节点,导致领导者压力。 2.大规模跟随者的集群,领导者需要承担大量元数据维护和心跳通知的成本。 3.领导者单点问题,故障后直到新领导者选举出来期间集群不可用。 4.随着候选人规模增长,收集半数以上投票的成本更大。
作者回复: 加一颗星:)
2020-02-26249 - piboye为什么raft不采用paxos方式选主?
作者回复: 加一颗星:),不直接采用Basic Paxos,是因为在Raft中不是所有的节点都能当选领导者,只有大多数节点中日志最完整的节点才能当选领导者。
2020-05-02334 - starwolf老师有两个问题请教一下,第一就是投票要获得大多数的选票,但是投票发起者怎么知道现在的票数已经超过半数了?因为分布式环境的机器数目是随时变化的。第二个问题,您在课程中说过,raft算法会让日志最完整的当选,这个不一定吧,如果第二完整的节点先发起投票,并获得大多数选票,也是可以当选的吧。这两个问题请帮忙解答一下,谢谢
作者回复: 加一颗星:),问题1:集群配置不是随时变化的,需要按照一定的算法,比如联合共识、单节点变更,来添加和移除节点,也就是集群当前的节点数是已知的。问题2:是的,日志较完整的节点能当选,只要完整度不比大多数节点低,就可以了,感谢反馈,已修正。
2020-04-061129 - ξ!http://thesecretlivesofdata.com/raft/ raft算法动态演示,看完老师的再看这个清晰明了
作者回复: 加一颗星:)
2020-08-11220 - 每天晒白牙Raft这种"一切以我为主"的强领导模型和上一讲中的chubby有点类似,chubby是只能从主节点读取,相当于单机,性能和吞吐量有限 Raft的强领导模型是写要以主为主,也相当于单机了。性能和吞吐量也会受到限制
作者回复: 加一颗星:)
2020-02-2618 - 蚂蚁内推+v老师请教一个问题,如果一个日志完整度最高的节点由于随机超时时间较长,没能帅先发起投票,没能当上领导者,那么这部分日志要怎么处理?
作者回复: 加一颗星:),如果新领导者不包含这部分日志,这部分日志会覆盖,即“以领导者日志为准,实现各节点日志的一致”,需要我们注意的是,复制到大多数节点的日志项,是不会丢失和改变的,而只被成功复制到少数节点的日志项,可能会被覆盖,也可能最终会被提交。
2020-05-25212 - 旅途老师 问个问题 如果 大多数跟随者节点 被相同任期编号 但是日志序号小的 先联络到了 这样的话 不是日志序号小节点 当选了吗
作者回复: 加一颗星:),不是,因为日志完整度比它高的节点,不会投票给它,也就是文中提到的选举规则的第6条。
2020-03-0911 - 岁月如歌raft算法的局限: 1、强领导模型对于写功能基本退化单机性能,量大任然会出现性能瓶颈,适得其反。 2、选举期间会集群将出现短暂不可用现象,影响时长与选举时间相关。 有几个细节需要跟韩老师请教: 1、raft集群如何感知其他节点呢?候选节点如何判断获得的票数已经过半,从而晋升为领导者? 2、节点是如何存储任期编号?集群如果关闭重启是否任期编号归零? 3、 {1.当任期编号相同时,日志完整性高的跟随者(也就是最后一条日志项对应的任期编号值更大,索引号更大),拒绝投票给日志完整性低的候选人。比如节点 B、C 的任期编号都是 3,节点 B 的最后一条日志项对应的任期编号为 3,而节点 C 为 2,那么当节点 C 请求节点 B 投票给自己时,节点 B 将拒绝投票。} ------------------------------------------------------------- 文中该陈述应该标注为 选举有哪些规则 第6点。且表达意思与配图有所冲突: B节点(任期编号3)、C节点(任期编号4),C节点任期编号更大,为何B节点拒绝C节点投票请求? 请老师解析一下。
作者回复: 加一颗星:),问题1:每个节点都存储有集群配置,也就集群成员的地址信息,所以,一个节点就能通过rpc消息和其它节点交互,另外,知道了当前集群的成员数,也就能判断“接收多少票数时,票数过半了”。问题2:任期编号,要持久化存储,并以原子变量的形式实现,集群重启,需要恢复到之前的值。问题3:感谢反馈,已修正。跟随者会比较日志完整性,来判断是否投票给候选人的,这个特性,能保证,只有日志较完整的节点(也就是包含所有已提交日志项的节点)才能当选领导者。
2020-03-069 - Happy老师您好,如果加了随机的超时时间,但是为了选取日志完整性较高的节点,导致一轮下来还是没有选举成功,那么会进行第二轮选举吗?此时的第二轮选举任期编号会 +1 吗?
作者回复: 加一颗星:),会的,因为一个节点对一个任期编号只有一张选票,投完就没了,如果不加一,也没法进行新一轮选举。
2020-02-2829 - 欧阳请问任期一般多长呢?还是只要不故障,任期一直不变?任期索引是用32位整数表示么?如果达到最大int,怎么处理呢?
作者回复: 加一颗星:),一般而言,在实际环境中,领导者任期长达数天(Chubby团队的观察值),具体取决于系统运行、网络状况等;在Hashcorp Raft中,任期索引是uint64,足够大了。
2020-03-1038