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

比特科技: 存儲吝沫、數(shù)據(jù)庫姥敛、大數(shù)據(jù)技術(shù) ? HBase高可用原理與實(shí)踐 http://www.bitstech.net/2015/12/21/hbase_replication/

前言
前段時(shí)間有套線上HBase出了點(diǎn)小問題题诵,導(dǎo)致該套HBase集群服務(wù)停止了2個(gè)小時(shí)烤送,從而造成使用該套HBase作為數(shù)據(jù)存儲的應(yīng)用也出現(xiàn)了服務(wù)異常樱拴。在排查問題之余寝凌,我們不禁也在思考狮含,以后再出現(xiàn)類似的問題怎么辦顽悼?這種問題該如何避免?用慣了MySQL几迄,于是乎想到了HBase是否跟MySQL一樣蔚龙,也有其高可用方案?
答案當(dāng)然是肯定的映胁,幾乎所有的數(shù)據(jù)庫(無論是關(guān)系型還是分布式的)木羹,都采用WAL的方式來保障服務(wù)異常時(shí)候的數(shù)據(jù)恢復(fù),HBase同樣也是通過WAL來保障數(shù)據(jù)不丟失解孙。HBase在寫數(shù)據(jù)前會先寫HLog坑填,HLog中記錄的是所有數(shù)據(jù)的變動, HBase的高可用也正是通過HLog來實(shí)現(xiàn)的弛姜。
進(jìn)階
HBase是一個(gè)沒有單點(diǎn)故障的分布式系統(tǒng)脐瑰,上層(HBase層)和底層(HDFS層)都通過一定的技術(shù)手段,保障了服務(wù)的可用性廷臼。上層HMaster一般都是高可用部署苍在,而RegionServer如果出現(xiàn)宕機(jī),region遷移的代價(jià)并不大荠商,一般都在毫秒級別完成寂恬,所以對應(yīng)用造成的影響也很有限;底層存儲依賴于HDFS结啼,數(shù)據(jù)本身默認(rèn)也有3副本掠剑,數(shù)據(jù)存儲上做到了多副本冗余,而且Hadoop 2.0以后NameNode的單點(diǎn)故障也被消除郊愧。所以朴译,對于這樣一個(gè)本身沒有單點(diǎn)故障,數(shù)據(jù)又有多副本冗余的系統(tǒng)属铁,再進(jìn)行高可用的配置是否有這個(gè)必要眠寿?會不會造成資源的極大浪費(fèi)?
高可用部署是否有必要焦蘑,這個(gè)需要根據(jù)服務(wù)的重要性來定盯拱,這里先簡單介紹下沒有高可用的HBase服務(wù)會出現(xiàn)哪些問題:
數(shù)據(jù)庫管理人員失誤,進(jìn)行了不可逆的DDL操作

不管是什么數(shù)據(jù)庫,DDL操作在執(zhí)行的時(shí)候都需要慎之又慎狡逢,很可能一條簡單的drop操作宁舰,會導(dǎo)致所有數(shù)據(jù)的丟失,并且無法恢復(fù)奢浑,對于HBase來說也是這樣蛮艰,如果管理員不小心drop了一個(gè)表,該表的數(shù)據(jù)將會被丟失雀彼。
離線MR消耗過多的資源壤蚜,造成線上服務(wù)受到影響

HBase經(jīng)過這么多年的發(fā)展,已經(jīng)不再是只適合離線業(yè)務(wù)的數(shù)據(jù)存儲分析平臺徊哑,許多公司的線上業(yè)務(wù)也相繼遷移到了HBase上袜刷,比較典型的如:facebook的Messages系統(tǒng)、360的搜索業(yè)務(wù)莺丑、小米米聊的歷史數(shù)據(jù)等等著蟹。但不可避免在這些數(shù)據(jù)上做些統(tǒng)計(jì)分析類操作,大型MR跑起來窒盐,會有很大的資源消耗草则,可能會影響線上業(yè)務(wù)。
不可預(yù)計(jì)的另外一些情況

