备份数据流
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调用之后使用此调用。

