摘要:華爲GaussDB目前已支持NBU介質的備份與恢復,本文主要描述了華爲GaussDB數據庫和NetBackup對接進行備份、恢復的配置方法與性能調優方法。
1、簡介
企業要想避開天然災難和站點中斷的影響,必須將數據副本遠程備份至異地機器中。 這樣當生產站點發生重大災難事故時候,本地的生存存儲與備份存儲數據可能都會丟失,此時須要從異地備份存儲上恢復數據,從而保證數據不丟失。Netbackup 是目前金融行業使用最廣的備份軟件之一(簡稱NBU),是Veritas(賽門鐵克)主要產品 。華爲GaussDB目前已支持NBU介質的備份與恢復,本文主要描述了華爲GaussDB數據庫和NetBackup對接進行備份、恢復的配置方法與性能調優方法。python
2、NBU部署方式
當前GaussDB NBU備份方案支持兩種部署架構,分別爲侵入式部署於非侵入式部署。數據庫
NBU侵入式部署
當GaussDB所在集羣支持NBU系列軟件安裝時,部署方式採用NBU侵入式部署,部署結構以下圖:服務器
NBU侵入式部署方案能夠借閱 【GaussDB對接NBU備份環境配置指南】網絡
具體使用方法以下:session
注意:架構
- --media-destination: 該參數爲NBU policy名稱
- --metadata-destination: 元數據目錄(本地路徑)
- --prior-backup-key: 該參數爲增量備份依賴的備份集
- --backup-key: 該參數指定恢復備份集
一、全量備份:併發
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
二、增量備份函數
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
三、全量/增量恢復工具
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
四、單表備份性能
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
五、單表恢復
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
六、多表備份
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
七、多表恢復
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 -
八、數據庫級備份
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
九、數據庫級恢復
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: 該參數指定恢復備份集
一、全量備份:
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
二、增量備份
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
三、全量/增量恢復
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
四、單表備份
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
五、單表恢復
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
六、多表備份
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
七、多表恢復
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
八、數據庫級備份
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
九、數據庫級恢復
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
3、NBU流程概述
備份數據流
NBU 通常涉及NBU Master Server、NBU Media Server、NBU client,屬於一個three-trie結構。
本章節主要介紹NBU進程工做原理,方便使用者、開發者瞭解NBU備份流程,排查問題。
下圖中爲經過備份所涉及的數據流向
基本備份過程:
一、啓動備份方式:
- 當 nbpem 服務檢測到某項做業到了啓動時間時,將開始進行預約的備份操做。nbpem會檢查到了啓動時間的預約客戶機備份的策略配置。
- 若是管理員在 NetBackup 管理控制檯中選擇了手動備份選項,將開始進行即時手動備份。這會使 bprd 聯繫 nbpem,而後 nbpem 將處理管理員所選擇的策略、客戶機和日程表。
- 當客戶機上的用戶經過該客戶機上的用戶界面(或者經過 bpbackup 或xbsa系列接口)啓動備份或回覆時,將開始進行用戶控制的備份或回覆操做。這將調用該客戶機的 XBSA程序,該程序向主服務器上的請求後臺駐留程序 bprd發送請求。當前Roach NBU介質備份採用這種啓動方式。
二、接收備份任務: 響應進程(bprd)接收到客戶端的備份請求,
- bprd: request manager請求管理器:
bprd是Master Server的守護進程,bprd進程主要負責對客戶機請求做出響應,並將並向nbjm發出 job請求,用於提交備份並獲取job ID。
三、將請求轉發個策略執行管理器nbpm
- nbpem: policy execution manager策略執行管理器
策略執行管理器服務 (nbpem) 執行如下操做:
a. 經過nbproxy從 bpdbm 中獲取策略列表, 查詢到有效的備份policy的是否存在;
b、向 nbjm 提交當前已到預約啓動時間的全部做業(按照schedule執行時間的策略)。
四、爲備份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狀態可見。
五、開始備份
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),後者將安裝介質。
六、結束備份
bpbkar服務經過bptm發送備份數據,以將其寫入介質存儲或磁盤存儲。 備份完成後,將通知nbjm並將消息發送到bpjobd。此時job在「Activity Monitor」中顯示爲「done」。 nbjm服務還會將做業退出狀態報告給nbpem,nbpem將從新計算做業的下一個到期時間。
4、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調用以後使用此調用。
5、問題定位
使用Roach工具NBU備份發生故障時,可經過如下思路進行問題定位
NBU管理控制界面activity monitor可顯示相關的備份、恢復job。 job類型分爲三類:
- 藍色站立人性:表示該次備份/恢復操做已成功執行完畢;
- 綠色跑步人形:表示該次備份/恢復操做正在執行;
- 紅色x形:表示該次備份/恢復操做失敗,可根據Status查詢NBU官方文檔獲取錯誤相關緣由;
例如上圖中失敗job返回碼爲13,則可根據文檔信息定位排查緣由
若NBU界面無失敗job,則通常問題出如今了Roach側,可根據Roach日誌進行定位。
6、參數調優
Roach工具目前支持兩種NBU部署結構,分別爲NBU侵入式部署於NBU非侵入式部署,兩種部署方式的參數調優分別以下:
一、通用參數調優
- 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端都設置該參數。
二、NBU侵入式部署調優
- Maximum jobs per client:
此值設定每一個NBU client發送的並行處理任務數,一般Roach與並行參數相對性,通常設置爲DN數+CN數爲最佳。
三、NBU非侵入式部署調優
- Maximum jobs per client:
此值設定每一個NBU client發送的並行處理任務數,一般Roach與並行參數相對性,通常設置爲
(DN數+CN數)*(Roach client 服務的Roach agent)個數爲最佳。
四、超時設置
超時屬性適用於選定的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。