TiDB:10 TB超大數據庫每秒GB速度備份和還原

作為mysql數據的分佈式大型集群替代,TiDB被越來越多企業在生產中使用。作為一個超大的數據庫集群,對TB集合數據的備份和還原是一個難點和挑戰。最近TiDB官方在4.0 RC版本中新增加了一個數據備份和還原工具BR,用來實現對超大規模(10TB)數據的高速備份和還原,可以將備份還原速度提高到1GB/s甚至更高。本文蟲蟲就給大家介紹這個高性能備份還原工具BR。

概述

TiDB是一個與MySQL高度兼容的開放源代碼的NewSQL數據庫,支持混合事務處理/分析處理(HTAP)工作負載。對於大型TiDB集群而言,備份和還原長期以來一直是一個具有挑戰性的問題。由於數據分佈在不同的節點中,因此TiDB沒有一致的物理快照。

Mysdumpermyloader是MySQL數據中最常用的數據備份和還原工具。TiDB和MySQL協議兼容,所以TiDB中也使用他們進行備份和還原。但是對超大的TiDB集群mydumper不適用存在嚴重的短板:mydumper無法合理利用群集資源來提高備份速度。因此會嚴重影響應用程序請求甚至會導致TiDB的內存不足(OOM)錯誤。

根據實踐中的測試數據。TiDB Loader恢復1 TB的數據大約需要19個小時。很明顯,這樣的速度不能滿足日常數據高效恢復的需求。

因此,儘管可以使用mydumper和Loader做數據備份和恢復,但他們在對待大規模數據時候,已經完全不適應生產需求。因此,TiDB新引入了備份和還原工具BR。

主要原理

BR是用於快速分佈式備份和還原TiDB群集數據的命令行工具。與mydumper和Loader相比,BR更適合於TB級別的大規模TiDB數據集。

TiDB的經典體系架構如下圖

TiDB:10 TB超大數據庫每秒GB速度備份和還原

在TiDB平臺內部,主要組件如下:

TiDB Server是無狀態SQL層。

TiKV服務器是數據持久化的分佈式事務鍵值存儲層。

Placement Driver(PD)是服務器管理群集。

數據備份

BR的主要實現:水平可伸縮性和強一致性

TiDB:10 TB超大數據庫每秒GB速度備份和還原

1、執行數據備份命令時,會按順序執行以下操作:

首先從 PD 獲取相關元數據信息:

當前的 TS 作為備份快照的時間點

集群的 TiKV 節點信息

2、根據這些數據,在內部啟動一個新實例,獲取對應TS的數據庫或表信息,過程中會忽略系統數據庫information_schema,performance_schema和mysql。

3、備份子命令令根據需求執行如下操作:

全量備份:BR 遍歷全部庫表,並且根據這些表構建需要備份的 KV Range

單表備份:BR 根據該表構建需要備份的KV Range

4、最後,BR 將需要備份的KV Range收集後,構造完整的備份請求分發給集群內的 TiKV 節點。

數據恢復

TiDB:10 TB超大數據庫每秒GB速度備份和還原

對數據庫恢復,BR按順序執行以下任務:

1、解析備份路徑下的backupMeta文件,根據解析出來的庫表信息,新創建一個實例在新集群創建對應的庫表。

2、對解析出來的SST文件,進行表聚合。

3、根據Key Range進行預切分 Region,使得各個Region至少對應一個SST文件。

4、遍歷要恢復的每一張表和其對應的SST文件。

5、找到Region,發送下載文件的請求到對應的TiKV節點,下載成功後,發送加載請求。

6、TiKV 收到加載SST文件的請求後,利用 Raft 機制保證加載 SST 數據的強一致性。

7、在加載成功後,下載下來的 SST 文件會被異步刪除。

完成恢復操作後,BR會對恢復後的數據校驗計算,和備份數據進行對比。

BR使用初步

BR命令是由子命令、選項和參數組成的。一個典型的命令如下:

