使用br工具進行TiDB快照備份和恢復

概述

TiDB 支持使用 br 工具進行備份恢復问词。
安裝方法可以使用 TiUP 在線安裝:

tiup install br

使用備份恢復功能的部署要求如下:

  • BR、TiKV 節(jié)點和備份存儲系統(tǒng)需要提供大于備份速度的的網(wǎng)絡(luò)帶寬勺馆。當集群特別大的時候戏售,備份和恢復速度上限受限于備份網(wǎng)絡(luò)的帶寬侨核。
  • 備份存儲系統(tǒng)還需要提供足夠的寫入/讀取性能 (IOPS),否則它有可能成為備份恢復時的性能瓶頸灌灾。
  • TiKV 節(jié)點需要為備份準備至少額外的兩個 CPU core 和高性能的磁盤搓译,否則備份將對集群上運行的業(yè)務(wù)產(chǎn)生影響。
  • 推薦 br 工具運行在 8 核+/16 GB+ 的節(jié)點上锋喜。

備份目錄的用戶所屬組是 tidb.tidb些己,
tikv節(jié)點的備份目錄下存放的是實際備份的數(shù)據(jù),而pd節(jié)點存放的是備份的元數(shù)據(jù)嘿般。

注:
不支持在一個集群上同時運行多個數(shù)據(jù)備份任務(wù)段标。
不支持在一個集群上同時運行快照備份任務(wù)和數(shù)據(jù)恢復任務(wù)。

TiDB 快照備份

快照備份是集群全量備份的一種實現(xiàn)炉奴。
它基于 TiDB 的MVCC實現(xiàn)逼庞,將指定快照包含的所有數(shù)據(jù)備份到目標存儲中。
備份下來的數(shù)據(jù)大小約等于集群(壓縮后的)單副本數(shù)據(jù)大小瞻赶。
備份完成之后赛糟,可以在一個空集群或不存在數(shù)據(jù)沖突(相同 schema 或 table)的集群執(zhí)行快照備份恢復,將集群恢復到快照備份時的數(shù)據(jù)狀態(tài)砸逊,同時恢復功能會依據(jù)集群副本設(shè)置恢復出多副本璧南。

快照備份命令:

tiup br backup full --pd "${PD_IP}:2379" \
    --backupts '2022-09-08 13:30:00 +08:00' \
    --storage "s3://backup-101/snapshot-202209081330?access-key=${access-key}&secret-access-key=${secret-access-key}" \
    --ratelimit 128 \

以上命令中:

  • --backupts:快照對應(yīng)的物理時間點,格式可以是 TSO 或者時間戳师逸,例如 400036290571534337 或者 2018-05-11 01:42:23 +08:00司倚。如果該快照的數(shù)據(jù)被垃圾回收 (GC) 了,那么 tiup br backup 命令會報錯并退出篓像。使用日期方式備份時动知,建議同時指定時區(qū),否則 br 默認使用本地時間構(gòu)造時間戳遗淳,可能導致備份時間點錯誤拍柒。如果你沒有指定該參數(shù),那么 br 會選取備份開始的時間點所對應(yīng)的快照屈暗。
  • --storage:數(shù)據(jù)備份到的存儲地址拆讯。快照備份支持以 Amazon S3养叛、Google Cloud Storage种呐、Azure Blob Storage 為備份存儲,以上命令以 Amazon S3 為示例弃甥。詳細存儲地址格式請參考外部存儲服務(wù)的 URI 格式爽室。
  • --ratelimit:每個TiKV備份數(shù)據(jù)的速度上限,單位為 MiB/s淆攻。

查看詳細使用幫助:

tiup br backup full --help

我們使用測試環(huán)境驗證備份單庫:

cd /home/tidb/.tiup/bin
./tiup br  backup db --db pingcap_test01 --pd "10.0.8.88:2379" --storage "/backup/tidb_backup"    --ratelimit 128

在快照備份過程中阔墩,終端會顯示備份進度條嘿架。在備份完成后,會輸出備份耗時啸箫、速度耸彪、備份數(shù)據(jù)大小等信息:

