HBase高可用原理與實(shí)踐

網(wǎng)易視頻云技術(shù)分享:HBase高可用原理與實(shí)踐 - vcould163的博客 - 博客頻道 - CSDN.NET
http://blog.csdn.net/vcould163/article/details/51487935

網(wǎng)易視頻云是網(wǎng)易傾力打造的一款基于云計(jì)算的分布式多媒體處理集群和專(zhuān)業(yè)音視頻技術(shù)爬迟,提供穩(wěn)定流暢、低時(shí)延暇咆、高并發(fā)的視頻直播侨歉、錄制、存儲(chǔ)、轉(zhuǎn)碼及點(diǎn)播等音視頻的PAAS服務(wù),在線教育杖们、遠(yuǎn)程醫(yī)療悉抵、娛樂(lè)秀場(chǎng)、在線金融等各行業(yè)及企業(yè)用戶(hù)只需經(jīng)過(guò)簡(jiǎn)單的開(kāi)發(fā)即可打造在線音視頻平臺(tái)≌陀ǎ現(xiàn)在基跑,網(wǎng)易視頻云的技術(shù)專(zhuān)家給大家分享一則技術(shù)文:HBase高可用原理與實(shí)踐婚温。
前言
前段時(shí)間有套線上HBase出了點(diǎn)小問(wèn)題描焰,導(dǎo)致該套HBase集群服務(wù)停止了2個(gè)小時(shí),從而造成使用該套HBase作為數(shù)據(jù)存儲(chǔ)的應(yīng)用也出現(xiàn)了服務(wù)異常栅螟。在排查問(wèn)題之余荆秦,我們不禁也在思考,以后再出現(xiàn)類(lèi)似的問(wèn)題怎么辦力图?這種問(wèn)題該如何避免步绸?用慣了MySQL,于是乎想到了HBase是否跟MySQL一樣吃媒,也有其高可用方案瓤介?
答案當(dāng)然是肯定的,幾乎所有的數(shù)據(jù)庫(kù)(無(wú)論是關(guān)系型還是分布式的)赘那,都采用WAL的方式來(lái)保障服務(wù)異常時(shí)候的數(shù)據(jù)恢復(fù)刑桑,HBase同樣也是通過(guò)WAL來(lái)保障數(shù)據(jù)不丟失。HBase在寫(xiě)數(shù)據(jù)前會(huì)先寫(xiě)HLog募舟,HLog中記錄的是所有數(shù)據(jù)的變動(dòng)祠斧, HBase的高可用也正是通過(guò)HLog來(lái)實(shí)現(xiàn)的。
進(jìn)階
HBase是一個(gè)沒(méi)有單點(diǎn)故障的分布式系統(tǒng)拱礁,上層(HBase層)和底層(HDFS層)都通過(guò)一定的技術(shù)手段琢锋,保障了服務(wù)的可用性。上層HMaster一般都是高可用部署呢灶,而RegionServer如果出現(xiàn)宕機(jī)吴超,region遷移的代價(jià)并不大,一般都在毫秒級(jí)別完成鸯乃,所以對(duì)應(yīng)用造成的影響也很有限鲸阻;底層存儲(chǔ)依賴(lài)于HDFS,數(shù)據(jù)本身默認(rèn)也有3副本飒责,數(shù)據(jù)存儲(chǔ)上做到了多副本冗余赘娄,而且Hadoop 2.0以后NameNode的單點(diǎn)故障也被消除。所以宏蛉,對(duì)于這樣一個(gè)本身沒(méi)有單點(diǎn)故障遣臼,數(shù)據(jù)又有多副本冗余的系統(tǒng),再進(jìn)行高可用的配置是否有這個(gè)必要拾并?會(huì)不會(huì)造成資源的極大浪費(fèi)揍堰?
高可用部署是否有必要鹏浅,這個(gè)需要根據(jù)服務(wù)的重要性來(lái)定,這里先簡(jiǎn)單介紹下沒(méi)有高可用的HBase服務(wù)會(huì)出現(xiàn)哪些問(wèn)題:
數(shù)據(jù)庫(kù)管理人員失誤屏歹,進(jìn)行了不可逆的DDL操作
不管是什么數(shù)據(jù)庫(kù)隐砸,DDL操作在執(zhí)行的時(shí)候都需要慎之又慎,很可能一條簡(jiǎn)單的drop操作蝙眶,會(huì)導(dǎo)致所有數(shù)據(jù)的丟失季希,并且無(wú)法恢復(fù),對(duì)于HBase來(lái)說(shuō)也是這樣幽纷,如果管理員不小心drop了一個(gè)表式塌,該表的數(shù)據(jù)將會(huì)被丟失。
離線MR消耗過(guò)多的資源友浸,造成線上服務(wù)受到影響
HBase經(jīng)過(guò)這么多年的發(fā)展峰尝,已經(jīng)不再是只適合離線業(yè)務(wù)的數(shù)據(jù)存儲(chǔ)分析平臺(tái),許多公司的線上業(yè)務(wù)也相繼遷移到了HBase上收恢,比較典型的如:facebook的Messages系統(tǒng)武学、360的搜索業(yè)務(wù)、小米米聊的歷史數(shù)據(jù)等等伦意。但不可避免在這些數(shù)據(jù)上做些統(tǒng)計(jì)分析類(lèi)操作火窒,大型MR跑起來(lái),會(huì)有很大的資源消耗默赂,可能會(huì)影響線上業(yè)務(wù)沛鸵。
不可預(yù)計(jì)的另外一些情況
比如核心交換機(jī)故障,機(jī)房停電等等情況都會(huì)造成HBase服務(wù)中斷
對(duì)于上述的那些問(wèn)題缆八,可以通過(guò)配置HBase的高可用來(lái)解決:
不可逆DDL問(wèn)題
HBase的高可用不支持DDL操作曲掰,換句話說(shuō),在master上的DDL操作奈辰,不會(huì)影響到slave上的數(shù)據(jù)栏妖,所以即使在master上進(jìn)行了DDL操作,slave上的數(shù)據(jù)依然沒(méi)有變化奖恰。這個(gè)跟MySQL有很大不同吊趾,MySQL的DDL可以通過(guò)statement格式的Binlog進(jìn)行復(fù)制。
離線MR影響線上業(yè)務(wù)問(wèn)題
高可用的最大好處就是可以進(jìn)行讀寫(xiě)分離瑟啃,離線MR可以直接跑在slave上论泛,master繼續(xù)對(duì)外提供寫(xiě)服務(wù),這樣也就不會(huì)影響到線上的業(yè)務(wù)蛹屿,當(dāng)然HBase的高可用復(fù)制是異步進(jìn)行的屁奏,在slave上進(jìn)行MR分析,數(shù)據(jù)可能會(huì)有稍微延遲错负。
意外情況
對(duì)于像核心交換機(jī)故障坟瓢、斷電等意外情況勇边,slave跨機(jī)架或者跨機(jī)房部署都能解決該種情況。
基于以上原因折联,如果是核心服務(wù)粒褒,對(duì)于可用性要求非常高,可以搭建HBase的高可用來(lái)保障服務(wù)較高的可用性诚镰,在HBase的Master出現(xiàn)異常時(shí)奕坟,只需簡(jiǎn)單把流量切換到Slave上,即可完成故障轉(zhuǎn)移怕享,保證服務(wù)正常運(yùn)行执赡。
原理
HBase高可用保證在出現(xiàn)異常時(shí)镰踏,快速進(jìn)行故障轉(zhuǎn)移函筋。下面讓我們先來(lái)看看HBase高可用的實(shí)現(xiàn),首先看下官方的一張圖:

