写点什么

未雨绸缪,数据保护之 NBU 介质备份

发布于: 2020 年 12 月 17 日

摘要:华为 GaussDB 目前已支持 NBU 介质的备份与恢复,本文主要描述了华为 GaussDB 数据库和 NetBackup 对接进行备份、恢复的配置方法与性能调优方法。

一、简介

企业要想避开自然灾难和站点中断的影响,必须将数据副本远程备份至异地机器中。 这样当生产站点发生重大灾难事故时候,本地的生存存储与备份存储数据可能都会丢失,此时需要从异地备份存储上恢复数据,从而保证数据不丢失。Netbackup 是目前金融行业使用最广的备份软件之一(简称 NBU),是 Veritas(赛门铁克)主要产品 。华为 GaussDB 目前已支持 NBU 介质的备份与恢复,本文主要描述了华为 GaussDB 数据库和 NetBackup 对接进行备份、恢复的配置方法与性能调优方法。

二、NBU 部署方式

当前 GaussDB NBU 备份方案支持两种部署架构,分别为侵入式部署于非侵入式部署。

NBU 侵入式部署

当 GaussDB 所在集群支持 NBU 系列软件安装时,部署方式采用 NBU 侵入式部署,部署结构如下图:



NBU 侵入式部署方案可以借阅 【GaussDB对接NBU备份环境配置指南】

具体使用方法如下:

注意:

  • --media-destination: 该参数为 NBU policy 名称

  • --metadata-destination: 元数据目录(本地路径)

  • --prior-backup-key: 该参数为增量备份依赖的备份集

  • --backup-key: 该参数指定恢复备份集

1、全量备份:

python $GPHOME/script/GaussRoach.py -t backup --master-port 55000 --media-destination nbu_policy --media-type NBU --metadata-destination  /data1/roachbackup/metadata  --parallel-process 3 
复制代码

2、增量备份

python $GPHOME/script/GaussRoach.py -t backup --master-port 55000 --media-destination nbu_policy --media-type NBU --metadata-destination  $GAUSSHOME/roachbackup/metadata  --parallel-process 3 --prior-backup-key 20200912_083324
复制代码

3、全量/增量恢复

python $GPHOME/script/GaussRoach.py -t restore --clean --master-port 55000 --media-destination nbu_policy --media-type NBU --metadata-destination  /data1/roachbackup/metadata  --backup-key 20200912_083324 
复制代码

4、单表备份

python $GPHOME/script/GaussRoach.py -t backup --master-port 25990 --media-destination nbu_policy --media-type NBU --metadata-destination  $GAUSSHOME/tablebackup/metadata --dbname testdb --tablename test --agent-port 34990 
复制代码

5、单表恢复

python $GPHOME/script/GaussRoach.py -t restore --clean --master-port 25990 --media-destination nbu_policy --media-type NBU --metadata-destination  $GAUSSHOME/tablebackup/metadata --dbname testdb --tablename test --agent-port 34990  --backup-key 20190826_151600 
复制代码

6、多表备份

python $GPHOME/script/GaussRoach.py -t backup --master-port 9500 --media-destination nbu_policy --media-type NBU --metadata-destination  $GAUSSHOME/roachbackup/metadata --logical --agent-port 7000 --dbname testdb --table-list /home/omm/table.list
复制代码

7、多表恢复

python $GPHOME/script/GaussRoach.py -t restore --clean --master-port 9500 --media-destination $GAUSSHOME/roachbackup/mediadata --media-type nbu_policy --metadata-destination  $GAUSSHOME/roachbackup/metadata --logical --agent-port 7000 --dbname testdb --table-list /home/apdba/table_list.txt --backup-key  20190511_183652 -
复制代码

8、数据库级备份

python $GPHOME/script/GaussRoach.py -t backup --dbname testdb --agent-port 7000 --metadata-destination $GAUSSHOME/roachbackup/metadata --media-destination nbu_policy --master-port 9500 --media-type NBU  
复制代码


9、数据库级恢复
复制代码


python $GPHOME/script/GaussRoach.py -t restore --dbname testdb --agent-port 7000 --metadata-destination $GAUSSHOME/roachbackup/metadata --media-destination nbu_policy --master-port 9500 --media-type NBU --backup-key key 20190511_193122  
复制代码

NBU 非侵入式部署

