当 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,各个节点的数据保持一致。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。