一旦Leader选定之后,我们将复制所有的操作到每个节点上。
这个是通过心跳包中的Append Entries message结构体来进行实现的
客户端发送一个操作到Leader中(即使客户端发送操作到Follower,操作也会被转发到Leader处理)
Leader将操作附加到自己的Log日志中
基本操作记录
Leader将随后将操作发送给Follower,Follower再回复给Leader,当Leader确认该操作被一半以上设备接受,则提交该操作Log(正式记录),并且回复给客户端操作处理结果
再追加一个+2操作
网络分区
现在假设有5个服务器节点,由于某种原因被切割成两个网络分区.根据之前得的论述,在经过一段选举超时间后,各个区域都会选举出各自的Leader(当然 如果被隔开的是两个Folloer 那么就只能选举出一个新的Leader和两个长期处于选举状态的节点)
假设有不同的客户端分别给不同的区域的Leader发送操作. 设置8的操作会被提交,因为该操作可以被过半的节点接受,而设置3的操作不行。
撤销网络分割后,我们会看到,由于后选举出来的Leader具有更高的TERM计数,所以设置8的操作被更新到每个节点上
A B节点会回滚自己之前的Log,并且更新新的Leader的Log记录