浅入深出ETCD之【raft原理】

前言

此次咱们来讲说,有关于etcd原理的一些事情。以前咱们已经了解到了etcd是一个分布式的k-v存储,那么它到底是如何保证数据是如何复制到每一个节点上面去的呢?又是如何保证在网络分区的状况下能正常工做下去?raft协议究竟是什么?带着这些问题咱们继续往下看。服务器

raft选举策略

咱们知道etcd使用raft协议来保证整个分布式的节点网络能正常的运转而且能正确的将数据复制到每一个节点上面去。那么什么是raft协议嘞?网络

首先咱们有这样一个背景:raft是想维护整一个网络,其中有一个领导人,这个领导人负责将收到的信息同步给网络中的其余全部节点,从而保证整个网络数据一致。分布式

若是你有必定的英文基础,我建议直接查看下面这个网站,它用动画很是清楚的描述了raft选举的整个过程:http://thesecretlivesofdata.com/raft/动画

这个其实已经说明的超级棒了,若是你还看不懂,我下面会用最简单的几个要点来进行最简单的说明。网站

大多数理论

首先说明一个理论,叫作大多数理论,很简单,举个栗子:日志

  • 有10我的,若是你将苹果给其中的6我的(大多数),那么你随机选择5我的,必定有一我的会有苹果。

在etcd中的应用:blog

  • 选举中只要有大多数(超过半数的人给你投票)你确定就是票数最多的了,不可能有人比你更多。
  • 只须要将日志复制给大多数的节点,那么只要有一半的节点正常工做就能保证数据最新

选举状态

下面是一些选举过程当中节点的状态
leader 表示选举最终产生的领导人
candidate 候选状态,表示当前正在参与选举
follower 表示选举最终本身不是领导人,那本身就是从属节点get

选举过程与要点

  1. 全部节点一开始都是follower状态
  2. 当节点处于follower状态时,每一个节点随机通过一段时间,若是没有收到leader的消息就会进入candidate状态(证实当前没有leader节点须要从新进行选举),若是收到信息就会继续保持follower状态
  3. 当节点处于candidate就会要求别人给本身投票,收到大多数的节点的投票那就转变为leader状态,不然要么是别的节点成为了leader,要么就是由于特殊状况致使此次选举失败从新进行选举
  4. 每次选举举办的时候有一个term,在每个term中,每一个节点只能投票一次
  5. 投票的时候必须投给当前数据至少和本身同样的节点,而且term大的优先

日志复制规则

etcd是经过日志复制来实现数据同步的

这个图网上也不少,说明的是日志复制的规则
每一个节点都有一份本身的日志,有的节点多,有的节点少,日志最多的确定是leader。
上图还有几个要点,我看别人没提到,我就提一下:同步

  1. 颜色表明term
  2. 第四行表示的这个节点,第一term下复制了两个日志就异常挂掉了
  3. 最终只有第三行这个follower和第一行的leader保持了同步

异常状况

raft之因此厉害由于即便出现一些特殊状况,整个网络在必定的时间以后也能自动恢复并正常工做。源码

一个节点的异常

首先最多见的状况就是一个节点出现异常,有多是这个节点的服务器挂了,或者别的什么缘由。

  • 若是出现问题的这个节点是follower,那么没有关系,整个网络依旧能正常运行,当这个节点再次加入网络的时候也只须要同步后面的数据便可。
  • 若是出现问题的是leader,有一点麻烦,由于网络中没有leader节点了,那么就会从新进行选举,从新找一个leader,当这个异常节点恢复以后发现当前网络中有leader了,并且term还比本身大,那么本身就退位称为follower。

网络分区

还有一种异常状况是因为网络致使的,网络出现异常,致使节点之间的通讯存在异常,一部分节点与另外一部分之间没有办法访问了。以下图所示:

上面三个follower没有办法与下面的节点进行通讯。

  • 当客户端再次请求leader发送数据的时候,leader发现没有办法将数据同步给给大多数节点,它只能给本身和旁边的一个,此时leader没有办法给客户端反馈。
  • 上面三个节点因为收不到leader的消息,那么会认为网络中没有leader存在,会从新进行选举操做,由于当前上面有三个节点存在(只要有超过半数的节点参与选举就行),因此能够从新选举成功,选出新的leader告诉客户端,客户端就会从新发送数据到新的leader。
  • 当网络恢复以后又会找到最新的leader从而将数据同步至最新的状态。

总结

总的来讲,只要整个网络中存在大多数节点正常运行,那么etcd就是可用的,而且可以保证数据正确。当网络恢复以后也能将数据调整到最新的状态。 raft强大的地方在于它能自动的进行状态的变化,自动进行选举,而且选举遵循必定的策略,进而保证整个网络的正常运转。同时保证数据的一致性。 了解etcd的这个原理有助于咱们后续的使用以及源码的阅读。

相关文章
相关标签/搜索