HBase Replication
需要聲明奠伪,HBase的replication是以Column Family為單位的跌帐,每個(gè)Column Family都可以設(shè)置是否進(jìn)行replication。
上圖中绊率,一個(gè)Master對(duì)應(yīng)了3個(gè)Slave谨敛,Master上每個(gè)RegionServer都有一份HLog,在開(kāi)啟Replication的情況下滤否,每個(gè)RegionServer都會(huì)開(kāi)啟一個(gè)線程用于讀取該RegionServer上的HLog脸狸,并且發(fā)送到各個(gè)Slave,Zookeeper用于保存當(dāng)前已經(jīng)發(fā)送的HLog的位置藐俺。Master與Slave之間采用異步通信的方式炊甲,保障Master上的性能不會(huì)受到Slave的影響。用Zookeeper保存已經(jīng)發(fā)送HLog的位置欲芹,主要考慮在Slave復(fù)制過(guò)程中如果出現(xiàn)問(wèn)題后重新建立復(fù)制卿啡,可以找到上次復(fù)制的位置。

HBase Replication步驟
HBase Client向Master寫(xiě)入數(shù)據(jù)
對(duì)應(yīng)RegionServer寫(xiě)完HLog后返回Client請(qǐng)求
同時(shí)replication線程輪詢(xún)HLog發(fā)現(xiàn)有新的數(shù)據(jù)菱父,發(fā)送給Slave
Slave處理完數(shù)據(jù)后返回給Master
Master收到Slave的返回信息颈娜,在Zookeeper中標(biāo)記已經(jīng)發(fā)送到Slave的HLog位置
注:在進(jìn)行replication時(shí),Master與Slave的配置并不一定相同浙宜,比如Master上可以有3臺(tái)RegionServer官辽,Slave上并不一定是3臺(tái),Slave上的RegionServer數(shù)量可以不一樣粟瞬,數(shù)據(jù)如何分布這個(gè)HBase內(nèi)部會(huì)處理同仆。
種類(lèi)
HBase通過(guò)HLog進(jìn)行數(shù)據(jù)復(fù)制,那么HBase支持哪些不同種類(lèi)的復(fù)制關(guān)系亩钟?
從復(fù)制模式上來(lái)講乓梨,HBase支持主從鳖轰、主主兩種復(fù)制模式,也就是經(jīng)常說(shuō)的Master-Slave扶镀、Master-Master復(fù)制蕴侣。
Master-Slave
Master-Slave復(fù)制比較簡(jiǎn)單,所有在Master集群上寫(xiě)入的數(shù)據(jù)都會(huì)被同步到Slave上臭觉。
Master-Master
Master-Master復(fù)制與Master-Slave類(lèi)似昆雀,主要的不同在于,在Master-Master復(fù)制中蝠筑,兩個(gè)Master地位相同狞膘,都可以進(jìn)行讀取和寫(xiě)入。
既然Master-Master兩個(gè)Master都可以進(jìn)行寫(xiě)入什乙,萬(wàn)一出現(xiàn)一種情況:兩個(gè)Master上都進(jìn)行了對(duì)同一表的相同Column Family的同一個(gè)rowkey進(jìn)行寫(xiě)入挽封,會(huì)出現(xiàn)什么情況?
create ‘t’, {NAME=>’cf’, REPLICATION_SCOPE=>’1’}
Master1 Master2
put ‘t’, ‘r1’, ‘cf’, ‘a(chǎn)aaaaaaaaaaaaaa’ put ‘t’, ‘r1’, ‘cf’, ‘bbbbbbbbbbbbbbb’
如上操作臣镣,Master1上對(duì)t的cf列簇寫(xiě)入rowkey為r1辅愿,value為aaaaaaaaaaaaaaa的數(shù)據(jù),Master2上同時(shí)對(duì)t的cf列簇寫(xiě)入rowkey為r1, value為bbbbbbbbbbbbbbb的數(shù)據(jù)忆某,由于是Master-Master復(fù)制点待,Master1和Master2上在寫(xiě)入數(shù)據(jù)的同時(shí)都會(huì)把更新發(fā)送給對(duì)方,這樣最終的數(shù)據(jù)就變成了:
Master1 Master2
rowkey value rowkey value
r1 bbbbbbbbbbbbbbb r1 aaaaaaaaaaaaaaa
從上述表格中可以看到弃舒,最終Master1和Master2上cf列簇rowkey為r1的數(shù)據(jù)兩邊不一致癞埠。
所以,在做Master-Master高可用時(shí)聋呢,確保兩邊寫(xiě)入的表都是不同的苗踪,這樣能防止上述數(shù)據(jù)不一致問(wèn)題。
異常
HBase復(fù)制時(shí)坝冕,都是通過(guò)RegionServer開(kāi)啟復(fù)制線程進(jìn)行HLog的發(fā)送徒探,那么當(dāng)其中某個(gè)RegionServer出現(xiàn)異常時(shí),HBase是如何處理的喂窟?這里需要區(qū)別兩種不同的情況测暗,即Master上RegionServer異常和Slave上RegionServer異常。
Slave上RegionServer異常
對(duì)于該種異常HBase處理比較簡(jiǎn)單磨澡,Slave上出現(xiàn)某個(gè)RegionServer異常碗啄,該RegionServer直接會(huì)被標(biāo)記為異常狀態(tài),后續(xù)所有的更新都不會(huì)被發(fā)送到該臺(tái)RegionServer稳摄,Slave會(huì)重新選取一臺(tái)RegionServer來(lái)接收這部分?jǐn)?shù)據(jù)稚字。
Master上RegionServer異常
Master上RegionServer出現(xiàn)異常,由于HLog都是通過(guò)RegionServer開(kāi)啟復(fù)制線程進(jìn)行發(fā)送,如果RegionServer出現(xiàn)異常胆描,這個(gè)時(shí)候瘫想,屬于該臺(tái)RegionServer的HLog就沒(méi)有相關(guān)處理線程,這個(gè)時(shí)候昌讲,這部分?jǐn)?shù)據(jù)又該如何處理国夜?
Master上某臺(tái)RegionServer異常,其他RegionServer會(huì)對(duì)該臺(tái)RegionServer在zookeeper中的信息嘗試加鎖操作短绸,當(dāng)然這個(gè)操作是互斥的车吹,同一時(shí)間只有一臺(tái)RegionServer能獲取到鎖,然后醋闭,會(huì)把HLog信息拷貝到自己的目錄下窄驹,這樣就完成了異常RegionServer的HLog信息的轉(zhuǎn)移,通過(guò)新的RegionServer把HLog的信息發(fā)送到Slave证逻。

