淺談大數(shù)據(jù)的數(shù)據(jù)災(zāi)備建設(shè)
?一、引言
大數(shù)據(jù)時代,數(shù)據(jù)呈爆炸趨勢增長,很多企業(yè)都從大數(shù)據(jù)中獲得了利益,推動各自的業(yè)務(wù)上升了一個臺階。通過大數(shù)據(jù)技術(shù)的完善尤其是大數(shù)據(jù)和云容器技術(shù)相結(jié)合,各個企業(yè)已經(jīng)把自己的重要業(yè)務(wù)遷移到了大數(shù)據(jù)平臺。與此同時企業(yè)對數(shù)據(jù)可靠性和業(yè)務(wù)連續(xù)性保證的訴求也與日俱增,大數(shù)據(jù)災(zāi)備刻不容緩。
信息系統(tǒng)的災(zāi)備,會按照業(yè)務(wù)恢復(fù)的要求,設(shè)置為三級:數(shù)據(jù)級、應(yīng)用級和業(yè)務(wù)級。因業(yè)務(wù)級,除了需要IT系統(tǒng)的災(zāi)備建設(shè),還需要其他非IT資源的配合,所以不在本文討論范圍內(nèi)。
二、基礎(chǔ)概念
在討論信息系統(tǒng)災(zāi)備之前,需要明確兩個概念:RTO和RPO
RTO:(RecoveryTime Object)是指災(zāi)難發(fā)生后,從IT系統(tǒng)宕機(jī)導(dǎo)致業(yè)務(wù)停頓之刻開始,到IT系統(tǒng)恢復(fù)至可以支持各部門運(yùn)作,業(yè)務(wù)恢復(fù)運(yùn)營之時,此兩點(diǎn)之間的時間段稱為RTO。
RPO:(RecoveryPoint Objective,復(fù)原點(diǎn)目標(biāo))是指數(shù)據(jù)中心能容忍的最大數(shù)據(jù)丟失量,是指當(dāng)業(yè)務(wù)恢復(fù)后,恢復(fù)得來的數(shù)據(jù)和災(zāi)難發(fā)生前數(shù)據(jù)的差異,也就是能夠容忍的數(shù)據(jù)丟失量。
三、大數(shù)據(jù)的數(shù)據(jù)級災(zāi)備
大數(shù)據(jù)底層數(shù)據(jù)存儲使用HDFS實(shí)現(xiàn)。對HDFS的備份,其目的在于當(dāng)集群A上的數(shù)據(jù)出現(xiàn)問題,可以使用集群B上的數(shù)據(jù)進(jìn)行恢復(fù)。
HDFS在兩個集群間使用distcp命令實(shí)現(xiàn)數(shù)據(jù)復(fù)制。因distcp命令最終產(chǎn)生的是MR任務(wù),所以可以實(shí)現(xiàn)數(shù)據(jù)的并發(fā)拷貝。HDFS中的數(shù)據(jù)的存放,是以目錄的方式進(jìn)行存放。使用distcp時,需要指定源端集群的目錄和目標(biāo)端集群目錄。
- hadoop distcp
- hdfs://cluster1/user/app1
- hdfs://cluster2/user
如果有多個目標(biāo)集群,可以在目錄中指定更多的目標(biāo)集群。在使用distcp命令,也可以增加一些參數(shù),比如使用overwrite覆蓋已有的備份,或者使用update參數(shù)備份修改過的文件。
使用distcp的好處在于備份過程簡單。并且可以根據(jù)自身的需要,對整體集群或?qū)χ付ǖ哪繕?biāo)進(jìn)行備份。由于distcp能夠靈活使用,所以非常方便配合各種業(yè)務(wù)操作。當(dāng)每日完成數(shù)據(jù)加工操作后,可以在批量作業(yè)中調(diào)用disctcp將重要數(shù)據(jù)備份到異地機(jī)房進(jìn)行保存。
使用此種方法,需要建立目標(biāo)集群,同時對網(wǎng)絡(luò)帶寬有一定需求,所以此種災(zāi)備系統(tǒng)的成本較高。如果需要降低成本同時對備份和恢復(fù)的效率要求不高,也可以將HDFS中的數(shù)據(jù)導(dǎo)出為文本,使用磁帶庫的方式進(jìn)行備份。
大數(shù)據(jù)平臺中不僅需要對HDFS的數(shù)據(jù)進(jìn)行備份,HBase數(shù)據(jù)庫的災(zāi)備也尤為重要。HBase在大數(shù)據(jù)體系中,不僅承載OLAP的業(yè)務(wù),同時也具備OLTP業(yè)務(wù)承載能力。
在OLTP業(yè)務(wù)場景下,通常對RTO要求較高??梢钥紤]使用HBase數(shù)據(jù)庫提供的Replication(復(fù)制)技術(shù)。HBase當(dāng)前有3種Replication方式:
- 異步Replication
- 串行Replication
- 同步Replication
使用哪一種復(fù)制方式,需要根據(jù)對RTO和RPO的要求進(jìn)行確定。不同種類的復(fù)制方式,對于前端業(yè)務(wù)在數(shù)據(jù)庫中的操作效率,會有不同的感受。
HBase數(shù)據(jù)庫的備份原理,是對HLog進(jìn)行讀取并發(fā)給Slave端中進(jìn)行應(yīng)用,從而實(shí)現(xiàn)數(shù)據(jù)同步。每個Master節(jié)點(diǎn)中的RegionServer都有HLog,開啟HBase的復(fù)制方式,在RegionServer上會開啟一個單獨(dú)的線程讀取HLog,同時發(fā)送給Slave端。并通過Zookeeper記錄已經(jīng)發(fā)送的HLog的偏移量。在3種復(fù)制方式中,異步的復(fù)制方式對源端的HBase影響最小。
圖1.HBase Replication原理
HBase的Replication是一種較為高級的災(zāi)備方法。除了使用Replication也可以使用CopyTable、Export/Impor方式進(jìn)行HBase數(shù)據(jù)庫的數(shù)據(jù)災(zāi)備。
CopyTable是一種邏輯的數(shù)據(jù)備份技術(shù),其原理是對表的scan操作,對RegionServer會產(chǎn)生較大的壓力,對于OLTP的業(yè)務(wù)會有寫入操作的影響。但由于CopyTable的原理是使用HBase的API對表進(jìn)行scan操作,從而可以讓用戶自定義對表中數(shù)據(jù)抽取,同時目標(biāo)表的位置可以是本集群或遠(yuǎn)端集群。
- hbase.org.apache.hadoophbase.mapreduce.CopyTable
- --peer.adr=BkCluster:2181:/hbase
- --new.name=BkTable AppTable如果需要備份到本地集群,去掉peer.adr參數(shù)。
HBase的邏輯備份,還可以使用export/import方式。export\import方式不同于CopyTable方法的是,將備份的數(shù)據(jù)以sequence的格式,將數(shù)據(jù)保存到HDFS中。此方法相比于CopyTable在備份和恢復(fù)效率方面有所下降,但備份的數(shù)據(jù)可以離線進(jìn)行長期保留。
- 數(shù)據(jù)導(dǎo)出方法
- hbase.org.apache.hadoop.hbase.coprocessor.Export<tablename><outputdir>
- 數(shù)據(jù)導(dǎo)入方法hbase.org.apache..hadoop.hbase.comprocessor.Import<tablename><inputdir>
CopyTable和export/import兩種方法,都可以靈活的生成備份數(shù)據(jù),配合數(shù)據(jù)加工操作,完成重要數(shù)據(jù)進(jìn)行備份。但需要考慮在備份過程中對HBase的性能影響。
四、大數(shù)據(jù)的應(yīng)用級災(zāi)備
應(yīng)用級災(zāi)備,主要對業(yè)務(wù)等級較高,對RTO和RPO要求較高的業(yè)務(wù)系統(tǒng)而設(shè)計(jì)的。在大數(shù)據(jù)領(lǐng)域內(nèi),完成應(yīng)用級災(zāi)備,主要的實(shí)現(xiàn)方法是數(shù)據(jù)的雙加載方式。所謂的雙加載方式,是前端應(yīng)用對部署在不同地點(diǎn)的集群,同時加載數(shù)據(jù)。所有集群都寫入成功后,返回?cái)?shù)據(jù)寫入成功的標(biāo)志。G行目前采用的是,應(yīng)用級災(zāi)備和數(shù)據(jù)級災(zāi)備的混合模式。聯(lián)機(jī)業(yè)務(wù)采用應(yīng)用級災(zāi)備,聯(lián)機(jī)業(yè)務(wù)數(shù)據(jù)使用異步批量提交的方法,將數(shù)據(jù)提交給主數(shù)據(jù)集群。主機(jī)群通過定時批量的方法,將數(shù)據(jù)分別同步給兩個數(shù)據(jù)查詢集群,前端連接其中一個集群對外提供查詢服務(wù),并在一個查詢集群出現(xiàn)問題時,通過應(yīng)用程序的手動切換完成數(shù)據(jù)源的隔離,實(shí)現(xiàn)數(shù)據(jù)讀操作的切換。此種方式,將讀和寫的操作進(jìn)行了分離,在寫入操作出現(xiàn)問題時,讀操作任然可用。批量作業(yè)業(yè)務(wù),采用數(shù)據(jù)級容災(zāi),對重要數(shù)據(jù)進(jìn)行數(shù)據(jù)克隆或?qū)С鲞M(jìn)行保存。
應(yīng)用級災(zāi)備是一個系統(tǒng)工程,基礎(chǔ)數(shù)據(jù)層形成了多點(diǎn)保護(hù),相關(guān)的應(yīng)用系統(tǒng)和存儲系統(tǒng)也會改造為多活架構(gòu)。G行考慮到今后基于大數(shù)據(jù)平臺的聯(lián)機(jī)業(yè)務(wù)的發(fā)展,將平臺進(jìn)行了縱向切分,對聯(lián)機(jī)業(yè)務(wù)單獨(dú)建立集群,分離出OLTP業(yè)務(wù),并形成同城兩中心的多活架構(gòu)。
圖2.OLTP集群災(zāi)備
五、后續(xù)與展望
各行各業(yè)基于大數(shù)據(jù)技術(shù)在快速發(fā)展自己的業(yè)務(wù),將隨著業(yè)務(wù)的變化對大數(shù)據(jù)的災(zāi)備會提出更多的要求。G行也在根據(jù)自己的業(yè)務(wù),完善大數(shù)據(jù)系統(tǒng)的災(zāi)備建設(shè),尤其是基于大數(shù)據(jù)的實(shí)時業(yè)務(wù)的災(zāi)備建設(shè)。我們會將最新的大數(shù)據(jù)災(zāi)備建設(shè)方法,寫在此公眾號上。請關(guān)注我們的更新。