摘要:GaussDB数仓的Roach工具,同时提供物理备份和逻辑备份两种主要形态的备份。逻辑备份针对数据库的逻辑对象进行抽取和备份,能够有效地应对单表、schema级等较细粒度的备份,较为灵活和便利。

一、简介

在大数据时代,数据的完整和可靠性成为一个数仓最核心的能力之一。GaussDB数仓以其出众的分布式计算和存储能力广受用户青睐的同时,也特别着眼于数据备份容灾领域的创新和打磨。数据的可靠性可以说是数仓的“命门”。对于企业、政府等用户,如果因为硬件故障导致的文件损坏,或是业务操作的误删,导致了数据损坏或丢失,那么损失将是不可估量的。GaussDB提供的Roach工具,将以其稳定、快速、可靠的备份能力,通过备份恢复数据库或业务表,为客户准备一个可靠的“后悔药”,从而有效地挽回客户损失。

图1 数仓备份恢复示意图

二、Roach备份恢复基本框架

GaussDB数仓的Roach工具,同时提供物理备份和逻辑备份两种主要形态的备份。物理备份直接通过拷贝文件块,存储于备份介质之上,恢复时使用备份的文件块,重建集群中实例DN与CN的数据目录进行恢复。本文中我们主要着眼于逻辑备份,在当前的GaussDB数仓中,相比于物理备份,逻辑备份拥有更好的灵活性,其充分利用了GaussDB强大的数据导入导出能力,不同于物理备份的文件整体拷贝,逻辑备份针对数据库的逻辑对象进行抽取和备份,粒度可以做到表级、schema级、database级,根据客户需要进行定制选择;在一个拥有成千上万表的客户数仓中,如果仅想要备份一张表,那么当前逻辑备份是更好的选择。

在逻辑备份讲解之前,我们首先讲一下Roach工具的设计架构,这个框架是一切逻辑或者物理备份的实现基础——

图2 Roach备份恢复工具框架示意图

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的导出。

图3 逻辑备份表元数据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。

图4 Roach逻辑备份创建的外表

3)Roach工具与DN的建连及数据导出备份

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

图5 逻辑备份表数据备份流程示意图