比如核心交換機(jī)故障蟹漓,機(jī)房停電等等情況都會造成HBase服務(wù)中斷
對于上述的那些問題炕横,可以通過配置HBase的高可用來解決:
不可逆DDL問題

HBase的高可用不支持DDL操作,換句話說葡粒,在master上的DDL操作份殿,不會影響到slave上的數(shù)據(jù),所以即使在master上進(jìn)行了DDL操作嗽交,slave上的數(shù)據(jù)依然沒有變化卿嘲。這個(gè)跟MySQL有很大不同,MySQL的DDL可以通過statement格式的Binlog進(jìn)行復(fù)制夫壁。
離線MR影響線上業(yè)務(wù)問題

高可用的最大好處就是可以進(jìn)行讀寫分離拾枣,離線MR可以直接跑在slave上,master繼續(xù)對外提供寫服務(wù)盒让,這樣也就不會影響到線上的業(yè)務(wù)梅肤,當(dāng)然HBase的高可用復(fù)制是異步進(jìn)行的,在slave上進(jìn)行MR分析邑茄,數(shù)據(jù)可能會有稍微延遲姨蝴。
意外情況

對于像核心交換機(jī)故障、斷電等意外情況肺缕,slave跨機(jī)架或者跨機(jī)房部署都能解決該種情況左医。
基于以上原因授帕,如果是核心服務(wù),對于可用性要求非常高浮梢,可以搭建HBase的高可用來保障服務(wù)較高的可用性跛十,在HBase的Master出現(xiàn)異常時(shí),只需簡單把流量切換到Slave上秕硝,即可完成故障轉(zhuǎn)移偶器,保證服務(wù)正常運(yùn)行。
原理
HBase高可用保證在出現(xiàn)異常時(shí)缝裤,快速進(jìn)行故障轉(zhuǎn)移。下面讓我們先來看看HBase高可用的實(shí)現(xiàn)颊郎,首先看下官方的一張圖:


HBase Replication
需要聲明憋飞,HBase的replication是以Column Family為單位的,每個(gè)Column Family都可以設(shè)置是否進(jìn)行replication姆吭。
上圖中榛做,一個(gè)Master對應(yīng)了3個(gè)Slave,Master上每個(gè)RegionServer都有一份HLog内狸,在開啟Replication的情況下检眯,每個(gè)RegionServer都會開啟一個(gè)線程用于讀取該RegionServer上的HLog,并且發(fā)送到各個(gè)Slave昆淡,Zookeeper用于保存當(dāng)前已經(jīng)發(fā)送的HLog的位置锰瘸。Master與Slave之間采用異步通信的方式,保障Master上的性能不會受到Slave的影響昂灵。用Zookeeper保存已經(jīng)發(fā)送HLog的位置避凝,主要考慮在Slave復(fù)制過程中如果出現(xiàn)問題后重新建立復(fù)制,可以找到上次復(fù)制的位置眨补。
replication

HBase Replication步驟
HBase Client向Master寫入數(shù)據(jù)
對應(yīng)RegionServer寫完HLog后返回Client請求
同時(shí)replication線程輪詢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í)撑螺,MasterSlave的配置并不一定相同含思,比如Master上可以有3RegionServerSlave上并不一定是3臺甘晤,Slave上的RegionServer數(shù)量可以不一樣含潘,數(shù)據(jù)如何分布這個(gè)HBase內(nèi)部會處理。
種類
HBase通過HLog進(jìn)行數(shù)據(jù)復(fù)制安皱,那么HBase支持哪些不同種類的復(fù)制關(guān)系调鬓?
從復(fù)制模式上來講,HBase支持主從酌伊、主主兩種復(fù)制模式腾窝,也就是經(jīng)常說的Master-Slave缀踪、Master-Master復(fù)制。
Master-Slave

Master-Slave復(fù)制比較簡單虹脯,所有在Master集群上寫入的數(shù)據(jù)都會被同步到Slave上驴娃。
Master-Master

