未雨綢繆,資料保護之NBU介質備份

華為雲開發者社群發表於2020-12-17
摘要:華為GaussDB目前已支援NBU介質的備份與恢復,本文主要描述了華為GaussDB資料庫和NetBackup對接進行備份、恢復的配置方法與效能調優方法。

一、簡介

企業要想避開自然災難和站點中斷的影響,必須將資料副本遠端備份至異地機器中。 這樣當生產站點發生重大災難事故時候,本地的生存儲存與備份儲存資料可能都會丟失,此時需要從異地備份儲存上恢復資料,從而保證資料不丟失。Netbackup 是目前金融行業使用最廣的備份軟體之一(簡稱NBU),是Veritas(賽門鐵克)主要產品 。華為GaussDB目前已支援NBU介質的備份與恢復,本文主要描述了華為GaussDB資料庫和NetBackup對接進行備份、恢復的配置方法與效能調優方法。

二、NBU部署方式

當前GaussDB NBU備份方案支援兩種部署架構,分別為侵入式部署於非侵入式部署。

NBU侵入式部署

當GaussDB所在叢集支援NBU系列軟體安裝時,部署方式採用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備份。恢復流程也類似,只是資料流相反。

未雨綢繆,資料保護之NBU介質備份

Roach client外掛安裝:

從DWS管控面的連線管理介面下載Roach client元件包到叢集本地,然後拷貝出來。如下:

未雨綢繆,資料保護之NBU介質備份

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備份流程,排查問題。

下圖中為通過備份所涉及的資料流向

未雨綢繆,資料保護之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相關介面主要如下:

未雨綢繆,資料保護之NBU介質備份

  • 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相關介面主要如下:

未雨綢繆,資料保護之NBU介質備份

  • 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官方文件獲取錯誤相關原因;

未雨綢繆,資料保護之NBU介質備份

例如上圖中失敗job返回碼為13,則可根據文件資訊定位排查原因

未雨綢繆,資料保護之NBU介質備份

若NBU介面無失敗job,則一般問題出現在了Roach側,可根據Roach日誌進行定位。

六、引數調優

Roach工具目前支援兩種NBU部署結構,分別為NBU侵入式部署於NBU非侵入式部署,兩種部署方式的引數調優分別如下:

1、通用引數調優

  • Maximum concurrent jobs

此值指定了對應儲存單元上最大作業數量,取值範圍為1-256,

例如準備將三個備份作業傳送到儲存單元,並將“最大併發作業數”設定為兩個。前兩個作業開始,而第三個作業等待。

未雨綢繆,資料保護之NBU介質備份

  • Maximum vault jobs:

​ 此屬性指定在master server上允許活動的最大活躍job數量。如果達到了允許活動的job限制,則將後續的kob排隊,並且它們狀態在“活動監視器”中顯示為“已排隊”。此屬性設定範圍為1~200, 當備份過程併發job數大大超過200,則master server會出現瓶頸,造成任務排隊耗時。此時應考慮部署多Master Server模式。

未雨綢繆,資料保護之NBU介質備份

設定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數為最佳。

未雨綢繆,資料保護之NBU介質備份

3、NBU非侵入式部署調優

  • Maximum jobs per client:

此值設定每個NBU client傳送的並行處理任務數,通常Roach與並行引數相對性,一般設定為

(DN數+CN數)*(Roach client 服務的Roach agent)個數為最佳。

未雨綢繆,資料保護之NBU介質備份

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。

 

點選關注,第一時間瞭解華為雲新鮮技術~

相關文章