当前 NBU 系列软件只支持 x86 机器,NBU 非侵入式部署则支撑 NBU 系列软件无法在 ARM、欧拉系统安装的场景。如下图所示,假如已有 3 节点 GaussDB 集群,Roach 备份工具将本节点的集群数据通过 TCP 发送到远端 NBU Media Server 机器。每台 NBU Media Server 上面同时安装 NBU Client,并部署 Roach client 组件,后者接收集群内 Roach 进程发来的备份数据,不落盘方式通过 XBSA 接口转发给本机的 NBU Client,完成 NBU 备份。恢复流程也类似,只是数据流相反。



Roach client 插件安装:

从 DWS 管控面的连接管理界面下载 Roach client 组件包到集群本地,然后拷贝出来。如下:



useradd ommpasswd omm   # 输入密码su - ommcd /data/omm/ # 变更为本地安装目录, 将Roach client安装tar包拷贝至此目录下mkdir roach_clienttar -zxvf GaussDB-8.1.0-REDHAT-x86_64bit-RoachClient.tar.gz -C roach_clientcd /data/omm/roach_client/bin/source roach_client_env./roach_client -p ip:8888 -H 0/0 -D -l roach_client.log  # ip为当前部署roach_client机ps -ef | grep roach_client # 启动后检查roach_client是否启动成功 
复制代码

​ 注意:/roach_client -p ip:8888 -H 0/0 -D -l roach_client.log

其中 ip 为当前部署 roach_client 机器, 8888 为 roach_client 开放端口,用于沙箱内集群各节点和 NBU Media Server 之间 TCP 通信传输备份文件 ; -l 为指定日志路径

备份方式:

注意:

  • --media-destination: 该参数为 NBU policy 名称

  • --metadata-destination: 元数据目录(本地路径)

  • --nbu-on-remote:该参数指定部署方式为 NBU 非侵入式部署

  • --nbu-media-list: 该参数指定 NBU Media Server 的 ip 清单,按行输入 ip 地址

  • --client-port: 该参数指定 Roach client 插件的对外开放通信端口

  • --prior-backup-key: 该参数为增量备份依赖的备份集

  • --backup-key: 该参数指定恢复备份集

1、全量备份:

python $GPHOME/script/GaussRoach.py -t backup --master-port 55000 --media-destination nbu_policy --media-type NBU --metadata-destination  /data1/roachbackup/metadata  --parallel-process 3 --nbu-on-remote --nbu-media-list /home/Ruby/media.txt --client-port 8888
复制代码


2、增量备份
复制代码


python $GPHOME/script/GaussRoach.py -t backup --master-port 55000 --media-destination nbu_policy --media-type NBU --metadata-destination  $GAUSSHOME/roachbackup/metadata  --parallel-process 3 --nbu-on-remote --nbu-media-list /home/Ruby/media.txt --client-port 8888 --prior-backup-key 20200912_083324
复制代码


3、全量/增量恢复
复制代码


python $GPHOME/script/GaussRoach.py -t restore --clean --master-port 55000 --media-destination nbu_policy --media-type NBU --metadata-destination  /data1/roachbackup/metadata  --backup-key 20200912_083324 --nbu-on-remote --nbu-media-list /home/Ruby/media.txt --client-port 8888
复制代码


4、单表备份
复制代码


python $GPHOME/script/GaussRoach.py -t backup --master-port 25990 --media-destination nbu_policy --media-type NBU --metadata-destination  $GAUSSHOME/tablebackup/metadata --dbname testdb --tablename test --agent-port 34990  --nbu-on-remote --nbu-media-list /home/liding/nbu/media.txt --client-port 9000
复制代码


5、单表恢复
复制代码


python $GPHOME/script/GaussRoach.py -t restore --clean --master-port 25990 --media-destination nbu_policy --media-type NBU --metadata-destination  $GAUSSHOME/tablebackup/metadata --dbname testdb --tablename test --agent-port 34990  --backup-key 20190826_151600  --nbu-on-remote --nbu-media-list /home/liding/nbu/media.txt --client-port 9000
复制代码


6、多表备份
复制代码


python $GPHOME/script/GaussRoach.py -t backup --master-port 9500 --media-destination nbu_policy --media-type NBU --metadata-destination  $GAUSSHOME/roachbackup/metadata --logical --agent-port 7000 --dbname testdb --table-list /home/omm/table.list --nbu-on-remote --nbu-media-list /home/liding/nbu/media.txt --client-port 9000
复制代码


7、多表恢复
复制代码