Master-Master復(fù)制與Master-Slave類似,主要的不同在于循集,在Master-Master復(fù)制中唇敞,兩個(gè)Master地位相同,都可以進(jìn)行讀取和寫入咒彤。
既然Master-Master兩個(gè)Master都可以進(jìn)行寫入疆柔,萬一出現(xiàn)一種情況:兩個(gè)Master上都進(jìn)行了對同一表的相同Column Family的同一個(gè)rowkey進(jìn)行寫入,會出現(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上對t的cf列簇寫入rowkey為r1,value為aaaaaaaaaaaaaaa的數(shù)據(jù)歇拆,Master2上同時(shí)對t的cf列簇寫入rowkey為r1, value為bbbbbbbbbbbbbbb的數(shù)據(jù)鞋屈,由于是Master-Master復(fù)制,Master1和Master2上在寫入數(shù)據(jù)的同時(shí)都會把更新發(fā)送給對方故觅,這樣最終的數(shù)據(jù)就變成了:
Master1
Master2

rowkey
value
rowkey
value

r1
bbbbbbbbbbbbbbb
r1
aaaaaaaaaaaaaaa

從上述表格中可以看到厂庇,最終Master1和Master2上cf列簇rowkey為r1的數(shù)據(jù)兩邊不一致。
所以输吏,在做******Master-Master******高可用時(shí)权旷,確保兩邊寫入的表都是不同的,這樣能防止上述數(shù)據(jù)不一致問題贯溅。
異常
HBase復(fù)制時(shí)炼杖,都是通過RegionServer開啟復(fù)制線程進(jìn)行HLog的發(fā)送,那么當(dāng)其中某個(gè)RegionServer出現(xiàn)異常時(shí)盗迟,HBase是如何處理的坤邪?這里需要區(qū)別兩種不同的情況,即Master上RegionServer異常和Slave上RegionServer異常罚缕。
Slave****上RegionServer****異常

對于該種異常HBase處理比較簡單艇纺,Slave上出現(xiàn)某個(gè)RegionServer異常,該RegionServer直接會被標(biāo)記為異常狀態(tài)邮弹,后續(xù)所有的更新都不會被發(fā)送到該臺RegionServer黔衡,Slave會重新選取一臺RegionServer來接收這部分?jǐn)?shù)據(jù)。
Master****上RegionServer****異常

Master上RegionServer出現(xiàn)異常腌乡,由于HLog都是通過RegionServer開啟復(fù)制線程進(jìn)行發(fā)送盟劫,如果RegionServer出現(xiàn)異常,這個(gè)時(shí)候与纽,屬于該臺RegionServer的HLog就沒有相關(guān)處理線程侣签,這個(gè)時(shí)候塘装,這部分?jǐn)?shù)據(jù)又該如何處理?
Master上某臺RegionServer異常影所,其他RegionServer會對該臺RegionServer在zookeeper中的信息嘗試加鎖操作蹦肴,當(dāng)然這個(gè)操作是互斥的,同一時(shí)間只有一臺RegionServer能獲取到鎖猴娩,然后阴幌,會把HLog信息拷貝到自己的目錄下,這樣就完成了異常RegionServer的HLog信息的轉(zhuǎn)移卷中,通過新的RegionServer把HLog的信息發(fā)送到Slave矛双。


Master regionserver crash
操作
上面介紹的都是HBase高可用的理論實(shí)現(xiàn)和異常處理等問題,下面就動手實(shí)踐下蟆豫,如何配置一個(gè)HBase的Replication(假設(shè)已經(jīng)部署好了兩套HBase系統(tǒng)背零,并且在配置文件中已經(jīng)開啟了replication配置),首先嘗試配置下Master-Slave模式的高可用:
選取一套系統(tǒng)作為Master无埃,另外一套作為Slave
在Master上通過add_peer 命令添加復(fù)制關(guān)系,如下

add_peer ‘1’, “db-xxx.photo.163.org:2181:/hbase”
在Master上新建表t毛雇,該表擁有一個(gè)列簇名為cf嫉称,并且該列簇開啟replication,如下:

