数仓业务容错利器:物理细粒度备份恢复技术
摘要:随着信息技术的发展,人类进入大数据时代,数据量呈现爆炸式的增长,金融领域数据承载核心业务,即便遭遇各种软硬件错误或灾难,也需要具备找回和快速恢复业务能力,因此备份恢复能力成为数仓的最关键能力之一。
本文分享自华为云社区《不动如山,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备份数据流向为:
- 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级数仓黑科技~
点击关注,第一时间了解华为云新鲜技术~
数仓业务容错利器:物理细粒度备份恢复技术相关推荐
- 电商离线数仓-业务数仓指标(GMV主题/转化率主题)
GMV和转化率 GMV主题 GMV的概念 GMV表的创建 GMV表里导入数据 转化率 转化率概念 转化率表的创建 转化率表里导入数据 ADS层用户行为漏斗分析 GMV主题 GMV的概念 什么是GMV? ...
- 大数据数仓项目总结(一)需求、技术选型、框架版本、服务器、集群规模
文章目录 一.需求描述 1)项目大致需求 2)需考虑的问题 二.项目框架及选型 1.技术选型 2.项目架构与数据流程 3.框架版本选择 1)Hadoop发行版本选择 2)Apache框架版本具体型号 ...
- 数仓业务上判断一个表的唯一主键是哪几个字段
平时业务量比较大,一张HIVE表里面的字段也比较多,如何判断所select 的这几个字段是这张表的唯一主键,也就是,选取这几个主键,可以唯一确定只有一行数据 可以通过,select A,B,C fro ...
- 数仓(四)数据仓库分层
上一节我们了解了数仓中常见的两大建模体系:关系建模和维度建模,并论述了维度建模的4个步骤. 数仓(二)关系建模和维度建模 数仓(三)简析阿里.美团.网易.恒丰银行.马蜂窝5家数仓分层架构 其实数仓建模 ...
- 爱奇艺的数仓架构
首先介绍一下爱奇艺公司整体的业务情况以及数据仓库 1.0 的设计和出现的问题,针对数仓 1.0 的缺陷,是如何演进到数仓 2.0 架构以及数仓 2.0 需要解决的问题和需要达成的目标. 这张图非常清晰 ...
- 实时数仓到底是什么呢?与传统数仓有什么区别?
数仓,即存放数据的仓库,包括全量数据.历史数据.类型上又分为实时数仓.离线数仓,所谓实时数仓是指数据的实时性更高.延迟性低,一般是统计一天以内的数据,支持毫秒级的统计,在建设工具上一般采用Flink, ...
- 一个人可以搭建数仓吗
一个人可以搭建数仓吗? 以下只是当前个人的感想,随着时间和成长,也许观点横看成林侧成峰,只是作为本人的心路历程,有什么错误欢迎交流和指出 如果非要个确切的答案,我觉得不可以. 不求原因,回答到现在就结 ...
- 深入解读:获得 2021 Forrester 全球云数仓卓越表现者的阿里云数据仓库
简介: 阿里云在最新发布的 The Forrester Wave™: Cloud Data Warehouse, Q1 2021 全球云数据仓库技术评比中进入卓越表现者象限,成为国内唯一入选厂商.本文 ...
- HIve数仓新零售项目DWD层的构建
HIve数仓新零售项目 注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统 ...
最新文章
- 面向 Photoshop 的英特尔® Texture Works 插件
- 4步win7下简单FTP服务器搭建(试验成功)
- 【转】Windows编程之滚动条—滚动条消息
- 1268:【例9.12】完全背包问题
- Json的反序列化 .net Newtonsoft.Json
- 95-180-050-源码-Watermark-允许固定数量延迟的分配器(BoundedOutOfOrdernessTimestampExtractor)
- Vue3(setup函数介绍)
- 首席架构师是怎样炼成的?今晚直播!
- 遗传算法图解_遗传算法图解指南
- 《互联网周刊》:华为终端的未来之路
- 机械秒表的使用方法_秒表、机械秒表、504秒表,505无暂停机械秒表
- 智能汽车-AR/VR应用浅析
- Android开发-基本概念小整理(四)为了面试的小伙伴们所准备~~
- ECM技术学习:解码端帧内模式推导(Decoder-side Intra Mode Derivation )
- 电脑怎么既录屏又录人脸?分享2个宝藏方法,轻松学会
- 解密新后缀.phobos勒索病毒 防御措施 解密方法how_to_back
- 平面最近点对问题求解—基于Java语言
- outlook突然变得很慢很卡
- Python识别垃圾邮件
- dell 去鼠标版功能widnows
热门文章
- Bootstrap3 插件的选项
- Bootstrap 编码规范之编辑工具配置
- matlab中基于十字形窗口的滤波算法,#215;字形滤波窗口在Matlab自适应中值滤波算法中的应用 - 21ic中国电子网...
- java调试报告_java实验一报告
- windows动态库和静态库VS导入
- [转]如何让DIV固定在页面的某个位置而不随着滚动条随意滚动
- 比赛-暑假训练赛1 (26 Jul, 2018)
- 微信小程序页面引入公用头部底部
- Python基础-ConfigParser模块
- 【转载】前后端分离的思考与实践(五)