Starting component br: /home/tidb/.tiup/components/br/v8.1.1/br backup db --db pingcap_test01 --pd 10.0.8.88:2379 --storage /backup/tidb_backup --ratelimit 128
Detail BR log in /tmp/br.log.2024-10-21T15.53.14+0800
[2024/10/21 15:53:14.721 +08:00] [WARN] [backup.go:311] ["setting `--ratelimit` and `--concurrency` at the same time, ignoring `--concurrency`: `--ratelimit` forces sequential (i.e. concurrency = 1) backup"] [ratelimit=134.2MB/s] [concurrency-specified=4]
Database Backup <------------------------------------------------------------------------------------------------------------------------------------> 100.00%
Checksum <-------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
[2024/10/21 15:53:18.912 +08:00] [INFO] [collector.go:77] ["Database Backup success summary"] [total-ranges=2] [ranges-succeed=2] [ranges-failed=0] [backup-checksum=9.930648ms] [backup-fast-checksum=5.479934ms] [backup-total-ranges=2] [backup-total-regions=2] [total-take=4.19936762s] [total-kv=2] [total-kv-size=88B] [average-speed=20.96B/s] [backup-data-size(after-compressed)=3.288kB] [Size=3288] [BackupTS=453377312893173767]

備份路徑下會生成以下兩種類型文件:

  • SST 文件:存儲 TiKV 備份下來的數(shù)據(jù)信息
  • backupmeta 文件:存儲本次備份的元信息,包括備份文件數(shù)忘苛、備份文件的 Key 區(qū)間蝉娜、備份文件大小和備份文件 Hash (sha256) 值

查詢快照備份的時間點信息

查看某個快照備份對應(yīng)的快照物理時間點:

tiup br validate decode --field="end-version" \
--storage "s3://backup-101/snapshot-202209081330?access-key=${access-key}&secret-access-key=${secret-access-key}" | tail -n1

測試環(huán)境里執(zhí)行:

tiup br validate decode --field="end-version"  --storage "/backup/tidb_backup"  

輸出結(jié)果為:

Starting component br: /home/tidb/.tiup/components/br/v8.1.1/br validate decode --field=end-version --storage /backup/tidb_backup
Detail BR log in /tmp/br.log.2024-10-21T16.46.41+0800
453377312893173767

恢復快照備份數(shù)據(jù)

查看詳細使用幫助:

tiup br restore full --help

恢復到目標集群:

tiup br restore full --pd "${PD_IP}:2379" \
--storage "s3://backup-101/snapshot-202209081330?access-key=${access-key}&secret-access-key=${secret-access-key}"

測試環(huán)境恢復:

./tiup br restore full   --pd "10.0.8.88:2379" --storage "/backup/tidb_backup" 

恢復單庫:

./tiup br restore db --db pingcap_test01   --pd "10.0.8.88:2379" --storage "/backup/tidb_backup" 

恢復單表:

./tiup br restore table --db pingcap_test01  --table tab_tidb --pd "10.0.8.88:2379" --storage "/backup/tidb_backup" 

使用表庫過濾功能恢復部分數(shù)據(jù):

./tiup br  restore full   --pd "10.0.8.88:2379" --filter 'pingcap_test01.tab_tidb' --storage "/backup/tidb_backup"

測試打印結(jié)果為:

Starting component br: /home/tidb/.tiup/components/br/v8.1.1/br restore full --pd 10.0.8.88:2379 --filter pingcap_test01.tab_tidb --storage /backup/tidb_backup
Detail BR log in /tmp/br.log.2024-10-21T17.18.32+0800
Full Restore <---------------------------------------------------------------------------------------------------------------------------------------> 100.00%
[2024/10/21 17:18:37.004 +08:00] [INFO] [collector.go:77] ["Full Restore success summary"] [total-ranges=3] [ranges-succeed=3] [ranges-failed=0] [split-region=1.361125ms] [restore-ranges=2] [total-take=4.679754552s] [restore-data-size(after-compressed)=3.288kB] [Size=3288] [BackupTS=453377312893173767] [RestoreTS=453378654244438017] [total-kv=2] [total-kv-size=88B] [average-speed=18.8B/s]

再檢查數(shù)據(jù)庫相應(yīng)數(shù)據(jù)已恢復。

性能與影響

快照備份的性能與影響

TiDB 備份功能對集群性能(事務(wù)延遲和 QPS)有一定的影響扎唾,但是可以通過調(diào)整備份的線程數(shù) backup.num-threads召川,以及增加集群配置,來降低備份對集群性能的影響胸遇。

