Ocean
  • 1.6k

Raft——最容易懂的Raft日志复制

当 leader 收到 client 的数据修改指令后,集群进行一系列通信后节点们完成一致的数据修改,这个过程叫做日志复制。

下面完成描述下整个过程。

在选举出一个leader之后,就需要复制所有的变更信息到系统里的所有节点。这些是通过和心跳检测相同的的Append Entries message来完成的。

我们来看下这个过程。一开始, client会向leader发送一个变更。

这个变更会加到 leader的log中(由于这条日志还没被其他任何节点接收,所以它的状态是uncommitted),并会在下一次心跳检测的时候发给 follower。

follower在收到消息之会,都会给 leader 发送响应的 ack消息。

收到大多数的 follower 响应之后, leader 会提交这个entry,并且发送响应给 client。

并在下次心跳的时候,通知 follower 们执行提交操作。

follower 在写入完成后再给 leader 发送响应。 一旦有大多数节点成功写入这条日志,那么Leader节点的这条日志状态就会更新为committed状态,并且值更新为5:

此时集群的状态是完全一致的,这个过程就叫做日志复制(Log Replication)。

此时 Client 又给给 leader 发送消息,要给X 来执行个 加2 的操作。leader 将消息添加到 log 之后,给各个follower 发送心跳。

follower 们收到之后继续返回响应。

leader 收到 ack 之后,确认本次执行进行 commit ,然后给 client 发回响应。并在下次心跳的时候,把写入发给各个 follower。

此时,咱们的系统里 X变成了7,各个节点的数据保持一致。

阅读 437

推荐阅读
飞翔的大象
用户专栏

写博客:一方面,为了找到更多志同道合的人;另一方面,为了更好地学习研究SEO,扩大影响力。 我的博客...

24 人关注
72 篇文章
专栏主页