请问下各位老师,pd leader 如果任期到了,原先的pd leader 是否有较大的可能继续充当leader
这个时候的选举过程是这样子,有些资料学习嘛
pd leader 一般不会切换,只有卡住了、duration 高什么的才会重新选举
不是说rafe 协议有个什么任期嘛,任期到了就要重新触发选举
我觉得大概可以这么理解,leader 为了维持自己的地位,会周期性向follower 发送心跳,follower 接收到leader心跳信息后,会重置自己的选举超时时间,也就是让follower不会发起选举
有兴趣可以学习下 raft 相关算法,中文资料也有的,网上直接搜就可以了(比如这里:https://github.com/maemual/raft-zh_cn)
这里的选举触发条件就是你说的 tick 心跳超时导致的,而且是随机的(保证不会同时发起 选举);
follower 如果超时才会发起选举,选举成功了 老的 leader 自然就不是 leader 了
PD(Placement Driver)负责管理元数据和集群协调。 如果 PD leader 任期届满,会触发 Raft Leader Election 选举机制,选出新的 PD leader。
在 Raft Leader Election 期间,现有的 PD 节点参与选举过程。 每个节点都有机会成为新的领导者。 Raft 共识算法确保只有一个节点成为领导者。 领导者负责接受客户端请求、处理元数据更改以及协调集群操作。
原来的PD leader是否更有可能继续担任leader取决于Raft算法的具体实现和选举时的情况。 Raft 旨在提供强一致性和容错性,但在领导者选举过程中不偏袒任何特定节点。
领导者选举考虑了节点的可用性和可靠性、它们的通信延迟以及 Raft 日志的状态等因素。 满足 Raft 算法要求并在参与节点之间达成共识的节点将成为新的领导者。
重要的是要注意 Raft 旨在处理故障并确保集群的一致视图。 因此,即使原PD领导人过去任期良好,也不能保证下一届继续担任领导人。 Leader选举过程旨在根据集群的当前状态选择最合适的节点作为新的Leader。
原先的pd leader 有极大的可能继续充当新leader。是的
除非新的leader得分没有老leader高。不然不会随便更换
除非心跳断了,否则不会发起选举选择新的leader;
就是这么回事儿,只要主从不失联,就不会发起重新选举(强制transfer除外)。
正常情况下leader并不会变
leader 任期 没有到期的概念,简单的描述下, 在raft里,当candidate 成功选举成leader后,会发送心跳 给所有follower和之前同是 candidate的成员, 维持自己的leader 地位。什么时候会发生leader切换?
- 网络隔离,leader 与多数派隔离,多数派收不到heartbeat 情况下 ,会重新触发选举。
这时候所谓的 任期 才会 改变。 - leader 自身故障,这种常见就是宕机 情况跟上面一样
没有任期到期的概念
5.2 领导人选举
Raft 使用一种心跳机制来触发领导人选举。当服务器程序启动时,他们都是跟随者身份。一个服务器节点继续保持着跟随者状态只要他从领导人或者候选人处接收到有效的 RPCs。领导人周期性的向所有跟随者发送心跳包(即不包含日志项内容的附加条目(AppendEntries) RPCs)来维持自己的权威。如果一个跟随者在一段时间里没有接收到任何消息,也就是选举超时,那么他就会认为系统中没有可用的领导人,并且发起选举以选出新的领导人。
要开始一次选举过程,跟随者先要增加自己的当前任期号并且转换到候选人状态。然后他会并行地向集群中的其他服务器节点发送请求投票的 RPCs 来给自己投票。候选人会继续保持着当前状态直到以下三件事情之一发生:(a) 他自己赢得了这次的选举,(b) 其他的服务器成为领导人,(c) 一段时间之后没有任何一个获胜的人。这些结果会分别的在下面的段落里进行讨论。
当一个候选人从整个集群的大多数服务器节点获得了针对同一个任期号的选票,那么他就赢得了这次选举并成为领导人。每一个服务器最多会对一个任期号投出一张选票,按照先来先服务的原则(注意:5.4 节在投票上增加了一点额外的限制)。要求大多数选票的规则确保了最多只会有一个候选人赢得此次选举(图 3 中的选举安全性)。一旦候选人赢得选举,他就立即成为领导人。然后他会向其他的服务器发送心跳消息来建立自己的权威并且阻止发起新的选举。
在等待投票的时候,候选人可能会从其他的服务器接收到声明它是领导人的附加条目(AppendEntries)RPC。如果这个领导人的任期号(包含在此次的 RPC中)不小于候选人当前的任期号,那么候选人会承认领导人合法并回到跟随者状态。 如果此次 RPC 中的任期号比自己小,那么候选人就会拒绝这次的 RPC 并且继续保持候选人状态。
第三种可能的结果是候选人既没有赢得选举也没有输:如果有多个跟随者同时成为候选人,那么选票可能会被瓜分以至于没有候选人可以赢得大多数人的支持。当这种情况发生的时候,每一个候选人都会超时,然后通过增加当前任期号来开始一轮新的选举。然而,没有其他机制的话,选票可能会被无限的重复瓜分。
Raft 算法使用随机选举超时时间的方法来确保很少会发生选票瓜分的情况,就算发生也能很快的解决。为了阻止选票起初就被瓜分,选举超时时间是从一个固定的区间(例如 150-300 毫秒)随机选择。这样可以把服务器都分散开以至于在大多数情况下只有一个服务器会选举超时;然后他赢得选举并在其他服务器超时之前发送心跳包。同样的机制被用在选票瓜分的情况下。每一个候选人在开始一次选举的时候会重置一个随机的选举超时时间,然后在超时时间内等待投票的结果;这样减少了在新的选举中另外的选票瓜分的可能性。9.3 节展示了这种方案能够快速的选出一个领导人。
领导人选举这个例子,体现了可理解性原则是如何指导我们进行方案设计的。起初我们计划使用一种排名系统:每一个候选人都被赋予一个唯一的排名,供候选人之间竞争时进行选择。如果一个候选人发现另一个候选人拥有更高的排名,那么他就会回到跟随者状态,这样高排名的候选人能够更加容易的赢得下一次选举。但是我们发现这种方法在可用性方面会有一点问题(如果高排名的服务器宕机了,那么低排名的服务器可能会超时并再次进入候选人状态。而且如果这个行为发生得足够快,则可能会导致整个选举过程都被重置掉)。我们针对算法进行了多次调整,但是每次调整之后都会有新的问题。最终我们认为随机重试的方法是更加明显和易于理解的。