摘要:隨着信息技術的發展,人類進入大數據時代,數據量呈現爆炸式的增加,金融領域數據承載核心業務,即使遭遇各類軟硬件錯誤或災難,也須要具有找回和快速恢復業務能力,所以備份恢復能力成爲數倉的最關鍵能力之一。
本文分享自華爲雲社區《不動如山,GaussDB(DWS)業務容錯利器——物理細粒度備份恢復技術》,原文做者:世紀末的魔術師 。node
1. 技術概述
1.1 價值及主要內容
隨着信息技術的發展,人類進入大數據時代,數據量呈現爆炸式的增加,金融領域數據承載核心業務,即使遭遇各類軟硬件錯誤或災難,也須要具有找回和快速恢復業務能力,所以備份恢復能力成爲數倉的最關鍵能力之一。GaussDB(DWS)支持了物理細粒度備份恢復能力。用戶可自定義備份整集羣或部分數據庫元素,並進行靈活的單、多表恢復,有效縮減備份數據所需的時間窗口和存儲空間,同時聚焦於用戶業務場景的關鍵表的備份恢復。python
物理細粒度備份恢復目前主要支持的2大場景:數據庫
1、從細粒度化的集羣級全量備份集中恢復單/多表;服務器
2、備份指定的schema全量數據,並可從該備份集中恢復單/多表;微信
2. 技術方案原理
2.1 NBU備份恢復方案
Roach爲GaussDB(DWS) 數據庫備份工具,支持多種備份恢復類型及方案。對於Roach通用架構,每一個集羣節點都有Roach agent進程負責本節點的數據備份。第一個節點額外有一個Roach master進程負責分佈式集羣備份。Roach提供非侵入式的備份到NBU方案,物理細粒度備份恢復一樣基於此框架,所以首先對此進行介紹說明。Roach client插件部署至NBU Media Server機器中,用於接收Roach agent發送的備份數據,並轉發至NBU 服務器中。架構
NBU集羣部署模式以下:框架
圖1 NBU集羣部署模式分佈式
非侵入式NBU備份方案架構:工具
圖2 NBU非侵入式部署方案性能
如上圖所示(3節點GaussDB(DWS)集羣爲例),NBU備份數據流向爲:
- Roach agent將壓縮數據向Roach client分片傳輸;
- Roach agent調用NBU客戶端XBSA接口,請求NBU備份;
- NBU client將此請求轉發至NBU Master Server;
- NBU master服務器負責分配存儲到哪一個NBU media服務器;
- Roach client將調用xbsa接口將備份數據傳輸至NBU Media Server;
- Media Server將備份數據存儲至掛載的磁帶機或磁盤上
2.2 細粒度元信息生成方案
爲了可以從備份集中細粒度地恢復單表或多表,首先須要獲取全部數據庫下schema、表的元信息DDL,將其持久化並備份到介質。須要說明的是,因爲元信息DDL導出時間較長,設計中採用DDL導出備份與數據備份並行的方式,以提高性能:Roach獲取DDL的設計思路以下所示:
圖3 物理細粒度備份恢復獲取元數據方案
備份過程當中,爲支持細粒度恢復,經過表名映射到元信息,進而找到全部關聯表的物理文件、事務信息,須要獲取並備份一個映射map,map按數據庫元素層次逐層獲取,主要包括:
Agent --> Instance –> Database –> Schema ->Table –> Related Relations
實際的執行中,將爲每一個物理節點、實例,並行進行映射元信息查詢和存儲,設計邏輯以下:
圖4 細粒度備份恢復文件映射MAP獲取
2.3 數據備份生產-消費者模型
GaussDB(DWS)的細粒度化全量備份實現於Roach備份工具。Roach集羣級全量備份,經過與GaussDB(DWS) Kernel交互,在pg_start_backup()執行後依次備份行存數據文件、WAL文件,執行pg_stop_backup()後備份列存數據文件。這一系列備份流程在完整的事務保證下,確保數據落磁盤,並被有序地備份到NBU管理的介質路徑下。
細粒度數據備份的過程,首先依靠2.2中從系統表查詢獲得的MAP整理待備份物理文件列表,具體到每一個庫、schema、table,逐層遞進,最終獲得一張表所依賴的全部關聯文件最小集合,建立的備份塊最小邏輯粒度爲schema,同一個schema下的表,會連續地向同一個邏輯塊寫,物理上按segment配置(一般爲4G)進行切割。具體的備份數據寫入介質,依靠以下生產-消費者模型,實例下的數據文件被數據寫線程(生產者)按塊讀取,壓縮後寫入buffer中,發送數據線程(消費者)則從buffer中獲取數據塊,調用XBSA標準的API接口,流式地將數據寫入到介質層,由NBU Master分配Media Server,最終落盤;數據追加寫的過程當中,若超過段文件segement size上限,則會切割備份文件,從而造成file_0.rch,file_1.rch等備份壓縮文件。該生產-消費者模型以下圖所示:
圖5 物理細粒度數據備份到介質生產者-消費者模型
2.4 細粒度恢復多表方案
當前支持從集羣級全量備份集、或schema級別備份集中作多表細粒度恢復,這兩種主要場景核心技術思想一致,場景支持狀況以下:
- 支持單次從集羣級全量備份集中恢復單表或多表,恢復表的名稱列表寫入一個配置文件,配置文件名由恢復參數—table-list指定;
- 集羣級全量備份集恢復單/多表,指定待恢復的表可跨多個schema;
- 恢復時可指定恢復到原表或新表,新表可與原表在不一樣schema,但須要在同一個database,表名可爲新表名;指定的恢復目標schema能夠存在,也能夠不存在,恢復時新建出來,恢復的新表由—restore-target-list指定的文件配置,若但願所有恢復到原表名,則—table-list和—restore-target-list可指定同一配置文件;
- 若恢復時指定的恢復目標表存在(原表名或新表名),那麼恢復可指定—clean參數先drop cascade級聯刪除該表(視圖、索引、權限等一併刪除)再恢復,不帶該參數,則須要用戶手動確認後drop,再進行恢復,這主要是爲了應對備份和恢復時前表名相同,但表定義不一樣的場景。
- 細粒度是在線恢復,不清理數據也不停集羣,恢復完成後表可直接使用,無build等額外時間消耗。
下圖展現了恢復時的主要方案設計:
圖6 細粒度在線恢復單/多表邏輯圖
圖6 物理細粒度備份在線恢復單/多表邏輯
恢復時的步驟簡述以下:
Step1:接收各節點的各實例對應的工做進程Roach Agent數據請求後,Roach Client與NBU介質建連,開始List檢索並獲取文件,發給Roach Client;
Step2:Roach Client與各節點的Roach Agent,經過TCP鏈接轉發待恢復數據,包含元數據和實例數據,實例獲取後存入buffer;
Step3:Roach讀入待恢復的表信息列表,構造恢復落盤文件的filter過濾器,只恢復目標表備份文件;
Step4:根據恢復回來的DDL,解析到待恢復表元信息,並根據元信息,將中間臨時tmp表、恢復最終目標表建立出來;
Step5:根據新建tmp表,建立元信息map,並與原備份表的map信息一一映射,過濾文件落盤;
Step6:將備份的數據文件relfilenode交換到新建的tmp表relfilenode;
Step7:查詢tmp表的數據,插入數據到最終目標表。
3. 細粒度備份恢復技術應用實測
3.1 測試環境
3.2 細粒度恢復用例的執行
這裏給出部分典型場景的用例執行狀況:
- Schema級別備份,恢復單/多表
驗證點:
- 指定schema備份成功;
- 從schema備份集中恢復多表至目標table;
- 數據構造
- 執行Schema級別備份:
python $GPHOME/script/GaussRoach.py -t backup --master-port 9500 --media-destination nbu_policy --media-type NBU --metadata-destination $GAUSSHOME/roachbackup/metadata --physical-fine-grained --schemaname public --dbname test_tpch1 --parallel-process 3 --nbu-on-remote --nbu-media-list /home/omm/media.list --client-port 9200
- 從該Schema 備份集中指定恢復customer(列存表)、public.nation(行存表)至liding11.customer十一、liding22.nation22
- 執行恢復指定多表:
python $GPHOME/script/GaussRoach.py -t restore --master-port 9500 --media-destination nbu_policy --media-type NBU --metadata-destination $GAUSSHOME/roachbackup/metadata --physical-fine-grained --backup-key 20201226_101715 --dbname test_tpch1 --table-list /home/omm/table.list --parallel-process 3 --restore-target-list /home/omm/target.list --clean --nbu-on-remote --nbu-media-list /home/omm/media.list --client-port 9200
- 數據校驗
4. 技術總結
本文主要從技術價值、應用場景、技術原理、技術實測展現幾個維度對GaussDB(DWS) 物理細粒度備份恢復技術進行了剖析,能夠看到物理細粒度備份恢復是對於已有全量數據備份恢復的一個有效的加強,客戶能夠以更靈活地方式規劃本身的冷熱數據,選擇更小的邏輯粒度進行備份或恢復,節省寶貴的備份存儲空間和cpu資源的同時,也更少地對在線業務帶來衝擊。在恢復層面,不一樣於舊有的集羣級全量恢復須要停集羣和清理數據,細粒度在線恢復不影響任何在線業務,也不會因恢復前清理集羣帶來可能的數據損失風險,所以該技術擁有較爲廣闊的前景和深遠的意義。
想了解GuassDB(DWS)更多信息,歡迎微信搜索「GaussDB DWS」關注微信公衆號,和您分享最新最全的PB級數倉黑科技~