数据复制

概念

数据复制为分区组中节点之间的相互同步的机制。

在数据节点和编目节点中,任何数据增删改操作均会写入日志。SequoiaDB 会首先将日志写入日志缓冲区,然后将其异步写入本地磁盘。

  • 每个数据复制会在两个节点间进行:

    • 源节点: 为包含新数据的节点。主节点并不一定永远是复制的源节点。

    • 目标节点: 为请求进行数据复制的节点。

  • 复制过程中,目标节点选择一个与其最接近的节点,然后向其发送一个复制请求。源节点接到复制请求后,会将目标节点请求的同步点之后的日志记录打包并发送给目标节点,目标节点接收到数据包后会重新处理日志中的所有操作。

    • 节点之间的复制有两个状态:

      • 对等状态(PEER): 当目标节点请求的日志依然存在于源节点的日志缓冲区中,两节点之间为对等状态

      • 远程追赶状态(RemoteCatchup): 当目标节点请求的日志不存在于源节点的日志缓冲区中,但依然存在于源节点的日志文件中,两节点之间为远程追赶状态

    • 如果目标节点请求的日志已经不再存在于源节点的日志文件中,目标节点则进入全量同步状态。

    • 当两节点处于对等状态时,同步请求在源节点可以直接从内存中获取数据,因此目标节点选择复制源节点时,总会尝试选择距离自己当前日志点最近的数据节点,使其所包含的日志尽量坐落在内存中。

全量同步

概念

在分区组内,当一个新的节点加入分区组,或者故障节点重新加入分区组,需要进行数据全量同步,以保障新的节点与现有节点之间数据的一致性。

  • 在进行数据全量同步时有两个节点参与:

    • 源节点: 为包含有效数据的节点。主节点并不一定永远是同步的源节点。任何与主节点处于同步状态的从节点均可作为源节点进行数据同步。(目前只能主节点作为同步源节点)

    • 目标节点: 为新加入组,或重新入组的故障节点。同步时该节点下原有的数据会被废弃。

  1. ![同步](/projects/SequoiaDB-3.2/29ac8e74f1ecf0e043107c0a9b6a087d.jpeg)
  • 全量同步发生时,目标节点会定期向源节点请求数据。源节点将数据打包后作为大数据块发送给目标节点。当目标节点重做该数据块内所有数据后,向源节点请求新的数据块。

  • 为保障源节点在同步时可进行写操作,所有已经被发送给目标节点的数据页如果被更改,其更新会被同步到目标节点,以保障全量同步过程中更新的数据不会损失。

Note:

更多同步日志的内容请参考 同步日志