带你梳理Roach全量恢复的整体流程
摘要:本文将梳理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)全量备份总结》,原文作者:不熄火 。
带你梳理Roach全量恢复的整体流程的更多相关文章
- greenplum全量恢复gprecoverseg -F出现Unable to connect to database时的相关分析及解决方法
之前有两位朋友碰到过在对greenplum的系统构架更改后,出现全量恢复gprecoverseg -F也无法正常执行的情况. 报错信息为Unable to connect to database. R ...
- RDS数据库全量恢复方案
一.全量恢复 恢复最近的快照,将快找之前的数据全量恢复 二.增量恢复 下载对应的binlog日志导入到数据库 三.还没有备份的binlog日志获取方法 首先连接 RDS for MySQL 后查看当前 ...
- [源码分析] 带你梳理 Flink SQL / Table API内部执行流程
[源码分析] 带你梳理 Flink SQL / Table API内部执行流程 目录 [源码分析] 带你梳理 Flink SQL / Table API内部执行流程 0x00 摘要 0x01 Apac ...
- MySQL innobackupex全量备份恢复
转自 http://blog.itpub.net/27099995/viewspace-1295099/ 先简单介绍一下这个工具:innobackupexinnobackupex比xtarbackup ...
- 【MySQL】全量+增量的备份/恢复
生产环境中,有时需要做MySQL的备份和恢复工作.因MySQL是在运行过程中的,做全量备份需要时间,全量备份完成后又有数据变动,此时需要增量备份辅助.如果想恢复数据到一个空库(例如数据迁移或者上云等更 ...
- xtrabakcup基本用法 安装、全量备份恢复、增量备份恢复
xtrabackup备份原理以及工作流程 备份流程日志分析:1.##读取mysql配置文件2.## 扫描innodb日志lsn并复制inndodb系统表空间3.## 缓冲写出到数据文件并锁表4.## ...
- Mysql备份工具xtraback全量和增量测试
Mysql备份工具xtraback全量和增量测试 xtrabackup 是 percona 的一个开源项目,可以热备份innodb ,XtraDB,和MyISAM(会锁表) 官方网址http:// ...
- innobackupex在线备份及恢复(全量和增量)
Xtrabackup是由percona开发的一个开源软件,它是innodb热备工具ibbackup(收费的商业软件)的一个开源替代品.Xtrabackup由个部分组成:xtrabackup和innob ...
- mysql全量和增量备份详解(带脚本)
在日常运维工作中,对mysql数据库的备份是万分重要的,以防在数据库表丢失或损坏情况出现,可以及时恢复数据. 下面对这种备份方案详细说明下:1.MySQLdump增量备份配置执行增量备份的前提条件是M ...
- 【运维实战】利用tar -g 实现简单全量备份和增量备份(带演示)
备份产生 全量备份指完全备份,增量备份指针对上次至今的修改进行备份.linux提供tar -g可实现备份功能. 第一次运行 tar -g 备份存放目录/snapshot -czvf 备份存放目录/备 ...
随机推荐
- ELK-WEB中文版化-redis高性能加速
1.ELK-WEB中文汉化版支持:(kibana所在机器执行)Kibana WEB平台所有的字段均显示为英文,目前5.x版本默认没有中文汉化版插件或者汉化包(7.x版本支持汉化默认有汉化),感谢Git ...
- Python 继承和子类示例:从 Person 到 Student 的演示
继承允许我们定义一个类,该类继承另一个类的所有方法和属性.父类是被继承的类,也叫做基类.子类是从另一个类继承的类,也叫做派生类. 创建一个父类 任何类都可以成为父类,因此语法与创建任何其他类相同: 示 ...
- Thread类 常用方法
3.6 start 与 run 调用 run public static void main(String[] args) { Thread t1 = new Thread("t1" ...
- TypeScript学习小结:基础使用
TypeScript学习小结:基础使用 某册子买了两年多了,到最近才开始学习TypeScript,拖延症的严重症状了:不过我还是深信人做一件事是需要一个契机的. 学完之后整体感受是:TypeScrip ...
- JavaScript高级程序设计笔记08 对象、类与面向对象编程
对象.类与面向对象编程 对象 一组属性的无序集合 属性 类型 数据属性 value.writable 访问器属性 getter.setter至少有一 定义 .操作符:默认可配置.可枚举.可写(数据属性 ...
- JavaScript高级程序设计笔记07 迭代器与生成器
迭代器与生成器 1.迭代 反复多次执行一段程序,(有明确的终止条件) 迭代器.生成器 ES6 计数循环(for):最简单的迭代 迭代次数.迭代每次执行的操作 (顺序已知) 古早迭代(有序->数组 ...
- MySQL大表设计
存储大规模数据集需要仔细设计数据库模式和索引,以便能够高效地支持各种查询操作.在面对数亿条数据,每条数据包含数百个字段的情况下,以下是我能想到的在设计数据库的时候需要注意的内容,不足之处欢迎各位在评论 ...
- 【Servlet】两种配置
web.xml中Servlet的注解 <servlet> <!-- servlet的内部名称,⾃定义 --> <servlet-name>类名</servle ...
- 小程序的登录授权与退出功能(wx.getUserProfile)
一.授权登录:wx.getUserProfile 1.使用wx.getUserProfile实现登录 1.javascript: login(){ wx.getUserProfile({ desc: ...
- 7 种查询策略教你用好 Graph RAG 探索知识图谱
近来 NebulaGraph 社区在 LLM + Graph 和 Graph RAG 领域进行了深入的探索和分享.在 LlamaIndex 和 LangChain 中,NebulaGraph 引入了一 ...