create ‘t’, {NAME=>’cf’, REPLICATION_SCOPE=>’1’}
上面REPLICATION_SCOPE的值需要跟步驟2中的對應(yīng)
在slave建立相同的表(HBase不支持DDL的復(fù)制)灵疮,在master-slave模式中织阅,slave不需要開啟復(fù)制,如下:

create ‘t’, {NAME=>’cf’ }
這樣震捣,我們就完成了整個(gè)master-slave模式高可用的搭建荔棉,后續(xù)可以在master上通過put操作插入一條記錄,查看slave上是否會復(fù)制該記錄蒿赢,最終結(jié)果如下:


Master上操作
replication_slave

Slave上結(jié)果
上述結(jié)果顯示润樱,在添加完復(fù)制關(guān)系后,Master上插入rowkey=r1, value=’aaaaaaaaa’的記錄羡棵,slave上可以獲取該記錄壹若,Master-Slave模式數(shù)據(jù)復(fù)制成功。
接下來我們再看下Master-Master模式的復(fù)制皂冰,配置的時(shí)候與Master-Slave模式不同的是店展,在Master上添加完復(fù)制關(guān)系后,需要在另外一臺Master也添加復(fù)制關(guān)系秃流,而且兩邊的cluster_id必須相同赂蕴,并且在另外一臺Master上建表的時(shí)候,需要加上列簇的REPLICATION_SCOPE=>’1’配置舶胀,最終結(jié)果如下:
master-master_1

Master1上操作
master-master_2

Master2上操作
上述結(jié)果顯示概说,添加完了Master-Master復(fù)制關(guān)系碧注,在Master1上插入一條記錄rowkey=r1, value=“aaaaaaaaaa”,Master2上通過scan操作發(fā)現(xiàn)該記錄已經(jīng)被復(fù)制到Master2上席怪,接著我們在Master2上添加一條記錄rowkey=r2, value=’bbbbbbbbbbbb’应闯,查看Master1上的數(shù)據(jù),該條記錄也已經(jīng)被復(fù)制到Master2上挂捻,Master-Master模式的replication驗(yàn)證成功碉纺。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市刻撒,隨后出現(xiàn)的幾起案子骨田,更是在濱河造成了極大的恐慌,老刑警劉巖声怔,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件态贤,死亡現(xiàn)場離奇詭異,居然都是意外死亡醋火,警方通過查閱死者的電腦和手機(jī)悠汽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芥驳,“玉大人柿冲,你說我怎么就攤上這事≌籽” “怎么了假抄?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長丽猬。 經(jīng)常有香客問我宿饱,道長,這世上最難降的妖魔是什么脚祟? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任谬以,我火速辦了婚禮,結(jié)果婚禮上由桌,老公的妹妹穿的比我還像新娘蛉签。我一直安慰自己,他們只是感情好沥寥,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布碍舍。 她就那樣靜靜地躺著,像睡著了一般邑雅。 火紅的嫁衣襯著肌膚如雪片橡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天淮野,我揣著相機(jī)與錄音捧书,去河邊找鬼吹泡。 笑死,一個(gè)胖子當(dāng)著我的面吹牛经瓷,可吹牛的內(nèi)容都是我干的爆哑。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼舆吮,長吁一口氣:“原來是場噩夢啊……” “哼揭朝!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起色冀,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤潭袱,失蹤者是張志新(化名)和其女友劉穎蛔外,沒想到半個(gè)月后酿愧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡挽牢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年与学,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了彤悔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡索守,死狀恐怖晕窑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蕾盯,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布蓝丙,位于F島的核電站级遭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏渺尘。R本人自食惡果不足惜挫鸽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鸥跟。 院中可真熱鬧丢郊,春花似錦、人聲如沸医咨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拟淮。三九已至干茉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間很泊,已是汗流浹背角虫。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工沾谓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人戳鹅。 一個(gè)月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓均驶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親枫虏。 傳聞我的和親對象是個(gè)殘疾皇子妇穴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348

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