python $GPHOME/script/GaussRoach.py -t restore --clean --master-port 9500 --media-destination $GAUSSHOME/roachbackup/mediadata --media-type nbu_policy --metadata-destination  $GAUSSHOME/roachbackup/metadata --logical --agent-port 7000 --dbname testdb --table-list /home/apdba/table_list.txt --backup-key  20190511_183652 --nbu-on-remote --nbu-media-list /home/liding/nbu/media.txt --client-port 9000
复制代码


8、数据库级备份
复制代码


python $GPHOME/script/GaussRoach.py -t backup --dbname testdb --agent-port 7000 --metadata-destination $GAUSSHOME/roachbackup/metadata --media-destination nbu_policy --master-port 9500 --media-type NBU  --nbu-on-remote --nbu-media-list /home/liding/nbu/media.txt --client-port 9000
复制代码


9、数据库级恢复
复制代码


python $GPHOME/script/GaussRoach.py -t restore --dbname testdb --agent-port 7000 --metadata-destination $GAUSSHOME/roachbackup/metadata --media-destination nbu_policy --master-port 9500 --media-type NBU --backup-key key 20190511_193122  --nbu-on-remote --nbu-media-list /home/liding/nbu/media.txt --client-port 9000
复制代码


三、NBU流程概述
复制代码

备份数据流

NBU 一般涉及 NBU Master Server、NBU Media Server、NBU client,属于一个 three-trie 结构。

本章节主要介绍 NBU 进程工作原理,方便使用者、开发者了解 NBU 备份流程,排查问题。

下图中为通过备份所涉及的数据流向



基本备份过程:

1、启动备份方式:

  • 当 nbpem 服务检测到某项作业到了启动时间时,将开始进行预定的备份操作。nbpem 会检查到了启动时间的预定客户机备份的策略配置。

  • 如果管理员在 NetBackup 管理控制台中选择了手动备份选项,将开始进行即时手动备份。这会使 bprd 联系 nbpem,然后 nbpem 将处理管理员所选择的策略、客户机和日程表。

  • 当客户机上的用户通过该客户机上的用户界面(或者通过 bpbackup 或 xbsa 系列接口)启动备份或回复时,将开始进行用户控制的备份或回复操作。这将调用该客户机的 XBSA 程序,该程序向主服务器上的请求后台驻留程序 bprd 发送请求。当前 Roach NBU 介质备份采用这种启动方式。

2、接收备份任务: 响应进程(bprd)接收到客户端的备份请求,

  • bprd: request manager 请求管理器:

bprd 是 Master Server 的守护进程,bprd 进程主要负责对客户机请求作出响应,并将并向 nbjm 发出 job 请求,用于提交备份并获取 job ID。

3、将请求转发个策略执行管理器 nbpm

  • nbpem: policy execution manager 策略执行管理器

策略执行管理器服务 (nbpem) 执行以下操作:

a. 通过 nbproxy 从 bpdbm 中获取策略列表, 查询到有效的备份 policy 的是否存在;

b、向 nbjm 提交当前已到预定启动时间的所有作业(按照 schedule 执行时间的策略)。

4、为备份 job 分配资源

a、nbjm(job manager 作业管理器)接收到任务后,nbjm 首先会与 bpjobd 通信,将此 job 添加至 job 列表中,此时在 Activity Monitor 中该 job 以 queue 状态可见。b、nbjm 通过 nbrb 请求资源,nbrb 负责分配资源以响应来自 nbjm 的请求。并从 nbemm (企业介质管理器服务)获取物理资源,并管理逻辑资源,如多路复用组、每个客户机的最多作业数、每个策略的最多作业数。 当 nbrb 进程从 nbemm 获取到所需资源时,会返回通知 nbjm 资源已分配。

b、当 nbrm 资源分配完成后,nbjm 会调用 image database 创建临时快照文件,此时该 job 会在 Activity Monitor 中该 job 以 active 状态可见。

5、开始备份

a、当 job 处于 active 状态后,nbjm 通过 bpcompatd 与 NBU Media Server 上的客户端服务(bpcd)进行连接,其中 bpcompatd 服务通过专用小交换机(PBX)和 NetBackup 旧式网络服务(vnetd)创建连接。b、bpcd 进程是 NBU Media Server 上的守护进程,允许 Master Server 或 NBU Client 启动程序。bpcd 接收到连接后会启动 Netbackup 备份恢复管理器(bpbrm)。

