大數據“復活”記
1213
2025-03-31
數據備份恢復是保護數據安全的重要手段之一。Roach工具支持多種備份恢復類型,例如集群級的物理備份,表級備份的邏輯備份;分別支持DISK/NBU/OBS/EISOO幾種備份介質;支持雙集群間的容災方案等,從而提供數據的可靠性保障機制。
Roach支持如下功能:
序號
功能
1
物理備份恢復:全量備份、增量備份
2
邏輯備份恢復:單表、多表
3
物理備份集恢復到新集群
4
備份相關輔助功能:刪除/校驗/查看備份集、取消備份集
5
支持的存儲介質:本地DISK、遠端NAS/NBU/OBS/EISOO
6
支持的調度方式:命令行、FI、DWS管控面、EISOO界面(僅部分)
7
支持的集群形態:主備從、一主多備、小型化
8
雙集群容災:同構、異構(僅DISK)
9
雙集群遷移:離線遷移
10
斷點續做、NBU非侵入式部署等特性(僅部分介質)
本文將梳理Roach全量恢復的整體流程,描述Roach集群全量備份場景的運轉機制,PITR、增量備份、斷點續做、雙集群、表級備份等功能不做闡述。
一、簡介
Roach的集群級備份采用的是物理備份,即通過物理文件拷貝的方式對數據庫進行備份,通過備份的數據文件及日志等文件,數據庫可以進行完全恢復。全量備份則是將當前時間點數據庫中所有的數據進行備份。當然,全備份可以備份整塊硬盤、整個分區或某個具體的目錄。全備份的好處是數據恢復方便,因為所有的數據都在同一個備份中,所以只要恢復全備份,所有的數據都會被恢復。
其優點是:物理備份速度快,通過合理規劃,可以低成本進行備份和恢復;
其缺點是:相較于增量備份備份時間較長。
二、備份架構
2.1 roach備份全局流程圖
Roach備份采用生產者-消費者模式,下圖展現了備份流程各個線程及IO交互圖。exec線程作為生產者,同時為減輕exec線程的壓力,增加并行的reader線程讀取小文件;sender線程作為消費者;中間則是通過一個256MB(可設置)的大buffer銜接。
GaussDB內核的備份組件為GaussRoach.py和gs_roach,需在集群內拉起備份任務。
2.2 調度流程
GaussRoach.py:Roach單集群全量備份入口為GaussRoach.py。每次命令行輸入“python GaussRoach.py –t backup…”后,roach的python語言模式就開始運行了。
任意節點均可作為主節點拉起GaussRoach.py,然后每個節點都啟動gs_roach進程負責本節點備份,各節點并行備份,節點內各DN并行備份。
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進程查看進程狀態。
No.
Step
①
Creating Thread Roach Agent
②
RAGENT_EXEC_PREPARING_METADATA come
③
Enter the callback of rowstore copy
④
performBackup enter
⑤
Start delay ddl recycle before col file copy
⑥
Setting agent state to [AGNET_CREATING_BARRIER]
⑦
RAGENT_EXEC_BACKUP_XLOGFILES come
⑧
Enter the callback of colstore copy
⑨
Stop delay ddl recycle after having copied all col files
⑩
Setting Master state to [PERFORM_BOOKKEEPING_INFO]
②: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
遇到故障時,結合打屏信息和相應位置的日志文件,可以快速定位到出錯位置,提高解決問題效率。
三、總結
備份能解決數據丟失的找回、數據損壞的找回和歷史數據找回等功能,是構建容災方案的基礎,如何快速、有效實現大數據備份功能是這個時代一個非常重要的課題。
數據倉庫服務 GaussDB(DWS) 數據庫
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。