HBase的備份以及恢復(fù)方案

HBase Backup/Restore 方案

?本文開始我們會(huì)介紹HBase關(guān)于Backup/Restore的方案,雖然HBase2.0的release 版本里面并不會(huì)帶有該功能,但是我們ApsaraDB for HBase會(huì)對(duì)應(yīng)的提供該功能。我們經(jīng)常會(huì)聽到“某某某DBA誤操作把整張表刪了”,“某某磁盤故障,造成數(shù)據(jù)庫(kù)的某個(gè)庫(kù)的數(shù)據(jù)全部損壞了”。這種由于外在和內(nèi)在的原因造成的數(shù)據(jù)不可靠,最終會(huì)給用戶帶來(lái)毀滅性的災(zāi)難。所以基本上所有的數(shù)據(jù)庫(kù)都會(huì)對(duì)應(yīng)的提供Backup/Restore的方案,以防用戶誤操物理上刪除了一整個(gè)表或者別的問(wèn)題造成的悲?。?一般通過(guò)定時(shí)的做備份無(wú)論是全量數(shù)據(jù)做備份還是對(duì)增量數(shù)據(jù)做備份,此外一旦遇到上面提到“悲劇”,通過(guò)一鍵命令就可以恢復(fù)數(shù)據(jù);
?本文開始我們大概的文章架構(gòu)是:常見的數(shù)據(jù)庫(kù)backup/restore方案;云HBase的Backup/Restore方案;我們接下來(lái)的工作計(jì)劃;

1.常見的數(shù)據(jù)庫(kù)Backup/Restore方案

?單機(jī)的數(shù)據(jù)庫(kù)有MySQL,pg等,一般的話,MySQL的備份的話,可以有備份數(shù)據(jù)文件的方式到本地磁盤,也有直接進(jìn)行邏輯備份,操作的SQL語(yǔ)句;其他的單機(jī)數(shù)據(jù)庫(kù)使用的技術(shù)也是差不多;
?分布數(shù)據(jù)庫(kù)的話Cassandra的話,也是對(duì)數(shù)據(jù)做快照,然后copy 文件到一個(gè)備份的地方,增量備份的話使用備份wal log的方式,但是存在問(wèn)題是:恢復(fù)的話,需要恢復(fù)到對(duì)等的拓?fù)浣Y(jié)構(gòu)的集群,再次增量備份wal的話會(huì)存在多倍的網(wǎng)卡開銷;
?現(xiàn)在來(lái)大概介紹HBase的備份和恢復(fù)的機(jī)制,和單機(jī)數(shù)據(jù)庫(kù)對(duì)比的話意義不大。全量數(shù)據(jù)備份的話,HBase會(huì)對(duì)本地文件做一個(gè)snapshot,然后通過(guò)mr的方式將數(shù)據(jù)文件copy到一個(gè)特定的指定地方,增量備份的話,通過(guò)將wal log轉(zhuǎn)換為Hfile,然后copy到遠(yuǎn)端一個(gè)特定備份的地方。這種增量備份是主要備份wal log,且是指定時(shí)間的做備份,一天或者一周。
?對(duì)于恢復(fù)模塊的話,可以是全量的數(shù)據(jù)恢復(fù)以及增量的數(shù)據(jù)恢復(fù),基本的邏輯都是將文件copy到HDFS上,然后做一次bulkload即可將數(shù)據(jù)恢復(fù)回來(lái)。

2.云HBase的Backup/Restore方案

?這里分別從4個(gè)方面進(jìn)行介紹,主要是:常見使用方法,全量數(shù)據(jù)備份和恢復(fù),增量數(shù)據(jù)備份和恢復(fù),我們即將提供的一些特定功能。

?ApsaraDB for HBase提供的數(shù)據(jù)備份 可以支持備份到不同地區(qū)的HDFS,也支持備份到OSS上面。大概的邏輯可以參考下面的圖
2.1. 使用方法