為了更加具體說明備份對集群的影響荧呐,下面列舉了多次快照備份測試結(jié)論來說明影響的范圍:

  • (使用 5.3 及之前版本)在默認配置下,單 TiKV 存儲節(jié)點上備份線程數(shù)量是節(jié)點 CPU 總數(shù)量的 75% 時狐榔,QPS 會下降到備份之前的 35% 左右坛增。
  • (使用 5.4 及以后版本)單 TiKV 存儲節(jié)點上備份的線程數(shù)量不大于 8、集群總 CPU 利用率不超過 80% 時薄腻,備份任務(wù)對集群(無論讀寫負載)影響最大在 20% 左右。
  • (使用 5.4 及以后版本)單 TiKV 存儲節(jié)點上備份的線程數(shù)量不大于 8届案、集群總 CPU 利用率不超過 75% 時庵楷,備份任務(wù)對集群(無論讀寫負載)影響最大在 10% 左右。
  • (使用 5.4 及以后版本)單 TiKV 存儲節(jié)點上備份的線程數(shù)量不大于 8楣颠、集群總 CPU 利用率不超過 60% 時尽纽,備份任務(wù)對集群(無論讀寫負載)幾乎沒有影響。

你可以通過如下方案手動控制備份對集群性能帶來的影響童漩。但是弄贿,這兩種方案在減少備份對集群的影響的同時,也會降低備份任務(wù)的速度矫膨。

  • 使用 --ratelimit 參數(shù)對備份任務(wù)進行限速差凹。請注意,這個參數(shù)限制的是把備份文件存儲到外部存儲的速度侧馅。計算備份文件的大小時危尿,請以備份日志中的 backup data size(after compressed) 為準。設(shè)置 --ratelimit 后馁痴,為了避免任務(wù)數(shù)過多導致限速失效谊娇,br 的 concurrency 參數(shù)會自動調(diào)整為 1。
  • 調(diào)節(jié) TiKV 配置項 backup.num-threads罗晕,限制備份任務(wù)使用的工作線程數(shù)量济欢。內(nèi)部測試數(shù)據(jù)表明赠堵,當備份的線程數(shù)量不大于 8、集群總 CPU 利用率不超過 60% 時法褥,備份任務(wù)對集群(無論讀寫負載)幾乎沒有影響茫叭。

通過限制備份的線程數(shù)量可以降低備份對集群性能的影響,但是這會影響到備份的性能挖胃,以上的多次備份測試結(jié)果顯示杂靶,單 TiKV 存儲節(jié)點上備份速度和備份線程數(shù)量呈正比。在線程數(shù)量較少的時候酱鸭,備份速度約為 20 MiB/線程數(shù)吗垮。例如,單 TiKV 節(jié)點 5 個備份線程可達到 100 MiB/s 的備份速度凹髓。

快照恢復的性能與影響

  • TiDB 恢復的時候會盡可能打滿 TiKV CPU烁登、磁盤 IO、網(wǎng)絡(luò)帶寬等資源蔚舀,所以推薦在空的集群上執(zhí)行備份數(shù)據(jù)的恢復饵沧,避免對正在運行的業(yè)務(wù)產(chǎn)生影響。

    • 備份數(shù)據(jù)的恢復速度與集群配置赌躺、部署狼牺、運行的業(yè)務(wù)都有比較大的關(guān)系。在內(nèi)部多場景仿真測試中礼患,單 TiKV 存儲節(jié)點上備份數(shù)據(jù)恢復速度能夠達到 100 MiB/s是钥。在不同用戶場景下,快照恢復的性能和影響應(yīng)以實際測試結(jié)論為準缅叠。

    • BR 提供了粗粒度的 Region 打散算法悄泥,用于提升大規(guī)模 Region 場景下的 Region 恢復速度。該算法通過命令行參數(shù) --granularity="coarse-grained" 控制肤粱,并默認啟用弹囚。在這個方式下每個 TiKV 節(jié)點會得到均勻穩(wěn)定的下載任務(wù),從而充分利用每個 TiKV 節(jié)點的所有資源實現(xiàn)并行快速恢復领曼。在實際案例中鸥鹉,大規(guī)模 Region 場景下,集群快照恢復速度最高提升約 3 倍悯森。使用示例如下:

    br restore full \
    --pd "${PDIP}:2379" \
    --storage "s3://${Bucket}/${Folder}" \
    --s3.region "${region}" \
    --granularity "coarse-grained" \
    --send-credentials-to-tikv=true \
    --log-file restorefull.log
    
    • 從 v8.0.0 起欣喧,br 命令行工具新增 --tikv-max-restore-concurrency 參數(shù)谬运,用于控制每個 TiKV 節(jié)點的最大 download 和 ingest 文件數(shù)量。此外,通過調(diào)整此參數(shù)遥赚,可以控制作業(yè)隊列的最大長度(作業(yè)隊列的最大長度 = 32 * TiKV 節(jié)點數(shù)量 * --tikv-max-restore-concurrency),進而控制 BR 節(jié)點的內(nèi)存消耗。

    通常情況下,--tikv-max-restore-concurrency 會根據(jù)集群配置自動調(diào)整细溅,無需手動設(shè)置。如果通過 Grafana 中的 TiKV-Details > Backup & Import > Import RPC count 監(jiān)控指標發(fā)現(xiàn) download 文件數(shù)量長時間接近于 0儡嘶,而 ingest 文件數(shù)量一直處于上限時喇聊,說明 ingest 文件任務(wù)存在堆積,并且作業(yè)隊列已達到最大長度蹦狂。此時誓篱,可以采取以下措施來緩解任務(wù)堆積問題:

    • 設(shè)置 --ratelimit 參數(shù)來限制下載速度,以確保 ingest 文件任務(wù)有足夠的資源凯楔。例如窜骄,當任意 TiKV 節(jié)點的硬盤吞吐量為 x MiB/s 且下載備份文件的網(wǎng)絡(luò)帶寬大于 x/2 MiB/s,可以設(shè)置參數(shù) --ratelimit x/2摆屯。如果任意 TiKV 節(jié)點的硬盤吞吐量為 x MiB/s 且下載備份文件的網(wǎng)絡(luò)帶寬小于或等于 x/2 MiB/s邻遏,可以不設(shè)置參數(shù) --ratelimit
    • 調(diào)高 --tikv-max-restore-concurrency 來增加作業(yè)隊列的最大長度虐骑。

