在一个由 Raft 协议组织的集群中有三类角色:
- Leader(领袖)
- Follower(群众)
- Candidate(候选人)
raft协议原理
下面将看论文时我认为的重要点进行记录。
raft协议遵循的性质
-
Election Safty
- 每一个任期内只能有一个领导人
-
Leader Append-Only
- leader只能追加日志条目,不能重写或者删除日志条目
-
Log Maching
- 如果两个日志条目的index和term都相同,则两个如果日志中,两个条目及它们之前的日志条目也完全相同
-
Leader Completeness
- 如果一条日志被commited过,那么大于该日志条目任期的日志都应该包含这个点
-
State Machine Safety
- 如果一个server将某个特定index的日志条目交由状态机处理了,那么对于其他server,交由状态及处理的log中相同index的日志条目应该相同。
Leader 选举过程:
在极简的思维下,一个最小的 Raft 民主集群需要三个参与者(如下图:A、B、C),这样才可能投出多数票。初始状态 ABC 都是 Follower,然后发起选举这时有三种可能情形发生。下图中前二种都能选出 Leader,第三种则表明本轮投票无效(Split Votes),每方都投给了自己,结果没有任何一方获得多数票。之后每个参与方随机休息一阵(Election Timeout)重新发起投票直到一方获得多数票。这里的关键就是随机 timeout,最先从 timeout 中恢复发起投票的一方向还在 timeout 中的另外两方请求投票,这时它们就只能投给对方了,很快达成一致。
选出 Leader 后,Leader 通过定期向所有 Follower 发送心跳信息维持其统治。若 Follower 一段时间未收到 Leader 的心跳则认为 Leader 可能已经挂了再次发起选主过程。
Leader 节点对一致性的影响:
Raft 协议强依赖 Leader 节点的可用性来确保集群数据的一致性。数据的流向只能从 Leader 节点向 Follower 节点转移。当 Client 向集群 Leader 节点提交数据后,Leader 节点接收到的数据处于未提交状态(Uncommitted),接着 Leader 节点会并发向所有 Follower 节点复制数据并等待接收响应,确保至少集群中超过半数节点已接收到数据后再向 Client 确认数据已接收。一旦向 Client 发出数据接收 Ack 响应后,表明此时数据状态进入已提交(Committed),Leader 节点再向 Follower 节点发通知告知该数据状态已提交。
在这个过程中,主节点可能在任意阶段挂掉,看下 Raft 协议如何针对不同阶段保障数据一致性的。
1. 数据到达 Leader 节点前
这个阶段 Leader 挂掉不影响一致性,不多说。
2. 数据到达 Leader 节点,但未复制到 Follower 节点
这个阶段 Leader 挂掉,数据属于未提交状态,Client 不会收到 Ack 会认为超时失败可安全发起重试。Follower 节点上没有该数据,重新选主后 Client 重试重新提交可成功。原来的 Leader 节点恢复后作为 Follower 加入集群重新从当前任期的新 Leader 处同步数据,强制保持和 Leader 数据一致。
3. 数据到达 Leader 节点,成功复制到 Follower 所有节点,但还未向 Leader 响应接收
这个阶段 Leader 挂掉,虽然数据在 Follower 节点处于未提交状态(Uncommitted)但保持一致,重新选出 Leader 后可完成数据提交,此时 Client 由于不知到底提交成功没有,可重试提交。针对这种情况 Raft 要求 RPC 请求实现幂等性,也就是要实现内部去重机制。
4. 数据到达 Leader 节点,成功复制到 Follower 部分节点,但还未向 Leader 响应接收
这个阶段 Leader 挂掉,数据在 Follower 节点处于未提交状态(Uncommitted)且不一致,Raft 协议要求投票只能投给拥有最新数据的节点。所以拥有最新数据的节点会被选为 Leader 再强制同步数据到 Follower,数据不会丢失并最终一致。
5. 数据到达 Leader 节点,成功复制到 Follower 所有或多数节点,数据在 Leader 处于已提交状态,但在 Follower 处于未提交状态
这个阶段 Leader 挂掉,重新选出新 Leader 后的处理流程和阶段 3 一样。
6. 数据到达 Leader 节点,成功复制到 Follower 所有或多数节点,数据在所有节点都处于已提交状态,但还未响应 Client
这个阶段 Leader 挂掉,Cluster 内部数据其实已经是一致的,Client 重复重试基于幂等策略对一致性无影响。
7. 网络分区导致的脑裂情况,出现双 Leader
网络分区将原先的 Leader 节点和 Follower 节点分隔开,Follower 收不到 Leader 的心跳将发起选举产生新的 Leader。这时就产生了双 Leader,原先的 Leader 独自在一个区,向它提交数据不可能复制到多数节点所以永远提交不成功。向新的 Leader 提交数据可以提交成功,网络恢复后旧的 Leader 发现集群中有更新任期(Term)的新 Leader 则自动降级为 Follower 并从新 Leader 处同步数据达成集群数据一致。
相关推荐
2. 分布式一致性:研究如何在分布式环境中保证数据的一致性,如Raft、Paxos等共识算法。这些算法在分布式数据库、分布式锁服务等场景中至关重要。 3. 分布式计算模型:了解各种分布式计算模型,如MapReduce模型,...
5. **分布式算法**:如选举算法(如Paxos、Raft)、分布式一致性算法(如Gossip协议、Chubby锁服务)等,都是分布式计算中的核心算法。 6. **容错与恢复**:通过备份、冗余和故障检测机制,分布式系统能应对硬件...
此外,书中可能还会讨论Zookeeper与其他分布式一致性解决方案,如Raft算法、Chubby服务等的对比,帮助读者更全面地理解各种技术的优缺点。 总的来说,《从Paxos到Zookeeper》是一本深入了解分布式一致性理论与实践...
书中的内容围绕着两种重要的分布式一致性协议——Paxos和Zookeeper,以及它们在实际应用中的实践展开。 首先,Paxos协议是由Leslie Lamport提出的,它是解决分布式系统中一致性问题的经典算法。Paxos的核心思想是...
《从PAXOS到ZOOKEEPER分布式一致性原理与实践》这本书深入浅出地探讨了分布式系统中的核心问题——一致性。一致性是确保网络中的多个节点对数据状态有共同认知的关键,这对于构建高可用、高性能的分布式应用至关重要...
首先,PAXOS算法是由Leslie Lamport提出的一种分布式一致性协议,它解决了在存在网络延迟、故障和不稳定性的环境中如何达成共识的问题。PAXOS的核心思想是通过一个提案者(Proposer)提出建议,接受者(Acceptor)...
Raft算法是一种广泛使用的分布式一致性算法,可以解决分布式系统中的数据一致性问题。Raft算法的核心思想是使用 leader 选举机制和心跳机制来实现分布式系统中的数据一致性。 结论 本文对分布式关系数据库的概念、...
在计算机科学领域,分布式系统是现代技术的基石,而Raft算法是其中一种被广泛研究和采用的分布式一致性算法。本文将深入探讨Raft算法的核心概念,通过分析麻省理工学院(MIT)的相关工程性作业答案,为读者提供详尽...
1. 分布式一致性算法:例如Paxos、Raft等经典算法的改进,以及新型的一致性模型和协议,用于保证分布式系统中的数据一致性。 2. 分布式计算框架优化:如MapReduce、Spark等框架的性能提升,以及针对特定应用场景的...
在分布式数据库领域,一致性协议如Paxos和Raft是保证事务一致性的关键技术。Paxos算法虽然在理论上有很好的性能,但由于其难以理解,因此在工业界中,Raft算法得到了更广泛的应用。Raft算法以其简单易实现的特点,在...
百度各个业务线上有很多的有状态服务单点,对线上服务都是潜在的隐患,如何低成本改造一直是服务高可用建设中的核心话题。...为了满足百度对一致性协议的需求,我们设计实现了一个工业级的高性能Raft库———braft。
总的来说,这门课程全面覆盖了分布式系统的多个重要方面,包括前沿的云计算技术和边缘计算策略,以及保证分布式一致性的重要算法。通过这样的学习,学生将能够理解和应用这些技术,为未来在IT领域的工作打下坚实的...
良好的复制机制和一致性协议的设计,是保障分布式系统稳定高效运行的关键。在未来的应用和开发中,复制与复制一致性的研究和实践仍然是一个持续发展和不断优化的领域。随着技术的进步,我们可以期待在这一领域将有更...
《raft-grpc-example:探索分布式一致性与云原生实践》 在分布式系统中,一致性算法是确保数据在多个节点间同步的关键技术。本篇将深入剖析`raft-grpc-example`项目,它是一个基于Raft共识算法和gRPC通信框架的示例...
Lynch》再次聚焦于分布式算法,这本书可能包含了许多经典的分布式算法,例如分布式一致性、故障检测和恢复、分布式调度等,这些都是构建可靠分布式系统的关键组件。 至于“hello.txt”,这可能是一个示例文件,...
与Paxos类似,Raft也解决了分布式一致性问题,但在实践中更容易理解和实现。 ZooKeeper是另一个提及的系统,它具有与Paxos相似的特性,如领导者选举和提案编号,但它使用的是名为Zab的自定义协议,而非Paxos。 ...
- **存储节点**:每个存储节点都使用Raft协议来确保数据的一致性和可用性,即使在网络分区或硬件故障的情况下也能保证服务正常运行。 - **MySQL协议兼容**:支持MySQL协议,这意味着现有的应用程序无需修改即可...