当前位置:   article > 正文

Raft协议--网络分区--07_raft 网络分区

raft 网络分区

网络分区

在发生网络分区的时候,Raft一样能保持一致性。如下图所示,假设我们的集群由5个节点组成,且节点B是Leader节点:

在这里插入图片描述

我们假设发生了网络分区:节点A和B在一个网络分区,节点C、D和E在另一个网络分区

1. C,D,E,重新选举,大多数是2,leader是C
2. B还是leader,没有发生选举,原先的总数的5,大多数是3,而现在只有A节点通信,通信的节点数小于3,所有这个分区所有的日志状态都是uncomitted
  • 1
  • 2

,如下图所示,且节点B和节点C分别是两个网络分区中的Leader节点

在这里插入图片描述

我们假设还有一个客户端,并且往节点B上发送了一个SET 3,由于网络分区的原因,这个值不能被另一个网络分区中的Leader即节点C拿到,它最多只能被两个节点(节点B和C)感知到,所以它的状态是uncomitted(红色)

在这里插入图片描述

另一个客户端往节点C上发送了一个SET 8,3个节点(C,D,E)已经符合大多数节点的条件。所以,这个值的状态就是committed

在这里插入图片描述

接下来,我们假设网络恢复正常,如下图所示。节点B能感知到C节点这个Leader的存在,它就会从Leader状态退回到Follower状态,并且节点A和B会回滚之前没有提交的日志(SET 3产生的uncommitted日志)。同时,节点A和B会从新的Leader节点即C节点获取最新的日志(SET 8产生的日志),从而将它们的值更新为8。如此以来,整个集群的5个节点数据完全一致了

在这里插入图片描述

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号