数仓GaussDB(DWS)全量备份总结

举报
不熄火 发表于 2021/02/09 17:00:44 2021/02/09
【摘要】 数据备份恢复是保护数据安全的重要手段之一。Roach工具支持多种备份恢复类型。本文将梳理Roach全量恢复的整体流程,描述Roach集群全量备份场景的运转机制。

1. 前言

  • 适用版本:【8.0.0(及以上)】

数据备份恢复是保护数据安全的重要手段之一。Roach工具支持多种备份恢复类型。本文将梳理Roach全量恢复的整体流程,描述Roach集群全量备份场景的运转机制。

2. 介绍

2.1 Roach功能介绍

Roach支持如下功能:

序号 功能
1 物理备份恢复:全量备份、增量备份
2 逻辑备份恢复:单表、多表
3 物理备份集恢复到新集群
4 备份相关辅助功能:删除/校验/查看备份集、取消备份集
5 支持的存储介质:本地DISK、远端NAS/NBU/OBS/EISOO
6 支持的调度方式:命令行、FI、DWS管控面、EISOO界面(仅部分)
7 支持的集群形态:主备从、一主多备、小型化
8 双集群容灾:同构、异构(仅DISK)
9 双集群迁移:离线迁移
10 断点续做、NBU非侵入式部署等特性(仅部分介质)

2.2 全量备份介绍

Roach的集群级备份采用的是物理备份,即通过物理文件拷贝的方式对数据库进行备份,通过备份的数据文件及日志等文件,数据库可以进行完全恢复。全量备份则是将当前时间点数据库中所有的数据进行备份。当然,全备份可以备份整块硬盘、整个分区或某个具体的目录。全备份的好处是数据恢复方便,因为所有的数据都在同一个备份中,所以只要恢复全备份,所有的数据都会被恢复。

其优点是:物理备份速度快,通过合理规划,可以低成本进行备份和恢复;

其缺点是:相较于增量备份备份时间较长。

3. 备份架构

3.1 roach备份全局流程图

Roach备份采用生产者-消费者模式,下图展现了备份流程各个线程及IO交互图。exec线程作为生产者,同时为减轻exec线程的压力,增加并行的reader线程读取小文件;sender线程作为消费者;中间则是通过一个256MB(可设置)的大buffer衔接。

GaussDB内核的备份组件为GaussRoach.py和gs_roach,需在集群内拉起备份任务。

3.2 调度流程

GaussRoach.py:Roach单集群全量备份入口为GaussRoach.py。每次命令行输入“python GaussRoach.py –t backup…”后,roach的python语言模式就开始运行了。

任意节点均可作为主节点拉起GaussRoach.py,然后每个节点都启动gs_roach进程负责本节点备份,各节点并行备份,节点内各DN并行备份。

3.3 备份具体流程

3.4 接口调用

完成数据备份压缩后,需要将压缩文件传送到远端存储介质,实现存储介质与Roach备份流程松耦合,第三方介质不用关注Roach的备份流程,只需要按照接口实现即可完成与Roach的对接。同时Roach流程实现也不必关注底层存储介质实现,减少了不必要的分支判断。

3.5 全量备份的内容

根据Gauss数据库的功能结构,全量备份按照以下顺序备份所需要的文件:

  • 数据库相关的配置文件。
  • 行存全部数据:GaussDB A数据库支持行存。
  • xlog日志文件:Roach支持在线业务的备份,则通过备份xlog日志文件可在恢复时将备份期间的业务Redo,保证数据一致性。
  • 列存全部数据: GaussDB A数据库支持列存。
  • 备份的数据按照每个节点为单位进行备份,所以每个节点都只存储当前节点的备份。

3.6 流程分析

结合Roach工具备份调度流图和日志信息分析如下:

整个备份流程的上层代码为python代码,即GaussRoach.py,master进程的创建和agent进程的拉起都是由python侧完成的。备份的配置和参数部分检查过程同样是由python侧代码完成。各个节点agent进程被拉起之后,C侧代码进行具体的业务操作。C侧代码运行起来之后,可以通过ps ux到gs_roach进程查看进程状态。

No. Step
Creating Thread Roach Agent
RAGENT_EXEC_PREPARING_METADATA come
Enter the callback of rowstore copy
performBackup enter
Start delay ddl recycle before col file copy
Setting agent state to [AGNET_CREATING_BARRIER]
RAGENT_EXEC_BACKUP_XLOGFILES come
Enter the callback of colstore copy
Stop delay ddl recycle after having copied all col files
Setting Master state to [PERFORM_BOOKKEEPING_INFO]
  • ②:metadata清单即此次备份的文件清单;
  • 只要没有走到③ ,备份是没有开始的;
  • 备份时的百分比,并不代表时间维度的备份进度,只代表流程进度;
  • 只要没有打印出④ ,说明备份还没有结束,即使进度显示是100%;
  • ⑤:在此参数开启后,所有的ddl语句会在逻辑上执行,对物理文件的操作不会立即生效;
  • ⑥:create barrier之后的数据变化,将通过xlog记录来备份;
  • ⑨:关闭延迟DDL参数后,所有被延迟的对物理文件的操作,将会立即执行;

3.7 备份集的存储形式

  • 备份的数据会进行压缩后写入到rch文件后存储到备份路径下的实例文件夹下,且每个rch文件大小是4GB;
  • 存放路径:[存储路径]/roach/backupkey/hostname/,其中存储路径为备份命令中指定的--media-destination的值,backupkey为当前备份开始的时间作为标识某个特定的备份集,hostname为当前节点的hostname。内容如下:

  • Roach压缩文件*.rch的内部结构:

3.8 日志回收

日志是查看代码运行状态和错误定位的重要文件,Roach内核的回收日志只能保证一个日志回收点:$GAUSSLOG/roach/。

Roach日志的管理可分为三类:

  • agent文件夹保存了内核侧生成的日志;
  • controller文件夹保存了python侧的调度信息;
  • frame文件夹保存了双集群容灾过程中python侧代码生成的日志。

(1)内核日志

  • 缺省情况下,内核日志仅记录警告及以上级别的消息。Roach工具支持的日志级别,默认只有ERROR和Warning级别日志。执行命令可开启INFO级别日志,--logging –logging-level INFO
  • 如果备份或恢复操作失败,可查看控制台中显示的错误汇总,识别发生错误的主机。

(2)系统日志

  • Linux记录系统事件至系统日志中。Roach工具将FATAL及ERROR消息记入相同的系统日志文件。例如,在运行SUSE Linux操作系统的设备上,Roach写日志到/var/log/messages文件。

(3)安全日志

  • 用户可以保存所有活动信息到文件中。安全日志文件包括时间戳,以及备份,恢复和生成文件的详细信息。安全日志文件的文件名称格式如下:roach-agent-security-YYYY-MM-DD_HHMMSS.log。

(4)控制器日志

  • 控制器日志为python脚本运行日志,用户可以保存控制器日志信息到文件中。
  • 控制器日志文件的格式如下:roach-controller-YYYY-MM-DD_HHMMSS.log。例如:roach-controller-2015-12-15_203415.log

遇到故障时,结合打屏信息和相应位置的日志文件,可以快速定位到出错位置,提高解决问题效率。

4. 总结

备份能解决数据丢失的找回、数据损坏的找回和历史数据找回等功能,是构建容灾方案的基础,如何快速、有效实现大数据备份功能是这个时代一个非常重要的课题。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。