一文带你了解GaussDB(DWS) 的Roach逻辑备份实现原理
摘要:Roach工具是GaussDB(DWS)推出的一款主力的备份恢复工具,包含物理与逻辑备份两种主要能力,本文着重于讲解Roach逻辑备份的实现原理。
一、简介
在大数据时代,数据的完整和可靠性成为一个数仓最核心的能力之一。GaussDB(DWS)以其出众的分布式计算和存储能力广受用户青睐的同时,也特别着眼于数据备份容灾领域的创新和打磨。数据的可靠性可以说是数仓的“命门”。对于企业、政府等用户,如果因为硬件故障导致的文件损坏,或是业务操作的误删,导致了数据损坏或丢失,那么损失将是不可估量的。GaussDB(DWS)提供的Roach工具,将以其稳定、快速、可靠的备份能力,通过备份恢复数据库或业务表,为客户准备一个可靠的“后悔药”,从而有效地挽回客户损失。
二、Roach备份恢复基本框架
GaussDB(DWS)的Roach工具,同时提供物理备份和逻辑备份两种主要形态的备份。物理备份直接通过拷贝文件块,存储于备份介质之上,恢复时使用备份的文件块,重建集群中实例DN与CN的数据目录进行恢复。
本文中我们主要着眼于逻辑备份,在当前的GaussDB(DWS)中,相比于物理备份,逻辑备份拥有更好的灵活性,其充分利用了GaussDB(DWS)强大的数据导入导出能力,不同于物理备份的文件整体拷贝,逻辑备份针对数据库的逻辑对象进行抽取和备份,粒度可以做到表级、schema级、database级,根据客户需要进行定制选择;在一个拥有成千上万表的客户数仓中,如果仅想要备份一张表,那么当前逻辑备份是更好的选择。
在逻辑备份讲解之前,我们首先讲一下Roach工具的设计架构,这个框架是一切逻辑或者物理备份的实现基础——

图1 Roach备份恢复工具框架示意图
GaussDB(DWS)提供的Roach是一个分布式的备份恢复工具,以一个Node1、2、3组成的集群为例,备份的总入口是python进程GaussRoach.py,它将在当前节点拉起一个roach master进程,在集群其他所有节点各拉起一个roach agent进程,是典型的master-slave框架,master进程与所有的agent进程分别建立TCP长连接,并封装报文与各个节点通信,下发备份等任务,在每个节点上,将分布式地为节点上的CN、DN等数据库对象进行备份。
三、逻辑备份的原理
下面简述一下逻辑备份的执行过程:
1)待备份表定义的导出和备份
如果是库级的备份,将逐个schema地进行元数据导出;处理每一个schema时,又将逐个导出所有的表定义,因此,我们下图展示了Roach逻辑备份导出一个表DDL的过程。Roach Master节点接到备份指令后,向一个有CN的节点Roach Agent下发指令,该Agent进程再调用gs_dump,连CN进行表定义DDL的导出。

图2 逻辑备份表元数据DDL导出备份示意图
2)创建外表
Roach逻辑备份过程,本质是建立外表进行数据导出的过程,类似上一步的表定义导出,Roach Agent接受Master指令后,基于导出的表定义,连CN创建写外表,创建的外表使用gsmpp_server, server的option中,location为roach://{Roach Agent监听端口},其中,Roach Agent监听端口为参数可配置,将接受该节点上所有DN实例的连接,Roach逻辑备份外表定义类似如下形式,该待备份表仅有一个int类型字段id,图中举例的Roach Agent监听端口为8080,可配置,导出格式为csv。

图3 Roach逻辑备份创建的外表
3)Roach工具与DN的建连及数据导出备份
当前GaussDB(DWS)的集中主要数据导入导出外表包括GDS、HDFS、OBS、Roach等四种,Roach外表同其他几种外表类似,都通过FDW(Foreign Data Wrapper)完成,但注册了一系列属于Roach的FDW API接口实现,此外,Roach还实现了Open/Read/Write/Close/ErrorReport等五个主要的底层读写API,实现DN与Roach Agent之间的数据交互。

