乐趣区

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

摘要:随着信息技术的倒退,人类进入大数据时代,数据量出现爆炸式的增长,金融畛域数据承载外围业务,即使遭逢各种软硬件谬误或劫难,也须要具备找回和疾速复原业务能力,因而备份恢复能力成为数仓的最要害能力之一。

本文分享自华为云社区《不动如山,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. Roach client 将调用 xbsa 接口将备份数据传输至 NBU Media Server;
  6. 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 级数仓黑科技~

点击关注,第一工夫理解华为云陈腐技术~

退出移动版