b、bpbrm 进程服务通过 PBX 与 vnetd 与 NBU client 机器上的 bpcd 进程建立连接,启动 NBU client 机器上的 bpbkar,其中 bpbkar 负责生成备份 image,并将 image 数据发送至 NBU Media Server 上的 bpdrm,对于每个备份或恢复 job,都会在 NBU Media Server 上启动一个 bpbrm 实例用于传输 image 数据。bpdrm 进程会启动磁带/磁盘管理进程 bptm,对于磁盘介质,bptm 直接与磁盘通信。对于磁带介质,bptm 保留驱动器并向逻辑磁带接口守护程序(ltid)发出安装请求。 ltid 服务调用机械手驱动器守护程序(txxd,其中 xx 根据所使用的机械手的类型而异)。 txxd 守护程序将安装请求传达给机械手控制守护程序(txxcd),后者将安装介质。

6、结束备份

bpbkar 服务通过 bptm 发送备份数据,以将其写入介质存储或磁盘存储。 备份完成后,将通知 nbjm 并将消息发送到 bpjobd。此时 job 在“Activity Monitor”中显示为“done”。 nbjm 服务还会将作业退出状态报告给 nbpem,nbpem 将重新计算作业的下一个到期时间。

四、XBSA 相关接口

NBU 软件提供的 libxbsa64.so 动态库(实现了标准的 XBSA 系列接口),将本地数据传送到 NBU 服务器,然后由 NBU 服务器负责落盘到磁带介质上。 GaussDB 的专用备份工具 Roach,负责调用 libxbsa64.so 库将本地数据库文件备份到远端 NBU 服务器。 本章节则主要针对开发者,介绍 XBSA 系列接口。

备份相关接口

备份过程中涉及的 XBSA 相关接口主要如下:



  • BSAQueryApiVersion:该接口用于确定 Netbackup XBSA 接口的当前版本。

  • BSAInit:该接口用于对 XBSA 应用程序进行身份验证,与 NetBackup XBSA 接口建立 session 会话,并为调用者的后续 API 调用建立环境。注意,BSAInit 不支持嵌套创建 session 会话。

  • BSABeginTxn:

​ 该接口用于创建一个事物,这里的事物和数据库事物概念相似,BSABeginTxn()调用向 NetBackup XBSA 接口指示作为原子单位执行的一个或多个操作的开始,即所有操作将成功或没有成功。可以将一个动作假定为为特定目的而进行的单个函数调用或一系列函数调用。

​ 例如,一个 BSACreateObject()调用后跟多个 BSASendData()调用并以 BSAEndData()调用终止可以被视为单个操作。 在正常使用中,BSABeginTxn()调用总是与随后的 BSAEndTxn()调用耦合。如果在事务期间调用 BSATerminate(),则事务中止。

​ 注意,BSABeginTxn 不支持嵌套创建事物。

  • BSACreateObject:

​ BSACreateObject 调用在 NetBackup 中创建一个 XBSA 对象。 该调用将启动 NetBackup XBSA 接口与 NetBackup 服务器之间的通信。然后可以将 XBSA 对象数据传递到内存缓冲区中。BSACreateObject 调用中的 dataBlockPtr 参数允许调用者获取有关 NetBackup XBSA 接口所需的缓冲区结构的信息。

  • BSASendData:

​ BSASendData()将字节数据流发送到缓冲区中的 NetBackup XBSA 接口。如果要发送的字节数据流很大,则可以多次调用 BSASendData()。此调用只能在 BSACreateObject()或另一个 BSASendData()调用之后使用。

  • BSAEndData:

调用方在调用 BSACreateObject 之后调用零次或多次 BSASendData,当前备份文件传输完毕后调用 BSAEndData,用于通知 Netbackup 服务器当前文件传输结束

  • BSAEndTxn:

BSAEndTxn 与 BSABeginTxn 耦合使用,以标识将被视为事务的 API 调用或一组 API 调用。。

  • BSATerminate:

BSATerminate 调用终止与 NetBackup XBSA 接口的会话,该接口由 BSAInit 调用对应,释放当前 session 会话获取的所有资源。如果在事务内调用 BSATerminate(),则事务中止。

恢复相关接口

恢复过程中涉及的 XBSA 相关接口主要如下:



  • BSAQueryObject:

​ BSAQueryObject 调用从 NetBackup XBSA 界面启动有关 NetBackup XBSA 对象文件的信息请求。查询结果由查询描述符中指定的搜索条件确定。在 BSA_ObjectDescriptor(由 objectDescriptorPtr 参数引用)中返回满足查询搜索条件的第一个 XBSA 对象的 XBSA 对象描述符。

  • BSAGetData:

