摘要:本文將梳理Roach全量恢復的總體流程,描述Roach集羣全量備份場景的運起色制。
數據備份恢復是保護數據安全的重要手段之一。Roach工具支持多種備份恢復類型,例如集羣級的物理備份,表級備份的邏輯備份;分別支持DISK/NBU/OBS/EISOO幾種備份介質;支持雙集羣間的容災方案等,從而提供數據的可靠性保障機制。python
Roach支持以下功能:數據庫
本文將梳理Roach全量恢復的總體流程,描述Roach集羣全量備份場景的運起色制,PITR、增量備份、斷點續作、雙集羣、表級備份等功能不作闡述。安全
1、簡介
Roach的集羣級備份採用的是物理備份,即經過物理文件拷貝的方式對數據庫進行備份,經過備份的數據文件及日誌等文件,數據庫能夠進行徹底恢復。全量備份則是將當前時間點數據庫中全部的數據進行備份。固然,全備份能夠備份整塊硬盤、整個分區或某個具體的目錄。全備份的好處是數據恢復方便,由於全部的數據都在同一個備份中,因此只要恢復全備份,全部的數據都會被恢復。架構
其優勢是:物理備份速度快,經過合理規劃,能夠低成本進行備份和恢復;工具
其缺點是:相較於增量備份備份時間較長。大數據
2、備份架構
2.1 roach備份全局流程圖
Roach備份採用生產者-消費者模式,下圖展示了備份流程各個線程及IO交互圖。exec線程做爲生產者,同時爲減輕exec線程的壓力,增長並行的reader線程讀取小文件;sender線程做爲消費者;中間則是經過一個256MB(可設置)的大buffer銜接。url
GaussDB內核的備份組件爲GaussRoach.py和gs_roach,需在集羣內拉起備份任務。spa
2.2 調度流程
GaussRoach.py:Roach單集羣全量備份入口爲GaussRoach.py。每次命令行輸入「python GaussRoach.py –t backup…」後,roach的python語言模式就開始運行了。操作系統
任意節點都可做爲主節點拉起GaussRoach.py,而後每一個節點都啓動gs_roach進程負責本節點備份,各節點並行備份,節點內各DN並行備份。.net
2.3 備份具體流程
2.4 接口調用
完成數據備份壓縮後,須要將壓縮文件傳送到遠端存儲介質,實現存儲介質與Roach備份流程鬆耦合,第三方介質不用關注Roach的備份流程,只須要按照接口實現便可完成與Roach的對接。同時Roach流程實現也沒必要關注底層存儲介質實現,減小了沒必要要的分支判斷。
2.5 全量備份的內容
根據Gauss數據庫的功能結構,全量備份按照如下順序備份所須要的文件:
- 數據庫相關的配置文件。
- 行存所有數據:GaussDB A數據庫支持行存。
- xlog日誌文件:Roach支持在線業務的備份,則經過備份xlog日誌文件可在恢復時將備份期間的業務Redo,保證數據一致性。
- 列存所有數據: GaussDB A數據庫支持列存。
- 備份的數據按照每一個節點爲單位進行備份,因此每一個節點都只存儲當前節點的備份。
2.6 流程分析
結合Roach工具有份調度流圖和日誌信息分析以下:
整個備份流程的上層代碼爲python代碼,即GaussRoach.py,master進程的建立和agent進程的拉起都是由python側完成的。備份的配置和參數部分檢查過程一樣是由python側代碼完成。各個節點agent進程被拉起以後,C側代碼進行具體的業務操做。C側代碼運行起來以後,能夠經過ps ux到gs_roach進程查看進程狀態。
- ②:metadata清單即這次備份的文件清單;
- 只要沒有走到③ ,備份是沒有開始的;
- 備份時的百分比,並不表明時間維度的備份進度,只表明流程進度;
- 只要沒有打印出④ ,說明備份尚未結束,即便進度顯示是100%;
- ⑤:在此參數開啓後,全部的ddl語句會在邏輯上執行,對物理文件的操做不會當即生效;
- ⑥:create barrier以後的數據變化,將經過xlog記錄來備份;
- ⑨:關閉延遲DDL參數後,全部被延遲的對物理文件的操做,將會當即執行;
2.7 備份集的存儲形式
- 備份的數據會進行壓縮後寫入到rch文件後存儲到備份路徑下的實例文件夾下,且每一個rch文件大小是4GB;
- 存放路徑:[存儲路徑]/roach/backupkey/hostname/,其中存儲路徑爲備份命令中指定的--media-destination的值,backupkey爲當前備份開始的時間做爲標識某個特定的備份集,hostname爲當前節點的hostname。內容以下:
- Roach壓縮文件*.rch的內部結構:
- 控制備份的元數據,元數據存儲路徑爲備份命令中指定的--metadata-destination的值,其路徑下內容以下:
- ini文件中記錄着每次備份的元信息
{"BackupCount":1,"BackupDetails":[{"S_NO":1,"BackupKey":"20190814_163625","BackupType":"FULL", …….}
- roach文件夾存儲的爲特定某個備份的元信息
2.8 日誌回收
日誌是查看代碼運行狀態和錯誤定位的重要文件,Roach內核的回收日誌只能保證一個日誌回收點:$GAUSSLOG/roach/。
Roach日誌的管理可分爲三類:
- agent文件夾保存了內核側生成的日誌;
- controller文件夾保存了python側的調度信息;
- frame文件夾保存了雙集羣容災過程當中python側代碼生成的日誌。
(1)內核日誌
- 缺省狀況下,內核日誌僅記錄警告及以上級別的消息。Roach工具支持的日誌級別,及默認只有ERROR和Warning級別日誌。執行命令可開啓INFO級別日誌,
--logging –logging-level INFO
- 若是備份或恢復操做失敗,可查看控制檯中顯示的錯誤彙總,識別發生錯誤的主機。
(2)系統日誌
- Linux記錄系統事件至系統日誌中。Roach工具將FATAL及ERROR消息記入相同的系統日誌文件。例如,在運行SUSE Linux操做系統的設備上,Roach寫日誌到/var/log/messages文件。
(3)安全日誌
- 用戶能夠保存全部活動信息到文件中。安全日誌文件包括時間戳,以及備份,恢復和生成文件的詳細信息。安全日誌文件的文件名稱格式以下:roach-agent-security-YYYY-MM-DD_HHMMSS.log。
(4)控制器日誌
- 控制器日誌爲python腳本運行日誌,用戶能夠保存控制器日誌信息到文件中。
- 控制器日誌文件的格式以下:roach-controller-YYYY-MM-DD_HHMMSS.log。例如:roach-controller-2015-12-15_203415.log
遇到故障時,結合打屏信息和相應位置的日誌文件,能夠快速定位到出錯位置,提升解決問題效率。
3、總結
備份能解決數據丟失的找回、數據損壞的找回和歷史數據找回等功能,是構建容災方案的基礎,如何快速、有效實現大數據備份功能是這個時代一個很是重要的課題。
本文分享自華爲雲社區《數倉GaussDB(DWS)全量備份總結》,原文做者:不熄火 。