Master regionserver crash
操作
上面介紹的都是HBase高可用的理論實(shí)現(xiàn)和異常處理等問(wèn)題乐埠,下面就動(dòng)手實(shí)踐下,如何配置一個(gè)HBase的Replication(假設(shè)已經(jīng)部署好了兩套HBase系統(tǒng)瑟曲,并且在配置文件中已經(jīng)開(kāi)啟了replication配置)饮戳,首先嘗試配置下Master-Slave模式的高可用:
選取一套系統(tǒng)作為Master,另外一套作為Slave
在Master上通過(guò)add_peer 命令添加復(fù)制關(guān)系洞拨,如下
add_peer ‘1’, “db-xxx.photo.163.org:2181:/hbase”
在Master上新建表t,該表?yè)碛幸粋€(gè)列簇名為cf负拟,并且該列簇開(kāi)啟replication烦衣,如下:
create ‘t’, {NAME=>’cf’, REPLICATION_SCOPE=>’1’}
上面REPLICATION_SCOPE的值需要跟步驟2中的對(duì)應(yīng)
在slave建立相同的表(HBase不支持DDL的復(fù)制),在master-slave模式中掩浙,slave不需要開(kāi)啟復(fù)制花吟,如下:
create ‘t’, {NAME=>’cf’ }
這樣,我們就完成了整個(gè)master-slave模式高可用的搭建厨姚,后續(xù)可以在master上通過(guò)put操作插入一條記錄衅澈,查看slave上是否會(huì)復(fù)制該記錄,最終結(jié)果如下:

