写点什么

带你认识数仓的增量备份核心设计

  • 2023-01-10
    中国香港
  • 本文字数:2302 字

    阅读完需:约 8 分钟

带你认识数仓的增量备份核心设计

本文分享自华为云社区《其疾如风,GaussDB(DWS)增量备份核心设计》,作者: 我的橘子呢 。

1.认识增量备份


GaussDB(DWS)数仓的备份恢复工具 Roach 支持集群级增量备份。全量备份会将源数据完整备份,而增量备份仅将上次备份后所作的更改进行备份,这里的上次备份可以使全量备份,也可以是全量备份后的增量备份。需要注意的是,增量备份的基础始终是全量备份,如果一次全量备份之后进行了全量恢复,则不能再基于该全量备份进行增量备份,必须重新进行全量备份然后基于新的全量备份进行增量备份。增量备份分为两种:累积增量备份和差分增量备份。


累积增量备份:如果一次全量备份后的多次增量备份,指定的 prior-backup-key 始终为全量备份的 backup-key,即所有的增量备份都是基于全量备份来进行的,那么这些增量备份就是累积增量备份,累积增量备份均是基于最近一次全量备份进行的,如图 1 所示。


图 1 累积增量备份示意图


差分增量备份:如果一次全量备份后的多次增量备份,指定的 prior-backup-key 均为上一次备份(可能是全量备份也可能增量备份)的 backup-key,即此次备份是基于上一次备份集来进行的,那么这些增量备份就是差分增量备份,差分增量备份均是基于最近一次备份进行的,如图 2 所示。


图 2 差分增量备份示意图

2.增量备份之 CBM 设计


增量备份只需要备份上一备份节点到当前时间发生变化的数据文件,为了实现备份数据的完整性与一致性,正确识别并备份增量数据文件是至关重要的,作为增量备份的核心设计,Gauss 数据库内核的事务日志功能与 cbm 设计可以帮助 Roach 工具快速准确识别增量期间数据文件的变换信息,为快速准确完成增量备份提供了有力保障。

(1)WAL 与事务日志


为了保证数据的一致性和完整性,在对数据进行相关操作之前都会将具体的操作记录下来,持久化到可靠存储中,然后再进行具体的数据操作,这就是所谓的 WAL(Write Ahead Logging),记录的相关操作称为 XLOG 日志,每一条日志记录都由 LSN 进行唯一标识。这样做的好处是事物的记录被提前记录并保存起来,在因一些外部原因(比如断电、操作系统失败等)导致操作失败后,我们可以通过保存的事物日志将这些操作重新执行一遍,保证数据不会丢失。相关操作如图 3 所示。


图 3 WAL 操作示意图

(2)Checkpoint 操作


当系统运行时间较长的时候,由于操作较多,日志文件的数量也较多。如果每次利用日志进行恢复操作都会耗费大量的时间,为了节约时间同时减少不必要的恢复操作,引入了 checkpoint 的概念。checkpoint 表示在此操作之前,相关数据已经被保存到永久存储中,即使系统故障,这部分数据也不会丢失,因此恢复的时候只要从 checkpoint 操作之后根据日志执行恢复操作就可以了。checkpoint 本身也是一条 xlog 记录,该记录包含了 redo 点的位置,因此,每次恢复数据时,先从 xloh 记录里找到最近的一次 checkpoint 记录,并根据该记录找到相应的 redo 点位置,这就是执行本次恢复的起始点位置。如图 4 所示,checkpoint 操作记录了 redo 点的位置。


图 4 Checkpoint 操作示意图

(3)CBM 设计


基于上述功能,由于数据的所有变化都被记录在了 xlog 中,Gauss 数据库内核通过增加常驻的 CBM writer 线程,持续不断地对新增的 xlog 进行解析,识别并记录哪些数据数据页面被修改。CBM 记录的生成过程如图 5 所示。


图 5 CBM 生成示意图


CBM writer 线程的工作流程为:


  • 进程启动时即开启 CBM writer 功能


在 startup 线程刚启动时,其根据已经解析出来的 CBM 文件,来决定 CBM writer 开始解析的起始 LSN 位置。每次执行到 checkpoint 末尾是,会设置 CBM writer 线程的 latch。CBM writer 线程等待 latch 被设置,然后进行一轮日志解析。


  • 通过动态 reload GUC 参数,开启 CBM writer 功能


由于是动态开启的 CBM writer 功能,因此 startup 线程没有初始化 CBM 解析的起始位置。打开 enable_cbm_writer 开关的同时,会将 CBM 强制初始化的标志置为 true。当 CBM writer 线程启动之后,其第一次解析中,会强制初始化获得解析的起始 lsn。

(4)CBM 文件的命名格式


CBM 文件保存在 data 目录的 pg_cbm 文件夹下,命名方式为:pg_xlog_seqnum_startlsn_endlsn.cbm。如图 6 所示。

图 6 CBM 文件格式


  • seqnum 文件序号表示这是第几个 cbm 文件,当一个 cbm 文件的大小超过 100M 时,将会切换到下一个 cbm 文件,并将 seqnum 加 1。

  • startlsn 为本 cbm 文件内容对应 xlog 记录的起始 lsn;

  • endlsn 为本 cbm 文件切换时最后一次解析的截止 lsn,若一个 cbm 文件还没有切换,那么 endlsn 为 0。

(5)CBM 对外接口函数


a. pg_cbm_tracked_location


  • 说明:用于查询 cbm 已经解析到的 lsn 位置

  • 入参:无

  • 返回值:cbm 已经解析到的 lsn 位置


b. pg_cbm_get_merged_file


  • 说明:用于将指定 lsn 范围之内的 cbm 文件合并成一个 cbm 文件

  • 入参:startlsn,指定的起始 lsn;endlsn,指定的结束 lsn

  • 返回值:合并完的 cbm 文件名


c. pg_cbm_get_changed_block


  • 说明:用于将指定 lsn 范围之内的 cbm 文件合并一个表,并返回表的各行记录

  • 入参:startlsn,指定的起始 lsn;endlsn,指定的结束 lsn

  • 返回值:合并完的表的记录,表的结构如下



d. pg_cbm_recycle_file


  • 说明:删除不再使用的 cbm 文件

  • 入参:lsn,删除该 lsn 以前的 cbm 文件

  • 返回值:删除截止的 lsn

3.CBM 使用实践


(1)找到当前 xlog 的 LSN 位置,并将 cbm 的解析位置设置为该 LSN 的位置。


图 7 设置 CBM 解析起始位置


(2)插入数据后获取当前 cbm 解析位置。



图 8 设置 CBM 解析终止位置


(3)根据插入后数据前后的 CBM 解析位置,获取变化的数据文件,获取相关信息。



图 9 获取变化数据文件

4.总结


增量备份是重要的常规备份策略,正确快速识别增量变化文件的相关信息对增量备份至关重要。作为增量备份的核心设计,事务日志和 CBM 相关功能为增量备份的快速高效进行提供了有力支撑,本文对 CBM 的相关设计进行了介绍,并利用 CBM 的对外接口演示了 CBM 的相关功能。


点击关注,第一时间了解华为云新鲜技术~

发布于: 刚刚阅读数: 3
用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
带你认识数仓的增量备份核心设计_数据库_华为云开发者联盟_InfoQ写作社区