摘要:随着信息技术的发展,人类进入大数据时代,数据量呈现爆炸式的增长,金融领域数据承载核心业务,即便遭遇各种软硬件错误或灾难,也需要具备找回和快速恢复业务能力,因此备份恢复能力成为数仓的最关键能力之一。
本文分享自华为云社区《不动如山,GaussDB(DWS)业务容错利器——物理细粒度备份恢复技术》,原文作者:世纪末的魔术师 。
1. 技术概述
1.1 价值及主要内容
随着信息技术的发展,人类进入大数据时代,数据量呈现爆炸式的增长,金融领域数据承载核心业务,即便遭遇各种软硬件错误或灾难,也需要具备找回和快速恢复业务能力,因此备份恢复能力成为数仓的最关键能力之一。GaussDB(DWS)支持了物理细粒度备份恢复能力。用户可自定义备份整集群或部分数据库元素,并进行灵活的单、多表恢复,有效缩减备份数据所需的时间窗口和存储空间,同时聚焦于用户业务场景的关键表的备份恢复。
物理细粒度备份恢复目前主要支持的2大场景:
一、从细粒度化的集群级全量备份集中恢复单/多表;
二、备份指定的schema全量数据,并可从该备份集中恢复单/多表;
2. 技术方案原理
2.1 NBU备份恢复方案
Roach为GaussDB(DWS) 数据库备份工具,支持多种备份恢复类型及方案。对于Roach通用架构,每个集群节点都有Roach agent进程负责本节点的数据备份。第一个节点额外有一个Roach master进程负责分布式集群备份。Roach提供非侵入式的备份到NBU方案,物理细粒度备份恢复同样基于此框架,因此首先对此进行介绍说明。Roach client插件部署至NBU Media Server机器中,用于接收Roach agent发送的备份数据,并转发至NBU 服务器中。
图1 NBU集群部署模式
图2 NBU非侵入式部署方案
如上图所示(3节点GaussDB(DWS)集群为例),NBU备份数据流向为:
- Roach agent将压缩数据向Roach client分片传输;
- Roach agent调用NBU客户端XBSA接口,请求NBU备份;
- NBU client将此请求转发至NBU Master Server;
- NBU master服务器负责分配存储到哪个NBU media服务器;
- Roach client将调用xbsa接口将备份数据传输至NBU Media Server;
- Media Server将备份数据存储至挂载的磁带机或磁盘上
2.2 细粒度元信息生成方案
为了能够从备份集中细粒度地恢复单表或多表,首先需要获取所有数据库下schema、表的元信息DDL,将其持久化并备份到介质。需要说明的是,由于元信息DDL导出时间较长,设计中采用DDL导出备份与数据备份并行的方式,以提升性能:Roach获取DDL的设计思路如下所示:
图3 物理细粒度备份恢复获取元数据方案
备份过程中,为支持细粒度恢复,通过表名映射到元信息,进而找到所有关联表的物理文件、事务信息,需要获取并备份一个映射map,map按数据库元素层次逐层获取,主要包括:
Agent --> Instance –> Database –> Schema ->Table –> Related Relations
实际的执行中,将为每个物理节点、实例,并行进行映射元信息查询和存储,设计逻辑如下:
图4 细粒度备份恢复文件映射MAP获取
2.3 数据备份生产-消费者模型
GaussDB(DWS)的细粒度化全量备份实现于Roach备份工具。Roach集群级全量备份,通过与GaussDB(DWS) Kernel交互,在pg_start_backup()执行后依次备份行存数据文件、WAL文件,执行pg_stop_backup()后备份列存数据文件。这一系列备份流程在完整的事务保证下,确保数据落磁盘,并被有序地备份到NBU管理的介质路径下。
细粒度数据备份的过程,首先依靠2.2中从系统表查询得到的MAP整理待备份物理文件列表,具体到每个库、schema、table,逐层递进,最终得到一张表所依赖的所有关联文件最小集合,创建的备份块最小逻辑粒度为schema,同一个schema下的表,会连续地向同一个逻辑块写,物理上按segment配置(通常为4G)进行切割。具体的备份数据写入介质,依靠如下生产-消费者模型,实例下的数据文件被数据写线程(生产者)按块读取,压缩后写入buffer中,发送数据线程(消费者)则从buffer中获取数据块,调用XBSA标准的API接口,流式地将数据写入到介质层,由NBU Master分配Media Server,最终落盘;数据追加写的过程中,若超过段文件segement size上限,则会切割备份文件,从而形成file_0.rch,file_1.rch等备份压缩文件。该生产-消费者模型如下图所示:
图5 物理细粒度数据备份到介质生产者-消费者模型
2.4 细粒度恢复多表方案
当前支持从集群级全量备份集、或schema级别备份集中做多表细粒度恢复,这两种主要场景核心技术思想一致,场景支持情况如下:
- 支持单次从集群级全量备份集中恢复单表或多表,恢复表的名称列表写入一个配置文件,配置文件名由恢复参数—table-list指定;
- 集群级全量备份集恢复单/多表,指定待恢复的表可跨多个schema;
- 恢复时可指定恢复到原表或新表,新表可与原表在不同schema,但需要在同一个database,表名可为新表名;指定的恢复目标schema可以存在,也可以不存在,恢复时新建出来,恢复的新表由—restore-target-list指定的文件配置,若希望全部恢复到原表名,则—table-list和—restore-target-list可指定同一配置文件;
- 若恢复时指定的恢复目标表存在(原表名或新表名),那么恢复可指定—clean参数先drop cascade级联删除该表(视图、索引、权限等一并删除)再恢复,不带该参数,则需要用户手动确认后drop,再进行恢复,这主要是为了应对备份和恢复时前表名相同,但表定义不同的场景。
- 细粒度是在线恢复,不清理数据也不停集群,恢复完成后表可直接使用,无build等额外时间消耗。
图6 细粒度在线恢复单/多表逻辑图
图6 物理细粒度备份在线恢复单/多表逻辑
恢复时的步骤简述如下:
Step1:接收各节点的各实例对应的工作进程Roach Agent数据请求后,Roach Client与NBU介质建连,开始List检索并获取文件,发给Roach Client;
Step2:Roach Client与各节点的Roach Agent,通过TCP连接转发待恢复数据,包含元数据和实例数据,实例获取后存入buffer;
Step3:Roach读入待恢复的表信息列表,构造恢复落盘文件的filter过滤器,只恢复目标表备份文件;
Step4:根据恢复回来的DDL,解析到待恢复表元信息,并根据元信息,将中间临时tmp表、恢复最终目标表创建出来;
Step5:根据新建tmp表,创建元信息map,并与原备份表的map信息一一映射,过滤文件落盘;
Step6:将备份的数据文件relfilenode交换到新建的tmp表relfilenode;
Step7:查询tmp表的数据,插入数据到最终目标表。
3. 细粒度备份恢复技术应用实测
3.1 测试环境
3.2 细粒度恢复用例的执行
这里给出部分典型场景的用例执行情况:
- Schema级别备份,恢复单/多表
验证点:
- 指定schema备份成功;
- 从schema备份集中恢复多表至目标table;
- 数据构造
执行Schema级别备份:
python $GPHOME/script/GaussRoach.py -t backup --master-port 9500 --media-destination nbu_policy --media-type NBU --metadata-destination $GAUSSHOME/roachbackup/metadata --physical-fine-grained --schemaname public --dbname test_tpch1 --parallel-process 3 --nbu-on-remote --nbu-media-list /home/omm/media.list --client-port 9200 - 从该Schema 备份集中指定恢复customer(列存表)、public.nation(行存表)至liding11.customer11、liding22.nation22
- 执行恢复指定多表:
python $GPHOME/script/GaussRoach.py -t restore --master-port 9500 --media-destination nbu_policy --media-type NBU --metadata-destination $GAUSSHOME/roachbackup/metadata --physical-fine-grained --backup-key 20201226_101715 --dbname test_tpch1 --table-list /home/omm/table.list --parallel-process 3 --restore-target-list /home/omm/target.list --clean --nbu-on-remote --nbu-media-list /home/omm/media.list --client-port 9200
4. 技术总结
本文主要从技术价值、应用场景、技术原理、技术实测展示几个维度对GaussDB(DWS) 物理细粒度备份恢复技术进行了剖析,可以看到物理细粒度备份恢复是对于已有全量数据备份恢复的一个有效的增强,客户可以以更灵活地方式规划自己的冷热数据,选择更小的逻辑粒度进行备份或恢复,节省宝贵的备份存储空间和cpu资源的同时,也更少地对在线业务带来冲击。在恢复层面,不同于旧有的集群级全量恢复需要停集群和清理数据,细粒度在线恢复不影响任何在线业务,也不会因恢复前清理集群带来可能的数据损失风险,因此该技术拥有较为广阔的前景和深远的意义。
想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技~