Raft 协议是分布式系统中实现一致性的主流算法(如你项目中可能涉及的注册中心、分布式锁场景),其选主机制(Leader Election)通过 “任期制 + 心跳检测 + 投票协商” 实现,确保在集群节点故障时能快速选出唯一 Leader,保障系统可用性。
每个选举周期称为一个任期(类似 “选举轮次”),用连续整数标识(从 1 开始递增)。任期内最多有 1 个 Leader,若选举失败(如票数平分),则进入下一个任期重新选举。
Candidate 递增自身任期(如从 Term=2→3),向集群所有节点发送投票请求,包含:
节点仅在满足以下条件时给 Candidate 投票:
Candidate 收到多数节点(n/2+1,n 为集群节点数) 的投票后,立即成为 Leader,向所有节点发送心跳(间隔通常为心跳超时的 1/10,如 10ms),维持 Leader 地位。
Follower 的心跳超时时间是随机值(如 150-300ms),避免多个节点同时因超时转换为 Candidate,导致投票分散(如 3 节点集群中各获 1 票)。若出现这种情况,所有 Candidate 会在超时后递增任期重新选举,直到某一节点因随机超时更早发起投票,获得多数票。
投票规则中 “候选者日志≥自身日志” 的限制,确保新 Leader 拥有集群中最完整的日志,避免数据丢失。例如:若节点 A 日志为 [Term2, Index5],节点 B 日志为 [Term2, Index3],则 A 发起选举时,B 会投票给 A,而 B 发起时 A 会拒绝 —— 这类似你项目中 “资损防控需以最新数据为准” 的设计。
若节点收到任期更高的请求(如 Follower 收到 Term=4 的请求,自身 Term=3),会立即更新自身任期为 4,并转为 Follower,确保集群任期一致,避免旧 Leader 干扰。
Raft 选主机制的核心是 “简单易懂 + 安全性优先”,通过任期制和多数票规则,在 3 节点集群中允许 1 个节点故障,5 节点集群允许 2 个节点故障,兼顾可用性与数据一致性,是分布式系统高可用设计的基础。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。