写点什么

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

发布于: 2021 年 03 月 03 日

摘要:本文将梳理 Roach 全量恢复的整体流程,描述 Roach 集群全量备份场景的运转机制。


数据备份恢复是保护数据安全的重要手段之一。Roach 工具支持多种备份恢复类型,例如集群级的物理备份,表级备份的逻辑备份;分别支持 DISK/NBU/OBS/EISOO 几种备份介质;支持双集群间的容灾方案等,从而提供数据的可靠性保障机制。


Roach 支持如下功能:



一、简介


本文将梳理 Roach 全量恢复的整体流程,描述 Roach 集群全量备份场景的运转机制,PITR、增量备份、断点续做、双集群、表级备份等功能不做阐述。


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



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


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


二、备份架构


2.1 roach 备份全局流程图


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



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


2.2 调度流程


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



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



2.3 备份具体流程




2.4 接口调用


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


2.5 全量备份的内容


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


· 数据库相关的配置文件。


· 行存全部数据:GaussDB A 数据库支持行存。


· xlog 日志文件:Roach 支持在线业务的备份,则通过备份 xlog 日志文件可在恢复时将备份期间的业务 Redo,保证数据一致性。


· 列存全部数据: GaussDB A 数据库支持列存。


· 备份的数据按照每个节点为单位进行备份,所以每个节点都只存储当前节点的备份。


2.6 流程分析


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


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




· 只要没有走到③ ,备份是没有开始的;· ②:metadata 清单即此次备份的文件清单;


· 备份时的百分比,并不代表时间维度的备份进度,只代表流程进度;


· 只要没有打印出④ ,说明备份还没有结束,即使进度显示是 100%;


· ⑤:在此参数开启后,所有的 ddl 语句会在逻辑上执行,对物理文件的操作不会立即生效;


· ⑥:create barrier 之后的数据变化,将通过 xlog 记录来备份;


· ⑨:关闭延迟 DDL 参数后,所有被延迟的对物理文件的操作,将会立即执行;


2.7 备份集的存储形式


· 备份的数据会进行压缩后写入到 rch 文件后存储到备份路径下的实例文件夹下,且每个 rch 文件大小是 4GB;


· 存放路径:[存储路径]/roach/backupkey/hostname/,其中存储路径为备份命令中指定的--media-destination 的值,backupkey 为当前备份开始的时间作为标识某个特定的备份集,hostname 为当前节点的 hostname。内容如下:



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



· 控制备份的元数据,元数据存储路径为备份命令中指定的--metadata-destination 的值,其路径下内容如下:



· ini 文件中记录着每次备份的元信息


{"BackupCount":1,"BackupDetails":[{"S_NO":1,"BackupKey":"20190814_163625","BackupType":"FULL", …….}


· roach 文件夹存储的为特定某个备份的元信息


2.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 遇到故障时,结合打屏信息和相应位置的日志文件,可以快速定位到出错位置,提高解决问题效率。


三、总结


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


本文分享自华为云社区《数仓 GaussDB(DWS)全量备份总结》,原文作者:不熄火 。


点击关注,第一时间了解华为云新鲜技术~


发布于: 2021 年 03 月 03 日阅读数: 26
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
数仓GaussDB(DWS)全量备份总结