闲聊分布式共识算法raft(2)

raft 算法在发生网络分区的时候是怎么保证一致性的

     本文主要简单聊聊分布式共识算法raft在发生网络分区的时候如何保持最终一致性。如果有对raft基础不清楚,或者对日志复制和首领选举有疑问可以参看之前的文章.raft
共识算法(1)

    首先我们看一个状态就是没有网络分区的情况。无网络分区的情况
图中我们可以观察到的情况就是绿色的client和蓝色的服务端节点之间网络是互通的。接下来我们来添加一个分区来使得他们有网络隔离存在。在这里插入图片描述
黑色的虚线代表网络隔离,这样节点AB和CDE三个节点就不在同一分区了,然后我们可以看到黑色圈的B依然是leader。上面的三个节点是没有leader的。上面的CDE经过一次首领选举以后会变成下图的样子。在这里插入图片描述在这里插入图片描述
注意看上图节点C也是leader了,但是节点C的term 是2 也就是说任期提升了一个任期。由于出现网络分区导致我们现在存在不同的两个leader(这里要注意这两个leader是不一样的任期,也就是term不一样)。在这里插入图片描述

然后我们在AB的网络分区中增加一个client来尝试改变这个节点B的值(对于这个增加的client可能在真实场景中本来就有甚至有很多个)。在这里插入图片描述
下图中我们可以看到AB的节点网络分区中尝试更新节点的值为3,但是呢这个黑色的框中日志是红色的。代表着这个 SET 3这条日志还没有提交,然后我们的节点值也没有发生变化。为什么呢,因为我们看到的是有5个节点,对于 SET 3 这条日志是没有办法根据日志复制原则,复制到一半以上的节点的,所以这条日志无法提交,这样也就无法进行提交和更改。也就是说raft在发生网络分区的时候,我们是没有办法在半数以下的节点的网络分区中进行更改的在这里插入图片描述
对于上图中CDE所在的网络分区中,leader的节点C是可以把日志复制到3个节点的(也就是半数以上个节点),这样我们可以看到,对于节点C的更改是成功的。那么我们这个时候如果修复了网络分区会怎样呢。在这里插入图片描述
修复网络分区以后我们发现,原先节点AB的任期是1,修复分区以后节点任期增加到2了。而且上一步的日志 SET 3 没有了,这就说明呀,所有未提交的日志,遇到了更高任期的leader的时候都会被回滚掉。还有当接收到任期比自己高的leader的心跳的时候,是复制了leader的节点日志的。而且把自己任期追上了leader的任期。这样我们的日志在整个的集群中都是一致的。

    以上就是我们的raft算法在发生网络分区的时候如何保持最终一致性的过程了。
——————————————————————————————————————
参考文献:数据的秘密
生活和梦想同样重要。我是小码农,谢谢您的浏览!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值