參考手冊:

https://docs.pingcap.com/zh/tidb/stable/br-snapshot-guide
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末准验,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子廷没,更是在濱河造成了極大的恐慌糊饱,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颠黎,死亡現(xiàn)場離奇詭異济似,居然都是意外死亡,警方通過查閱死者的電腦和手機盏缤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蓖扑,“玉大人唉铜,你說我怎么就攤上這事÷筛埽” “怎么了潭流?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長柜去。 經(jīng)常有香客問我灰嫉,道長,這世上最難降的妖魔是什么嗓奢? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任讼撒,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘根盒。我一直安慰自己钳幅,他們只是感情好,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布炎滞。 她就那樣靜靜地躺著敢艰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪册赛。 梳的紋絲不亂的頭發(fā)上钠导,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機與錄音森瘪,去河邊找鬼牡属。 笑死,一個胖子當著我的面吹牛柜砾,可吹牛的內(nèi)容都是我干的湃望。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼痰驱,長吁一口氣:“原來是場噩夢啊……” “哼证芭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起担映,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤废士,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蝇完,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體官硝,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年短蜕,在試婚紗的時候發(fā)現(xiàn)自己被綠了氢架。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡朋魔,死狀恐怖岖研,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情警检,我是刑警寧澤孙援,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站扇雕,受9級特大地震影響拓售,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜镶奉,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一础淤、第九天 我趴在偏房一處隱蔽的房頂上張望崭放。 院中可真熱鬧,春花似錦值骇、人聲如沸莹菱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽道伟。三九已至,卻和暖如春使碾,著一層夾襖步出監(jiān)牢的瞬間蜜徽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工票摇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拘鞋,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓矢门,卻偏偏與公主長得像盆色,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子祟剔,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 概述 全量備份包含集群某個時間點的全量數(shù)據(jù)隔躲,但是不包含其他時間點的更新數(shù)據(jù),而 TiDB 日志備份能夠?qū)I(yè)務(wù)寫入 ...
    這貨不是王馬勺閱讀 73評論 0 0
  • 1物延、原理 熱備:采用物理備份方式宣旱,類似于xtrabackup。 2叛薯、適用場景和限制 適用場景:大數(shù)據(jù)量環(huán)境浑吟。需要較...
    開心的蛋黃派閱讀 139評論 0 0
  • 對集群進行快照備份 測試 --backupts:快照對應(yīng)的物理時間點,格式可以是 TSO[https://docs...
    旺仔QQ糖閱讀 207評論 0 0
  • 原文地址:https://alphahinex.github.io/2022/12/25/tidb-v6-pcta...
    AlphaHinex閱讀 1,529評論 0 3
  • TIDB是一款分布式關(guān)系型數(shù)據(jù)庫耗溜。它同時支持在線事務(wù)處理(OLTP)和在線分析處理(HTAP)组力。 它的處理時延在幾...
    譚英智閱讀 638評論 0 0