前言
分布式系统设计中,在极大提高可用性、容错性的同时,带来了一致性问题(CAP理论),Raft协议就是解决分布式中的一致性问题。最近研究了 Raft
协议,谈谈自己对 Raft 协议的理解。希望这篇文章能够帮助大家理解。
raft协议是什么?
Raft协议是一种分布式一致性算法(共识算法),共识就是多个节点对某一个事件达成一致的算法,即使出现部分节点故障,网络延时等情况,也不影响各节点,进而提高系统的整体可用性。Raft是使用较为广泛的分布式协议,我们熟悉的etcd注册中心就采用了这个算法;
Raft算法将分布式一致性分解为多个子问题,包括Leader选举(Leader election)、日志复制(Log replication)、安全性(Safety)、日志压缩(Log compaction)等。raft将系统中的角色分为领导者(Leader)、跟从者(Follower)和候选者(Candidate)。
- Leader:接受客户端请求,并向Follower同步请求日志,当日志同步到大多数节点上后高速Follower提交日志。
- Follower:接受并持久化Leader同步的日志,在Leader告知日志可以提交后,提交日志。当Leader出现故障时,主动推荐自己为候选人。
- Candidate:Leader选举过程中的临时角色。向其他节点发送请求投票信息,如果获得大多数选票,则晋升为Leader。
Raft要求系统在任意时刻最多只有一个Leader,正常工作期间只有Leader和Follow