Master上操作

Slave上結(jié)果
上述結(jié)果顯示谬墙,在添加完復(fù)制關(guān)系后今布,Master上插入rowkey=r1, value=’aaaaaaaaa’的記錄,slave上可以獲取該記錄拭抬,Master-Slave模式數(shù)據(jù)復(fù)制成功部默。
接下來(lái)我們?cè)倏聪翸aster-Master模式的復(fù)制,配置的時(shí)候與Master-Slave模式不同的是造虎,在Master上添加完復(fù)制關(guān)系后傅蹂,需要在另外一臺(tái)Master也添加復(fù)制關(guān)系,而且兩邊的cluster_id必須相同,并且在另外一臺(tái)Master上建表的時(shí)候份蝴,需要加上列簇的REPLICATION_SCOPE=>’1’配置犁功,最終結(jié)果如下:

Master1上操作

Master2上操作
上述結(jié)果顯示,添加完了Master-Master復(fù)制關(guān)系婚夫,在Master1上插入一條記錄rowkey=r1, value=“aaaaaaaaaa”波桩,Master2上通過(guò)scan操作發(fā)現(xiàn)該記錄已經(jīng)被復(fù)制到Master2上,接著我們?cè)贛aster2上添加一條記錄rowkey=r2, value=’bbbbbbbbbbbb’请敦,查看Master1上的數(shù)據(jù)镐躲,該條記錄也已經(jīng)被復(fù)制到Master2上,Master-Master模式的replication驗(yàn)證成功侍筛。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末萤皂,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子匣椰,更是在濱河造成了極大的恐慌裆熙,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件禽笑,死亡現(xiàn)場(chǎng)離奇詭異入录,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)佳镜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)僚稿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蟀伸,你說(shuō)我怎么就攤上這事蚀同。” “怎么了啊掏?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵蠢络,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我迟蜜,道長(zhǎng)刹孔,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任娜睛,我火速辦了婚禮髓霞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘微姊。我一直安慰自己酸茴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布兢交。 她就那樣靜靜地躺著薪捍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上酪穿,一...
    開(kāi)封第一講書(shū)人閱讀 49,785評(píng)論 1 290
  • 那天凳干,我揣著相機(jī)與錄音,去河邊找鬼被济。 笑死救赐,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的只磷。 我是一名探鬼主播经磅,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼钮追!你這毒婦竟也來(lái)了预厌?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤元媚,失蹤者是張志新(化名)和其女友劉穎轧叽,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體刊棕,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡炭晒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了甥角。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片网严。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蜈膨,靈堂內(nèi)的尸體忽然破棺而出屿笼,到底是詐尸還是另有隱情,我是刑警寧澤翁巍,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站休雌,受9級(jí)特大地震影響灶壶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜杈曲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一驰凛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧担扑,春花似錦恰响、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春枢劝,著一層夾襖步出監(jiān)牢的瞬間井联,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工您旁, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留烙常,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓鹤盒,卻偏偏與公主長(zhǎng)得像蚕脏,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子侦锯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

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