zoukankan      html  css  js  c++  java
  • 带你梳理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)全量备份总结》,原文作者:不熄火 。

     

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

  • 相关阅读:
    Luogu 1080 【NOIP2012】国王游戏 (贪心,高精度)
    Luogu 1314 【NOIP2011】聪明的质检员 (二分)
    Luogu 1315 【NOIP2011】观光公交 (贪心)
    Luogu 1312 【NOIP2011】玛雅游戏 (搜索)
    Luogu 1525 【NOIP2010】关押罪犯 (贪心,并查集)
    Luogu 1514 引水入城 (搜索,动态规划)
    UVA 1394 And Then There Was One / Gym 101415A And Then There Was One / UVAlive 3882 And Then There Was One / POJ 3517 And Then There Was One / Aizu 1275 And Then There Was One (动态规划,思维题)
    Luogu 1437 [HNOI2004]敲砖块 (动态规划)
    Luogu 1941 【NOIP2014】飞扬的小鸟 (动态规划)
    HDU 1176 免费馅饼 (动态规划)
  • 原文地址:https://www.cnblogs.com/huaweiyun/p/14472955.html
Copyright © 2011-2022 走看看