跳转至

checksum增量数据同步

checksum增量数据同步说明

什么是基于checksum的数据增量同步

通过对比primary与mirror节点上数据文件不同块(block)的checksum值,来决定是否需要同步数据

  • 数据块(block)的checksum值相同,不同步

  • 数据块(block)的checkusm值不同,同步到mirror节点

为什么引入checksum增量同步

在SeaboxMPP的高可用集群环境中,如果mirror节点坏掉,为了确保在mirror节点恢复后数据不丢失并能够保证一致性,primary节点会持续保留WAL数据;如果mirror节点由于网络原因或者机器故障等长时间无法修复,导致primary节点会保留大量WAL日志,进而占用大量磁盘空间.

实现checksum增量同步后,有以下优点:

  • 在mirror节点异常的情况下primary节点不必持续保留WAL日志,节省了磁盘空间

  • 通过对比两端数据文件不同块(block)的checksum值来决定是否需要同步,同样能够使主备节点达到一致性状态

  • 在某些场景下(如:文件数相同,增量数据比较大的情况下),基于checksum的增量同步性能可能要优于原始的增量数据同步

实现原理

  • checksum存取

  • 存储

    • 要生成checksum需要打开"data_checksums"开关,集群MPP环境默认是打开的

    • 数据块的checksum是存储在page的头部(PageHeader->pd_checksum)里, 默认情况下要读取checksum值需要解析数据文件的每个page,IO开销会非常大

    • 为了提高checksum读取效率,减少IO开销,引入了bcs文件(block checksum),只存储数据block的checksum信息

      -rw------- 1 seabox seabox  32768 Aug  3 10:40 6317
      -rw------- 1 seabox seabox  32768 Aug  3 10:40 6317_bcs
      -rw------- 1 seabox seabox  32768 Aug  3 10:40 6318
      -rw------- 1 seabox seabox  32768 Aug  3 10:40 6318_bcs
      -rw------- 1 seabox seabox  32768 Aug  3 10:40 7056
      -rw------- 1 seabox seabox  32768 Aug  3 10:40 7056_bcs
      
  • 读取

    • 直接从bcs文件中获取每个block的checksum信息
  • 遍历数据文件

通过遍历数据文件来确定哪些文件或文件的哪些块需要做同步,规则如下

  • source > target : COPY_TAIL

  • source < target : TRUNCATE

  • target不存在该文件: 全COPY 到target

  • source不存在该文件: 删除target文件

  • 相同部分:根据checksum判断是否同步,读取bcs文件里的checksum信息,对比源与目标两端的不同block的checksum是否相同,不同的话记录对应块信息

image

  • 数据传输

  • 根据记录的块信息,将源端对应的数据块同步到目标端

使用方式&使用限制

  • 在mirror节点调用sd_rewind命令,如下:
  SDOPTIONS="-c sd_role=utility" $SDHOME/bin/sd_rewind --checksum --write-recovery-conf --slot="internal_wal_replication_slot_8" --source-server="host=cf-node9 port=15702 dbname=template1 application_name=__sd_rewind__" --target-sddata=/home/seabox/seabox-data-directory/executordd/mirror/0/2 --target-sc-dbid=8

上面命令中使用的参数含义及说明为:

checksum
代表做checksum增量数据同步
source-server
与源端建立连接的相关信息
target-sddata
目标端数据目录
write-recovery-conf
表示做完数据同步后须更新目标端的seaboxsql.auto.conf文件
target-sc-dbid
目标端节点id
slot
复制槽名称,用于修复后能够与primary建立流复制
  • 使用限制

  • 增量同步前须停止mirror节点服务, 其他无任何限制

适用场景

其实checksum增量同步没有任何场景限制, 主要看是否是最优选择, 以下场景仅供参考:

  • primary节点上的复制槽slot删除了,使用传统增量同步无法保证数据一致性, 此时必须选择checksum增量同步

  • 文件数量没有变化,增量数据比较多,wal比较大的情况下,建议优先使用checksum增量同步