整个主从数据同步的过程,我们称之为二阶段提交。
总结出七步:
(1) 由于主从机制[就算Client连接从机,向从机写数据 从机也会把数据交给主机,让主机一并把数据发送给所有从机。从而保证主从一致],所以无论Client客户端
向主机还是从机传输数据都相当于向主机进行传输数据
(2)主节点会先把数据写到自己的数据文件当中,并给自己返回一个ACK
(3)Leader会把数据发送给所有Follower
(4)所有Follower从节点会把接收到Leader传输的数据写到本地的数据文件中(第一阶段提交)
此时如果一个Client客户端连接到Follower这个从节点,但是无法读取到对应传输的数据,因为数据并没有保存到内存中 !
(5) 所有Follower从节点在完成(4)之后,都进行返回一个ACK给Leader主节点
(6)Leader如果收到半数以上的ACK后,那么就向所有的Follower进行发送Commit。
对于这个半数以上我们进行解释:
首先这个半数以上,是针对于从节点数的半数以上。
其次为什么要执行(2)这个步骤,主节点也返回一个ACK给自己的呢?
假设说从节点有偶数个,如果一个从节点在将数据写到本地数据文件中时发生故障,那么就失败了,该节点就不会返回ACK了。只有一个节点返回一个ACk:你怎
么确定在半数以上?所以为了保证即使在一个从节点出现故障时,其他节点仍然保证与主机数据同步,我们就必须执行(2)来上一层保险
(7)当Follower从节点接收到Leader发送的Commit后,把数据文件中的数据写到内存中。