數倉業務容錯利器:物理細粒度備份恢復技術


摘要:隨着信息技術的發展,人類進入大數據時代,數據量呈現爆炸式的增長,金融領域數據承載核心業務,即便遭遇各種軟硬件錯誤或災難,也需要具備找回和快速恢復業務能力,因此備份恢復能力成為數倉的最關鍵能力之一。

本文分享自華為雲社區《不動如山,GaussDB(DWS)業務容錯利器——物理細粒度備份恢復技術》,原文作者:世紀末的魔術師 。

1. 技術概述

1.1 價值及主要內容

隨着信息技術的發展,人類進入大數據時代,數據量呈現爆炸式的增長,金融領域數據承載核心業務,即便遭遇各種軟硬件錯誤或災難,也需要具備找回和快速恢復業務能力,因此備份恢復能力成為數倉的最關鍵能力之一。GaussDB(DWS)支持了物理細粒度備份恢復能力。用戶可自定義備份整集群或部分數據庫元素,並進行靈活的單、多表恢復,有效縮減備份數據所需的時間窗口和存儲空間,同時聚焦於用戶業務場景的關鍵表的備份恢復。

物理細粒度備份恢復目前主要支持的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備份數據流向為:

  1. Roach agent將壓縮數據向Roach client分片傳輸;
  2. Roach agent調用NBU客戶端XBSA接口,請求NBU備份;
  3. NBU client將此請求轉發至NBU Master Server;
  4. NBU master服務器負責分配存儲到哪個NBU media服務器;
  5. Roach client將調用xbsa接口將備份數據傳輸至NBU Media Server;
  6. 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.customer11、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級數倉黑科技~

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM