Raft怎么选举Leader


Raft算法谁做领导者的思考

选择Leader是一件比较复杂的事情,和现实生活中的投票选举一样,比较复杂。

首先,我们假设有3个节点,第一个过程是自荐,自己推荐自己为Leader。怎么自推呢? 现实生活中,是大家独立思考,想一想自己想不想当领导者(Leader)。思考是需要时间的,在Raft协议中,每个节点会随机分配一个随机的选举超时时间(election timeout),这里重点是随机,每个节点有一个随机思考时间。

现在假设节点a思考时间168ms , 节点b思考210ms , 节点c思考200ms ,由于a的思考时间最短,所以它会最先成为候选者(Candidate),并向另外两个节点发起投票请求,希望它们能选举自己为Leader,这个过程如下图:

raft拉票做Leader


Raft领导者发起投票请求

另外两个节点收到请求后,假设将它们的投票返回给候选者(Candidate)节点a,节点a由于得到了大多数节点的投票,就会从Candidate变为Leader,如下图所示,这个过程就叫做Leader选举(Leader Election)。

raft领导者

接下来,这个分布式系统所有的改变都要先经过节点a,即Leader节点。

分布式集群的所有更改都通过Leader,这也是为了保证一致性,如果数据更改可以通过多个节点,那么到底那个节点的数据是正确的呢?所以,数据更改仅通过一个Leader非常重要。