raft算法mysql主从复制_Etcd raft算法实现原理分析

原标题:Etcd raft算法实现原理分析 Raft是一种为了管理日志的一致性算法,Raft算法出现之前主要用的是Paxos算法,但是由于Paxos算法的复杂性太高,理解难度较大,Raft在这样一个背景下诞生。Raft算法又是Etcd的核心模块,因此本文主要研究Etcd中的Raft算法,对曾经工作使用到的关键技术做一个研究和总结,主要包括算法理论和源码分析两部分。◆◆1. Raft算法理论◆◆说到...
摘要由CSDN通过智能技术生成

原标题:Etcd raft算法实现原理分析

ebf865117875863bd44ea0f4d60fa7f7.gif

Raft是一种为了管理日志的一致性算法,Raft算法出现之前主要用的是Paxos算法,但是由于Paxos算法的复杂性太高,理解难度较大,Raft在这样一个背景下诞生。Raft算法又是Etcd的核心模块,因此本文主要研究Etcd中的Raft算法,对曾经工作使用到的关键技术做一个研究和总结,主要包括算法理论和源码分析两部分。

◆◆

1. Raft算法理论

◆◆

说到一致性算法,就必须说一下状态复制机。状态复制机是分布式集群中一种十分有用的模型和思想,简单来说就是相同的一组输入,执行相同的指令,会得到相同的输出。在实际应用中复制状态机也很常见,比如mysql的主从配置,master节点把执行过的sql语句保存到binlog日志中,slave监听到master的binlog日志更新,从最后一次复制的log_index开始把master的binlog日志复制到自己的日志中,然后执行,这样slave中的数据记录就和master数据保持一致了。Raft算法实现状态一致的方法和mysql是一样的,即先写日志,然后提交执行结果。在分析raft源码实现之前我们不妨先看看Raft算法的设计思想。Raft的实现方式可以有很多种,但是思路是一样的,最多可能会在一些地方加一些优化。通过查阅资料,笔者发现Raft算法有两篇比较经典的论文,一篇是《In search of an Understand-able Consensus Algorithm》,另一篇是《consensus: bridging theory and practice》。第一篇是一篇小论文,只是简单描述了算法大致设计思想,作为对raft算法的初步理解足够了。第二篇篇幅也比较长,大概两百多页,对raft算法实现的各种实现细节都描述到了强烈推荐有时间的读者可以研究一下。接下来我们看看《In search of an Understandable Consensus Algorithm》论文中raft算法的设计思路,主要从主要概念、节点状态、领导人选举、添加日志这四个部分进行介绍。

1.1 主要概念

要实现集群数据的一致性,节点在进行通信的时候必定需要遵守特定规则进行数据校验,而这些规则具体都是通过某些具有特定含义的属性来实现的。为了让对Raft 算法比较陌生的读者对算法的关键概念有一个初步认识,作者整理了算法中涉及的概念如下所示:

7c4d274962326e5ffc71445157610c74.png

84b612e481bfedecdd96599186bead63.png

1.2 节点状态

Raft 算法比较简单,其中一个原因是节点的状态少,一共只有三种角色,大大降低了角色间转换的复杂性。这三种角色分别是Leader 、Follower 和Candidate (其实大部分时间只有Leader 和Follower 角色,因为Candidate 只是选举的一个过渡角色),每种角色都有自己的运行规则。角色之间可以在一定条件下进行角色转换,状态转换如下图所示:

52d1191fb1a39a34eed1614ba84170bc.png

l Follower:集群启动时,每个Raft 节点初始以Follower的角色运行。他们各自维护了一个超时字段(ElectionTick属性),如果在超时时间段内Follower都没有收到来自Leader的消息,Follower就知道这个时候集群中没有Leader节点,这时它会把自己的角色转换为Candidate,并发起领导人选举。

l Candidate:处于Candidate状态的节点会发起选举的操作的操

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值