​ BSAGetData 从 NetBackup XBSA 接口请求 XBSA 对象文件数据。在 BSAGetObject()调用之后或在其他 BSAGetData 调用之后使用此调用。

五、问题定位

使用 Roach 工具 NBU 备份发生故障时,可通过以下思路进行问题定位

NBU 管理控制界面 activity monitor 可显示相关的备份、恢复 job。 job 类型分为三类:

  • 蓝色站立人性:表示该次备份/恢复操作已成功执行完毕;

  • 绿色跑步人形:表示该次备份/恢复操作正在执行;

  • 红色 x 形:表示该次备份/恢复操作失败,可根据 Status 查询 NBU 官方文档获取错误相关原因;



例如上图中失败 job 返回码为 13,则可根据文档信息定位排查原因



若 NBU 界面无失败 job,则一般问题出现在了 Roach 侧,可根据 Roach 日志进行定位。

六、参数调优

Roach 工具目前支持两种 NBU 部署结构,分别为 NBU 侵入式部署于 NBU 非侵入式部署,两种部署方式的参数调优分别如下:

1、通用参数调优

  • Maximum concurrent jobs

此值指定了对应存储单元上最大作业数量,取值范围为 1-256,

例如准备将三个备份作业发送到存储单元,并将“最大并发作业数”设置为两个。前两个作业开始,而第三个作业等待。



  • Maximum vault jobs:

​ 此属性指定在 master server 上允许活动的最大活跃 job 数量。如果达到了允许活动的 job 限制,则将后续的 kob 排队,并且它们状态在“活动监视器”中显示为“已排队”。此属性设置范围为 1~200, 当备份过程并发 job 数大大超过 200,则 master server 会出现瓶颈,造成任务排队耗时。此时应考虑部署多 Master Server 模式。



设置 NET_BUFFER_SZ :

在应用 Netbackup 备份数据到带库时,有一个 NET_BUFFER_SZ 参数,决定 media server 与 client 之间数据传输的缓冲池大小,该参数值默认为 32032 bytes,以文件形式保存于 %Install_Path/netbackup/目录下。通常默认值都较小,如果希望修改该参数值,则直接修改 %Install_Path/netbackup/NET_BUFFER_SZ 即可,例如:

host-192-168-241-40:/usr/openv/netbackup # echo 65536 > /usr/openv/netbackup/NET_BUFFER_SZhost-192-168-241-40:/usr/openv/netbackup # more /usr/openv/netbackup/NET_BUFFER_SZ65536
复制代码

设置一个足够大的 NET_BUFFER_SZ 某些情况下能够有效提高备份的速度,推荐在 server/client 端都设置该参数。

2、NBU 侵入式部署调优

  • Maximum jobs per client:

此值设定每个 NBU client 发送的并行处理任务数,通常 Roach 与并行参数相对性,一般设置为 DN 数+CN 数为最佳。



3、NBU 非侵入式部署调优

  • Maximum jobs per client:

此值设定每个 NBU client 发送的并行处理任务数,通常 Roach 与并行参数相对性,一般设置为

(DN 数+CN 数)*(Roach client 服务的 Roach agent)个数为最佳。



4、超时设置

超时属性适用于选定的 Master server、Media Server 以及 NBU client

  • Client connect timeout:

​ 此选项指定服务器连接客户端时等待的秒数。默认值为 300s。一般 Roach 备份业务中,建议此值设置为 3600s 或者更高。此选项适用于 NBU Master Server、NBU Media Server、NBU Client。

  • Client read timeout:

​ 此选项指定用于客户端读取超时的秒数。此选项适用于 NBU Master Server、NBU Media Server。默认值为 300s,如果服务器在客户端在此超时时间内没有从客户端得到响应,则备份/恢复任务失败,报错误码 13。特别是针对于 NBU Job 复用场景,文件间隔传输时间超过此值,则备份/恢复任务失败。建议此值设置为 3600s 或者更高。

  • Media server connect timeout

​ 此选项用于指定 Master Server 连接 Media Server 的等待超时描述,默认值为 300s。建议此值设置为 3600s。此选项适用于 NBU Master Server、NBU Media Server。

 

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


发布于: 2020 年 12 月 17 日阅读数: 22
用户头像

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

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

评论

发布
暂无评论
未雨绸缪,数据保护之NBU介质备份