图4 逻辑备份表数据备份流程示意图
如图4所示,逻辑备份数据的流程可以用以下phase1 ~ phase5简单描述
- Phase1: 备份数据的命令被Master下发给所有Agent,连一个CN,连数据库创建外表导出server、创建导出外表,每个节点的Roach Agent同样会创建一个TblServer线程,监听Agent Port端口,等待DN连接;
- Phase2: 连一个CN执行insert into roachft select * from A;sql查询会被下发到所有DN,通过注册的Roach FDW API,DN调用回调函数,封装一个PGXCNode的消息,以自明instance身份,去尝试连接server url中的本节点Agent Port;
- Phase3: Roach Agent的TblServer每接收一个DN的连接,会分配一个数据通信的socket槽位,并fork一个子进程为该DN实例的备份服务;Agent会等待该节点上所有的DN都建立连接,创建lengthof(节点所有DN)个子进程,并行进行数据备份。
- Phase4: 每个备份子进程通过建立的连接,不断读取表数据,待该表所有切分的数据块读取完成,发送一个FINISH_BACKUP消息给Roach Agent,则停止数据传输,从DN读取的数据首先存入Agent子进程的buffer中。
- Phase5: 每个Agent进程内会创建一个BackupSender线程,负责消费存入buffer的表数据,与备份介质建立连接,流式进行数据的发送;Phase4、5在实际运行中是个异步并行的动作,并非等所有表数据都写入buffer后,才向备份介质发送。
四、小结
关于Roach逻辑备份的原理大致就讲解完成了,逻辑备份能够有效地应对单表、schema级等较细粒度的备份,较为灵活和便利。逻辑备份的恢复的过程,与上述备份过程基本是个逆向过程,简而言之即表定义恢复,节点及DN元数据恢复,数据导入的过程,恢复的一大优势是,不会停集群或移动其他数据,对其他库或者表的业务几乎不影响。在后续的博文中,我们可以更详细地解读。
文末彩蛋:
临近华为云3月开年采购季
据内部可靠消息,采购季中数仓GaussDB(DWS)
包月包年都将有重大优惠,对企业用户尤为友好!!!
PS:关注数仓GaussDB(DWS)公众号,get最新最全的产品资讯和数仓黑科技,更有超多活动,福利不停歇!欢迎访问数仓GaussDB(DWS)开发者论坛,产品特性随时交流,求助问题还有专家在线实时答疑哦~扫描下方二维码关注我哦↓↓↓

