摘要: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)高可用容灾利器之逻辑备份》,原文作者:世纪末的魔术师。
点击关注,第一工夫理解华为云陈腐技术~