写点什么

数仓业务容错利器:物理细粒度备份恢复技术

发布于: 8 小时前

​​​​摘要:随着信息技术的发展,人类进入大数据时代,数据量呈现爆炸式的增长,金融领域数据承载核心业务,即便遭遇各种软硬件错误或灾难,也需要具备找回和快速恢复业务能力,因此备份恢复能力成为数仓的最关键能力之一。


本文分享自华为云社区《不动如山,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 服务器中。


NBU 集群部署模式如下:


图 1 NBU 集群部署模式

非侵入式 NBU 备份方案架构:


图 2 NBU 非侵入式部署方案


如上图所示(3 节点 GaussDB(DWS)集群为例),NBU 备份数据流向为:


1.    Roach agent 将压缩数据向 Roach client 分片传输;

2.    Roach agent 调用 NBU 客户端 XBSA 接口,请求 NBU 备份;

3.    NBU client 将此请求转发至 NBU Master Server;

4.    NBU master 服务器负责分配存储到哪个 NBU media 服务器;

5.    Roachclient 将调用 xbsa 接口将备份数据传输至 NBU MediaServer;

6.    MediaServer 将备份数据存储至挂载的磁带机或磁盘上

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,最终落盘;数据追加写的过程中,若超过段文件 segementsize 上限,则会切割备份文件,从而形成 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 细粒度在线恢复单/多表逻辑图

恢复时的步骤简述如下:


Step1:接收各节点的各实例对应的工作进程 Roach Agent 数据请求后,Roach Client 与 NBU 介质建连,开始 List 检索并获取文件,发给 RoachClient;


Step2:RoachClient 与各节点的 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  --schemanamepublic --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)更多信息,欢迎微信搜索“GaussDBDWS”关注微信公众号,和您分享最新最全的 PB 级数仓黑科技~


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

发布于: 8 小时前阅读数: 4
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
数仓业务容错利器:物理细粒度备份恢复技术