本文分享自华为云社区《侵略如火,GaussDB(DWS)高可用容灾利器之逻辑备份》,原文作者:世纪末的魔术师。
一文带你了解GaussDB(DWS) 的Roach逻辑备份实现原理的更多相关文章
- 一文详解数仓GaussDB(DWS) 函数出参带出方式
摘要:本文主要讲解DWS函数出参带出方式. 本文分享自华为云社区<GaussDB(DWS)功能 -- 函数出参 #[玩转PB级数仓GaussDB(DWS)]>,作者:譡里个檔 . DWS的 ...
- 一文带你了解 Redis 的发布与订阅的底层原理
01.前言 发布订阅系统在我们日常的工作中经常会使用到,这种场景大部分情况我们都是使用消息队列的,常用的消息队列有 Kafka,RocketMQ,RabbitMQ,每一种消息队列都有其特性,关于 Ka ...
- 一文详解GaussDB(DWS) 的并发管控和内存管控
摘要:DWS的负载管理分为两层,第一层为cn的全局并发控制,第二层为资源池级别的并发控制. 本文分享自华为云社区<GaussDB(DWS) 并发管控&内存管控>,作者: fight ...
- 由两个问题引发的对GaussDB(DWS)负载均衡的思考
摘要:GaussDB(DWS)的负载均衡通过LVS+keepAlived实现.对于这种方式,需要思考的问题是,CN的返回结果是否会经过LVS,然后再返回给前端应用?如果经过LVS,那么,LVS会不会成 ...
- 5步带你入门GaussDB(DWS)的GDS导入导出
摘要:本篇文档为使用GDS导入示例的具体简单步骤和示例. 本文分享自华为云社区<带你快速入门GDS导入导出,玩转PB级数仓GaussDB(DWS)>,作者: yd_220527686. 1 ...
- 从数据仓库双集群系统模式探讨,看GaussDB(DWS)的容灾设计
摘要:本文主要是探讨OLAP关系型数据库框架的数据仓库平台如何设计双集群系统,即增强系统高可用的保障水准,然后讨论一下GaussDB(DWS)的容灾应该如何设计. 当前社会.企业运行当中,大数据分析. ...
- 十八般武艺玩转GaussDB(DWS)性能调优:路径干预
摘要:路径生成是表关联方式确定的主要阶段,本文介绍了几个影响路径生成的要素:cost_param, scan方式,join方式,stream方式,并从原理上分析如何干预路径的生成. 一.cost模型选 ...
- Istio是啥?一文带你彻底了解!
原标题:Istio是啥?一文带你彻底了解! " 如果你比较关注新兴技术的话,那么很可能在不同的地方听说过 Istio,并且知道它和 Service Mesh 有着牵扯. 这篇文章可以作为了解 ...
- 一文带您了解5G的价值与应用
一文带您了解5G的价值与应用 5G最有趣的一点是:大多数产品都是先有明确应用场景而后千呼万唤始出来.而5G则不同,即将到来的5G不仅再一次印证了科学技术是第一生产力还给不少用户带来了迷茫——我们为什么 ...
- 一文带你了解elasticsearch
一文带你了解elasticsearch cxf2102100人评论160人阅读2019-07-02 21:31:36 elasticsearch es基本概念 es术语介绍 文档Document ...
随机推荐
- 用AI打造一个属于自己的歌手,让她C位霸气出道
一.前言 今天玩儿点儿特别的,AI大行其道的今天,还没玩过AI模型的程序员绝对不是个好厨子.我本人比较喜欢音乐,但是一直没有出道,很是遗憾.那么今天,我就使用AI模型亲手打造一个堪比真人的歌手,让 ...
- Java Web程序在Tomcat上是如何运行的
https://blog.csdn.net/fuzhongmin05/article/details/104379514 一个JVM是一个进程,JVM上跑Tomcat,Tomcat上可以部署多个应用. ...
- JVM-JAVA基本类型
1 package javap.fload; 2 3 import static jdk.nashorn.internal.objects.Global.Infinity; 4 5 public cl ...
- 关于Linux性能监控之CPU篇详解
http://news.chinaunix.net/opensource/2013/0228/2654519.shtml # vmstat 1 procs -----------memory----- ...
- 题解 CF916C
题目大意: 要求构造一张图,并让该图满足以下条件: 有 \(n\) 个点,\(m\) 条边. 每条边的边权范围是 \([1,10^9]\). 图中从 \(1\) 到 \(n\) 的最短路径长度是个质数 ...
- 函数计算的新征程:使用 Laf 构建 AI 知识库
Laf 已成功上架 Sealos 模板市场,可通过 Laf 应用模板来一键部署! 这意味着 Laf 在私有化部署上的扩展性得到了极大的提升. Sealos 作为一个功能强大的云操作系统,能够秒级创建多 ...
- 🔥🔥Java开发者的Python快速进修指南:实战之跳表pro版本
之前我们讲解了简易版的跳表,我希望你能亲自动手实现一个更完善的跳表,同时也可以尝试实现其他数据结构,例如动态数组或哈希表等.通过实践,我们能够发现自己在哪些方面还有所欠缺.这些方法只有在熟练掌握之后才 ...
- 基于uQRCode封装的Vue3二维码生成插件
标题:基于uQRCode封装的Vue3二维码生成插件 摘要:本文介绍了一种基于uQRCode封装的Vue3二维码生成插件,可以在Javascript运行环境下生成二维码并返回图片地址.该插件适用于所有 ...
- VideoPipe可视化视频结构化框架更新总结(2023-12-5)
项目地址:https://github.com/sherlockchou86/video_pipe_c 往期文章:https://www.cnblogs.com/xiaozhi_5638/p/1696 ...
- [THUPC2022 决赛] rsraogps
[THUPC2022 决赛] rsraogps 题目描述 给序列 \(a_1,\dots,a_n\),\(b_1,\dots,b_n\),\(c_1,\dots,c_n\), 定义区间 \([l,r] ...