br backup full --pd "${PDIP}:2379" -s "local:///tmp/backup"


子命令不帶-和--的字符(如本例中的backup,full)。選項即以-或者--開頭的字符(本例中的-s或者等效的—storage,--pd)。參數即子命令或選項字符後緊跟的、並傳遞給命令和選項的字符,一般要用引號括住(本例中的

常見子命令

BR 命令由多層構成。BR支持backup、restore 和 version 三個子命令:

backup 用於備份TiDB集群

restore 用於恢復TiDB集群

version 用於顯示BR版本信息

以上三個子命令可能還包含下面的一些子命令:

full:可用於全庫備份或恢。

db:可用於備份或恢復集群中的特定的數據庫。

table:可用於備份或恢復集群中特定的單張表。

常用選項

--pd:用於連接的選項,表示PD服務地址。

-h/--help:獲取所有命令和子命令的使用幫助。比如 br backup --help。

--ca:指定 PEM 格式的受信任CA的證書文件路徑。

--cert:指定 PEM 格式的SSL證書文件路徑。

--key:指定 PEM 格式的SSL證書密鑰文件路徑。

--status-addr:BR 向Prometheus提供統計數據的監聽地址。

實例:

備份全部集群數據:

br backup full \\

--pd "${PDIP}:2379" \\

--storage "local:///tmp/backup" \\

--ratelimit 120 \\

--concurrency 4 \\

--log-file backupfull.log

所有集群數據會被備份到各自TiKV節點的 /tmp/backup 路徑,同時備份的元數據文件backupmeta。--ratelimit 和 --concurrency 選項限制了每個TiKV執行備份任務的速度上限(單位 MiB/s)和併發數上限。--log-file 選項指定把 BR 的 log 寫到 backupfull.log 文件中。

備份期間有進度條在終端中顯示。當進度條前進到 100% 時,說明備份已完成。。進度條效果如下:

Full Backup 19.02%.

備份單個庫

br backup db \\

--pd "${PDIP}:2379" \\

--db test \\

--storage "local:///tmp/backup" \\

--ratelimit 120 \\

--concurrency 4 \\

--log-file backuptable.log

備分單個表

br backup table \\

--pd "${PDIP}:2379" \\

--db test \\

--table usertable \\

--storage "local:///tmp/backup" \\

--ratelimit 120 \\

--concurrency 4 \\

--log-file backuptable.log

恢復操作

br restore full \\

--pd "${PDIP}:2379" \\

--storage "local:///tmp/backup" \\

--concurrency 128 \\

--log-file restorefull.log

官方基準測試(10TB)

官方提供了BR備份恢復的基準測試,其結果如下圖所示

對10 TB數據的群集,BR能夠以2.7 GB/s的平均速度(五個TiDB實例的平均548 MB/s)。測試期間的最大速度略高於4 GB/s,每個實例的最大備份速度在770 MB/s至866 MB/s之間。

對10 TB數據集群,恢復操作平均速度為0.7 GB/s,五個TiDB實例的平均速度為150 MB/s。在測試過程中,BR的最大存儲速度約為1.2 GB/s,每個實例的最大恢復速度為247 MB​​/s至268 MB/s。

備份速度

備份了兩個表。在下圖中,綠色曲線代表所有TiKV實例的總體備份速度,其他曲線代表每個實例的備份速度。

TiDB:10 TB超大數據庫每秒GB速度備份和還原

在11:15和11:28,備份索引數據。由於索引條目很短,因此備份速度會降低。

恢復速度

備份後,還原了兩個表。綠色曲線代表總體還原速度,其他曲線代表每個TiKV實例的還原速度。

BR將還原任務分為多個子任務,然後按順序執行這些子任務。這樣我們可以看到圖中的故障。它們可能是需要進一步優化的潛在問題。

TiDB:10 TB超大數據庫每秒GB速度備份和還原

在1:00和1:15,將還原索引數據。因為索引條目很短,所以還原速度會降低。


分享到:


相關文章: