开发者学堂课程【精通 Spring Cloud Alibaba:Raft 协议选举底层实现原理】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/634/detail/10106
Raft 协议选举底层实现原理
内容介绍
一、搭建 nacos 集群演示事例
二、选举的过程
一、搭建 nacos 集群演示事例
在昨天搭建 nacos 集群时有没有发现什么问题?
最开始都是跟随者,突然变为了领导者。
出现问题是集群状态,但查不到
问题出现原因抽了一下网线,IP 地址改了。
现在还都是 follower 节点
刷新一次后出现一个 leader 节点
二、选举的过程
1.演示事例讲解
在早期时三个 nacos 节点都为跟随者,在 zookeeper 中,我们可以通过比较 myid 选出领导者,而在raft中是随机给每个节点产生选举超时时间,如果一旦超时就是等待,角色状态一定是跟随者状态,哪个节点最快醒来,假设三个节点分为 nacos 跟随者超时时间为100ms,nacos 跟随者超时时间为150ms,nacos 跟随者超时时间为200ms,一定是第一个超时时间为100ms 的最快醒来。超时时间过后,可能由跟随者变为竞选者,那么第一个 nacos 节点变为竞选者,只要满足跟随者投票超过半数,那么竞选者就有可能变为领导者。
如图,Leader 的超时时间是最短的。不要看心跳。
等待超时时间随机数是100ms-300ms,它可能随机生成一个值可能最大可能最小。
2.默认情况下选举的过程
(1) 默认的情况下每个节点都是为跟随者角色
(2) 每个节点随机生成一个选举的超时时间,例如大概是100-300ms,在这个超时时间内必须要等待。
(3) 超时时间过后,当前节点的状态可能由跟随者变为竞选者角色,会给其他的节点发出选举的投票的通知,只要该竞选者有超过半数以上即可选为领导角色。
核心的设计原理:其实就是靠的谁超时时问最短谁就有非常大的概率为领导角色。