如图5所示,逻辑备份数据的流程可以用以下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数仓高可用容灾利器之逻辑备份的更多相关文章

  1. 巨杉Tech|SequoiaDB 巨杉数据库高可用容灾测试

    数据库的高可用是指最大程度地为用户提供服务,避免服务器宕机等故障带来的服务中断.数据库的高可用性不仅仅体现在数据库能否持续提供服务,而且也体现在能否保证数据的一致性. SequoiaDB 巨杉数据库作 ...

  2. 理解 OpenStack 高可用(HA)(1):OpenStack 高可用和灾备方案 [OpenStack HA and DR]

    本系列会分析OpenStack 的高可用性(HA)概念和解决方案: (1)OpenStack 高可用方案概述 (2)Neutron L3 Agent HA - VRRP (虚拟路由冗余协议) (3)N ...

  3. 高可用(vrrp)以及mysql主主备份部署

    高可用说起来感觉很高大上,我刚接触的时候也是一头雾水,但是需求的时候很容易理解的,当一台服务器挂了另一台能够马上顶上去继续提供服务,这就叫做高可用,需求其实不难理解,只是需要自身根据项目的实际需求还有 ...

  4. 实战解读丨Linux下实现高并发socket最大连接数的配置方法

    摘要:Linux操作系统,无论是编写客户端程序还是服务端程序,在高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制. [诉求场景] Linux操作系统,无论是编写 ...

  5. mysql数据库负载均衡高可用之主从、主主备份,实时同步

    一:MySQL Replication 什么是MySQL Replication Replication可以实现将数据从一台数据库服务器(master)复制到一或多台数据库服务器(slave) 默认情 ...

  6. MySQL高可用集群方案

    一.Mysql高可用解决方案 方案一:共享存储 一般共享存储采用比较多的是 SAN/NAS 方案. 方案二:操作系统实时数据块复制 这个方案的典型场景是 DRBD,DRBD架构(MySQL+DRBD+ ...

  7. 转://Oracle 高可用技术与云基础架构

    众所周知Oracle云基础架构已经在越来越多的行业里应用.大家了解云基础架构是如何演进的嘛?可能有人会说Oracle高可用技术是组成云架构的基础,那它们的关系是怎么样的?大家又了解Oracle高可用技 ...

  8. Redis高可用详解:持久化技术及方案选择

    文章摘自:https://www.cnblogs.com/kismetv/p/9137897.html 前言 在上一篇文章中,介绍了Redis的内存模型,从这篇文章开始,将依次介绍Redis高可用相关 ...

  9. Redis高可用详解:持久化技术及方案选择 (推荐)--转载自编程迷思博客www.cnblogs.com/kismetv/p/8654978.html

    一.Redis高可用概述 在介绍Redis高可用之前,先说明一下在Redis的语境中高可用的含义. 我们知道,在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常 ...

  10. 《即时消息技术剖析与实战》学习笔记11——IM系统如何保证服务高可用:流量控制和熔断机制

    IM 系统的不可用主要有以下两个原因: 一是无法预测突发流量,即使进行了服务拆分.自动扩容,但流量增长过快时,服务已经不可用了: 二是业务中依赖的这些接口.资源不可用或变慢时,比如发消息可能需要依赖& ...

随机推荐

  1. 深入解析Go非类型安全指针:技术全解与最佳实践

    本文全面深入地探讨了Go非类型安全指针,特别是在Go语言环境下的应用.从基本概念.使用场景,到潜在风险和挑战,文章提供了一系列具体的代码示例和最佳实践.目的是帮助读者在保证代码安全和效率的同时,更加精 ...

  2. 秋招过半零Offer怎么办?

    参加今年秋招的同学都知道,尤其是双非本科更是体验深刻.9 月份至今,面试寥寥无几.笔试也不是很多,大中小公司 Offer 没拿下一个.作为应届生的我们,该怎么办呢? 1.调整好心态 这个世界上有两种事 ...

  3. 深入探讨I/O模型:Java中的阻塞和非阻塞和其他高级IO应用

    引言 I/O(Input/Output)模型是计算机科学中的一个关键概念,它涉及到如何进行输入和输出操作,而这在计算机应用中是不可或缺的一部分.在不同的应用场景下,选择正确的I/O模型是至关重要的,因 ...

  4. es6(1)

    1.var let const var---变量,重复定义不报错,没有块级作用域,不能限制修改 if(12>5){ var a=12; } alert(a); //弹出12 let---变量,重 ...

  5. 使用aop(肉夹馍)为BlazorServer实现统一异常处理

    背景 用户做一个操作往往对应一个方法的执行,而方法内部会调用别的方法,内部可能又会调用别的方法,从而形成一个调用链.我们一般是在最顶层的方法去加try,而不是调用链的每一层都去加try. 在web开发 ...

  6. PolygonCollider2D.OverlapPoint()在小scale下失效的一种解决办法

    偶然发现PolygonCollider2D的方法OverlapPoint()有时会失效(一直返回false),测试后发现在scale(这里指世界空间的scale,后同)很小的情况下(通常在UI Can ...

  7. 【行云流水线实践】基于“OneBuild”方法对镜像进行快速装箱

    在云原生领域,无论使用哪种编排调度平台,Kubernetes,DockerSwarm,OpenShift等,业务都需要基于镜像进行交付,我们在内部实践"Source-to-image&quo ...

  8. Spring5学习随笔-Spring5的第一个程序(环境搭建、日志框架整合)

    第二章.第一个Spring程序 1.软件版本 1.JDK1.8+ 2.Maven3.5+ 3.IDEA2018+ 4.SpringFramework 5.1.4 官网:www.spring.io 2. ...

  9. pnpm 管理依赖包是如何节省磁盘空间的?

    npm 存在的问题 我们经常使用 npm 来管理 node 项目中的包,从 package.json 中读取配置将依赖下载到本地,以保障项目的正常运行. 当项目数量多时,这样的包管理方式会非常的占用电 ...

  10. 函数计算的新征程:使用 Laf 构建 AI 知识库

    Laf 已成功上架 Sealos 模板市场,可通过 Laf 应用模板来一键部署! 这意味着 Laf 在私有化部署上的扩展性得到了极大的提升. Sealos 作为一个功能强大的云操作系统,能够秒级创建多 ...