

带你认识数仓的增量备份核心设计_华为云开发者社区的技术博客_51CTO博客
source link: https://blog.51cto.com/u_15214399/5999353
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

摘要:增量备份是重要的常规备份策略,正确快速识别增量变化文件的相关信息对增量备份至关重要。
本文分享自华为云社区《 其疾如风,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 获取变化数据文件
增量备份是重要的常规备份策略,正确快速识别增量变化文件的相关信息对增量备份至关重要。作为增量备份的核心设计,事务日志和CBM相关功能为增量备份的快速高效进行提供了有力支撑,本文对CBM的相关设计进行了介绍,并利用CBM的对外接口演示了CBM的相关功能。
Recommend
-
87
1.全量备份 简单的说就是将所有数据库或一个库全部备份。2.增量备份 从上一次全量备份之后到下一次全量备份之前都叫做增量备份。对于mysql,binlong日志就是mysql数据,对b...
-
86
day05一、数据备份与恢复-增量备份和增量恢复a.binlog日志介绍(二进制文件):使用Mysql数据库服务日志文件类型的一种。记录除查询之外的sql命令。默认没启用查询的sql包括:selectdescshow不是查询的命令:insertupdatedeletecreatedropgrantrevokeb.启用binlog...
-
52
增量备份的优点是没有重复数据,备份量不大,时间短。缺点也很明显,需要上次完全备份及完全备份之后所有的增量备份才能恢复,反推恢复,操作较为繁琐。Mysql没有提供增量备份的方法,但是可以通过二进制日志间接实现增量备份。二进制日志对备份的意义如下:1)二...
-
50
1 、线上环境有时候考虑到需要做增量备份数据库,所以写了个简单的脚本 2 、添加自动任务每小时或者更短时间执行就好了 #!/bin/sh #author RuM #date 2015-07-10 BAKDIR=/tmp/mysqlbak BAKDIR_FULL=$BAKDIR/full BAKDIR_ADD=$BAKDIR/add CON...
-
106
之前,我们在 《Postgresql主从异步流复制方案》 一节中,部署了Postgresql的主从异步流复制环境。主从复制的目的是为了实现数据的备份,实现数据的高...
-
37
1.1 备份时间 凌晨2点(02:00:00) 1.2 备份操作 注: 增量备份模式为cumulative(累积模式) 1. 周日:0级增量备份 1. 周一:1级增量备份 1. 周二:1级增量备份 1. 周三:1级增量备份 1. 周四:0级增量备份 1. 周五:1级增量备份 1. 周..
-
17
百花齐放的大数据生态 17,18是计算引擎火热的两年,19年已然是红海了。计算引擎中的王者是Spark,综合指标最好,生态也好,当其他引擎还在ETL,交互查询,流上厮杀时,Spark已经在AI领域越走越远。 对比明显的是,计算...
-
12
点点橙早教APP-带你认识做好UI设计核心问题 | 设计达人 设计达人 爱设计,爱分享。 ...
-
15
摘要: 本文由美团研究员、实时计算负责人鞠大升分享,主要介绍 Flink 助力美团数仓增量生产的应用实践。内容包括: 数仓增量生产 流式数据集成 ...
-
9
摘要:随着信息技术的发展,人类进入大数据时代,数据量呈现爆炸式的增长,金融领域数据承载核心业务,即便遭遇各种软硬件错误或灾难,也需要具备找回和快速恢复业务能力,因此备份恢复能力成为数仓的最关键能力之一。
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK