摘要:華為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 omm passwd omm # 輸入密碼 su - omm cd /data/omm/ # 變更為本地安裝目錄, 將Roach client安裝tar包拷貝至此目錄下 mkdir roach_client tar -zxvf GaussDB-8.1.0-REDHAT-x86_64bit-RoachClient.tar.gz -C roach_client cd /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_SZ host-192-168-241-40:/usr/openv/netbackup # more /usr/openv/netbackup/NET_BUFFER_SZ 65536
設置一個足夠大的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。