摘要: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元数据恢复,数据导入的过程,复原的一大劣势是,不会停集群或挪动其余数据,对其余库或者表的业务简直不影响。在后续的博文中,咱们能够更具体地解读。

本文分享自华为云社区《侵略如火,GaussDB(DWS)高可用容灾利器之逻辑备份》,原文作者:世纪末的魔术师。

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