一文帶你瞭解GaussDB(DWS) 的Roach邏輯備份實現原理

摘要:Roach工具是GaussDB(DWS)推出的一款主力的備份恢復工具,包含物理與邏輯備份兩種主要能力,本文着重於講解Roach邏輯備份的實現原理。

1、簡介

在大數據時代,數據的完整和可靠性成爲一個數倉最核心的能力之一。GaussDB(DWS)以其出衆的分佈式計算和存儲能力廣受用戶青睞的同時,也特別着眼於數據備份容災領域的創新和打磨。數據的可靠性能夠說是數倉的「命門」。對於企業、政府等用戶,若是由於硬件故障致使的文件損壞,或是業務操做的誤刪,致使了數據損壞或丟失,那麼損失將是不可估量的。GaussDB(DWS)提供的Roach工具,將以其穩定、快速、可靠的備份能力,經過備份恢復數據庫或業務表,爲客戶準備一個可靠的「後悔藥」,從而有效地挽回客戶損失。html

2、Roach備份恢復基本框架

GaussDB(DWS)的Roach工具,同時提供物理備份和邏輯備份兩種主要形態的備份。物理備份直接經過拷貝文件塊,存儲於備份介質之上,恢復時使用備份的文件塊,重建集羣中實例DN與CN的數據目錄進行恢復。python

本文中咱們主要着眼於邏輯備份,在當前的GaussDB(DWS)中,相比於物理備份,邏輯備份擁有更好的靈活性,其充分利用了GaussDB(DWS)強大的數據導入導出能力,不一樣於物理備份的文件總體拷貝,邏輯備份針對數據庫的邏輯對象進行抽取和備份,粒度能夠作到表級、schema級、database級,根據客戶須要進行定製選擇;在一個擁有成千上萬表的客戶數倉中,若是僅想要備份一張表,那麼當前邏輯備份是更好的選擇。sql

在邏輯備份講解以前,咱們首先講一下Roach工具的設計架構,這個框架是一切邏輯或者物理備份的實現基礎——數據庫

圖1 Roach備份恢復工具框架示意圖架構

GaussDB(DWS)提供的Roach是一個分佈式的備份恢復工具,以一個Node一、二、3組成的集羣爲例,備份的總入口是python進程GaussRoach.py,它將在當前節點拉起一個roach master進程,在集羣其餘全部節點各拉起一個roach agent進程,是典型的master-slave框架,master進程與全部的agent進程分別創建TCP長鏈接,並封裝報文與各個節點通訊,下發備份等任務,在每一個節點上,將分佈式地爲節點上的CN、DN等數據庫對象進行備份。app

3、邏輯備份的原理

下面簡述一下邏輯備份的執行過程:框架

1)待備份表定義的導出和備份

若是是庫級的備份,將逐個schema地進行元數據導出;處理每個schema時,又將逐個導出全部的表定義,所以,咱們下圖展現了Roach邏輯備份導出一個表DDL的過程。Roach Master節點接到備份指令後,向一個有CN的節點Roach Agent下發指令,該Agent進程再調用gs_dump,連CN進行表定義DDL的導出。異步

圖2 邏輯備份表元數據DDL導出備份示意圖socket

2)建立外表

Roach邏輯備份過程,本質是創建外表進行數據導出的過程,相似上一步的表定義導出,Roach Agent接受Master指令後,基於導出的表定義,連CN建立寫外表,建立的外表使用gsmpp_server, server的option中,location爲roach://{Roach Agent監聽端口},其中,Roach Agent監聽端口爲參數可配置,將接受該節點上全部DN實例的鏈接,Roach邏輯備份外表定義相似以下形式,該待備份表僅有一個int類型字段id,圖中舉例的Roach Agent監聽端口爲8080,可配置,導出格式爲csv。分佈式

圖3 Roach邏輯備份建立的外表

3)Roach工具與DN的建連及數據導出備份

當前GaussDB(DWS)的集中主要數據導入導出外表包括GDS、HDFS、OBS、Roach等四種,Roach外表同其餘幾種外表相似,都經過FDW(Foreign Data Wrapper)完成,但註冊了一系列屬於Roach的FDW API接口實現,此外,Roach還實現了Open/Read/Write/Close/ErrorReport等五個主要的底層讀寫API,實現DN與Roach Agent之間的數據交互。

圖4 邏輯備份表數據備份流程示意圖

如圖4所示,邏輯備份數據的流程能夠用如下phase1 ~ phase5簡單描述

  • Phase1: 備份數據的命令被Master下發給全部Agent,連一個CN,連數據庫建立外表導出server、建立導出外表,每一個節點的Roach Agent一樣會建立一個TblServer線程,監聽Agent Port端口,等待DN鏈接;
  • Phase2: 連一個CN執行insert into roachft select * from A;sql查詢會被下發到全部DN,經過註冊的Roach FDW API,DN調用回調函數,封裝一個PGXCNode的消息,以自明instance身份,去嘗試鏈接server url中的本節點Agent Port;
  • Phase3: Roach Agent的TblServer每接收一個DN的鏈接,會分配一個數據通訊的socket槽位,並fork一個子進程爲該DN實例的備份服務;Agent會等待該節點上全部的DN都創建鏈接,建立lengthof(節點全部DN)個子進程,並行進行數據備份。
  • Phase4: 每一個備份子進程經過創建的鏈接,不斷讀取表數據,待該表全部切分的數據塊讀取完成,發送一個FINISH_BACKUP消息給Roach Agent,則中止數據傳輸,從DN讀取的數據首先存入Agent子進程的buffer中。
  • Phase5: 每一個Agent進程內會建立一個BackupSender線程,負責消費存入buffer的表數據,與備份介質創建鏈接,流式進行數據的發送;Phase四、5在實際運行中是個異步並行的動做,並不是等全部表數據都寫入buffer後,才向備份介質發送。

4、小結

關於Roach邏輯備份的原理大體就講解完成了,邏輯備份可以有效地應對單表、schema級等較細粒度的備份,較爲靈活和便利。邏輯備份的恢復的過程,與上述備份過程基本是個逆向過程,簡而言之即表定義恢復,節點及DN元數據恢復,數據導入的過程,恢復的一大優點是,不會停集羣或移動其餘數據,對其餘庫或者表的業務幾乎不影響。在後續的博文中,咱們能夠更詳細地解讀。

文末彩蛋:

臨近華爲雲3月開年採購季

據內部可靠消息,採購季中數倉GaussDB(DWS)

包月包年都將有重大優惠,對企業用戶尤其友好!!!

PS:關注數倉GaussDB(DWS)公衆號,get最新最全的產品資訊和數倉黑科技,更有超多活動,福利不停歇!歡迎訪問數倉GaussDB(DWS)開發者論壇,產品特性隨時交流,求助問題還有專家在線實時答疑哦~掃描下方二維碼關注我哦↓↓↓

本文分享自華爲雲社區《侵略如火,GaussDB(DWS)高可用容災利器之邏輯備份》,原文做者:世紀末的魔術師。

 

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

相關文章
相關標籤/搜索