2.1.1.hbase backup create full/incremental path
full:創(chuàng)建全量備份
incremental:創(chuàng)建增量備份 path:備份到的文件系統(tǒng)以及對(duì)應(yīng)的路徑
可以跟的選項(xiàng):-t table;如果不寫就是全部的表都備份
-w 后面跟的數(shù)字,表示多少個(gè)工作任務(wù)
-s 備份的set
-b 控制備份的帶寬
2.1.2.hbase restore path backupid path:備份的路徑
backupid:備份的id;
后面可以的選項(xiàng): -o 覆蓋之前的表
-t 備份的表,其他選項(xiàng)類似
2.1.3.hbase backup merge <backup_ids>
把一些backup的id進(jìn)行merge,可以是每日的backup merge成一個(gè);
2.1.4.hbase backup progress <backup_id>
展示backup進(jìn)度

2.2.全量備份和恢復(fù)

這里說(shuō)的全量備份,主要是從某一個(gè)時(shí)間點(diǎn)開始做數(shù)據(jù)備份,這個(gè)點(diǎn)之前都沒有做過(guò)備份,那么這次備份就是全量數(shù)據(jù)備份,需要使用create full 這個(gè)命令;備份的path是我們預(yù)先設(shè)定好的可以是HDFS的路徑也可以是OSS的路徑,那么對(duì)應(yīng)的HBase就會(huì)存在下面幾個(gè)流程

1.backup:system表做snapshot;
2.全局barrier然后讓各個(gè)rs做log roll,并將各個(gè)rs的最新的log的ts記錄到backup:system表了;
3.然后各個(gè)rs做snapshot,然后mr跑數(shù)據(jù),做數(shù)據(jù)copy到對(duì)應(yīng)path下;完成以后update下system表;并將數(shù)據(jù)更新到備份的文件系統(tǒng)上面。

?上面大概就是HBase的全量備份的流程,整個(gè)流程下來(lái),我們做一個(gè)對(duì)比,因?yàn)镠Base 在Hadoop生態(tài)下面,引入MR做批處理數(shù)據(jù)操作是輕而易舉的事情,但是別的分布式數(shù)據(jù)庫(kù)做這個(gè)操作就是比較困難的。下面的流程是HBase做全量恢復(fù)的流程

0.load 最新的table的原信息(通過(guò)備份好的文件),對(duì)應(yīng)的在restore的節(jié)點(diǎn)上面進(jìn)行建表;
1.把對(duì)應(yīng)的full backup下面的data通過(guò)mr的形式丟在hdfs上面的一個(gè)臨時(shí)文件下面;
2.bulkload對(duì)應(yīng)的這些文件;

?同理整個(gè)流程下來(lái)主要是依賴MR的批處理能力做加速,當(dāng)然通過(guò)bulkload將文件進(jìn)行恢復(fù)也是海量數(shù)據(jù)下的恢復(fù)的最快的一種辦法;

2.3.增量備份和恢復(fù)

?增量的備份的話,主要是在一個(gè)HBase集群做完一次全量備份以后的每一次的增量數(shù)據(jù)的備份都叫做增量備份,HBase主要是依賴WAL log做數(shù)據(jù)備份的主體,因?yàn)閃AL log是增量數(shù)據(jù)里面最全的,先寫wal 才可以存Memstore,大概的備份和恢復(fù)的流程如下:

0.發(fā)送log roll到各個(gè)rs;各個(gè)rs也會(huì)把自己的當(dāng)前的log最新信息記錄到backup:system里面;
1.wal log轉(zhuǎn)為hfile;(mr任務(wù))
2.mr做數(shù)據(jù)copy到遠(yuǎn)端;
3.記錄完成的wal log到backup:system表里;

0.load 最新的table的原信息,對(duì)應(yīng)的在restore的節(jié)點(diǎn)上面進(jìn)行建表等;
1.先做full restore,完成以后一步步的做增量的恢復(fù),增量恢復(fù)到的時(shí)間點(diǎn)是你做增量的備份成功給出的那個(gè)backup id;
2.每一步都是先把wal的變成的hfile,做bulkload;

上述的方式除了可以引用MR做批處理外,保證輸出的輸出是一份完整的HFile,而不是某些DB那種各個(gè)節(jié)點(diǎn)輸出一份數(shù)據(jù),多倍數(shù)據(jù)輸出,消耗了網(wǎng)卡等資源。

結(jié)束語(yǔ)

接下來(lái)我們會(huì)在現(xiàn)有backup/restore的基礎(chǔ)上提供多種比較貼近生產(chǎn)需求的功能,比如cancel某個(gè)任務(wù),恢復(fù)某個(gè)時(shí)間range的數(shù)據(jù),保證功能穩(wěn)定性等等。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容