HBase 跨版本遷移總結帖

GasThurston 7年前發布 | 32K 次閱讀 HBase 運維

1. 問題來源

目前公司運維著兩個版本HBase,分別對應社區的94版本和1.1版本。從16年開始推廣新版本,新版本在功能和性能上都比94好,未來方向也在新版本上,所以有些業務需要從94版本升級到新版本,如何解決業務版本升級是團隊面臨的一個問題?

版本升級方案比較

版本升級有兩種方式,原地升級和遷移數據升級,原地升級就是直接在原來的集群從94版本升級到1.1版本,而另一種方式就是通過把數據從94版本遷移到新版本。

2. 原地升級

從94版本原地升級到1.1,需要升級HDFS和HBase,但是目前由于94版本比較低,從94升級到96的時候是沒有辦法滾動升級的,也就是說在升級期間業務肯定不能讀寫了。那么什么情況下適合原地升級?其實在雙11之前,我們就采用過原地升級的方式升級推薦搜索集群。推薦搜索比較特殊,除了是主備集群之外,整個業務可以控制數據推送,以及隨時切換流量的讀寫。所以,我們的任務就是在業務切換流量后,升級一個集群,完成之后升級另一個集群就可以。如果業務可以停止讀寫,那么原地升級是最簡單的。但是大多數情況下,業務都不能停止讀寫或者長時間不讀寫。

3.為什么需要跨版本實時同步數據 目前94版本是幾個業務共用一個集群,而且沒有主備,更要命的是有些業務要求升級,而有些不需要,因此數據遷移是唯一的方案。但是遷移數據不是簡單copy數據,除了跨版本之外,還涉及遷移原來數據和實時新增數據。找到一種方案解決跨版本遷移,包括遷移原來的數據是實時遷移數據,是解決整個問題的關鍵。

4.從同個版本數據遷移講起 同個版本遷移數據的時候,我們采用snapshot + replication的方式,客戶端只需要自己選擇時間切換就可以了。思路大概如下:兩個集群做好同步,在某一時刻,暫停同步,做snapshot,遷移數據,打開replication同步積壓的數據,完成。但是在新老版本之間是沒有辦法做replication的,怎么解決這個問題?搞過HBase的都知道replication的原理,主集群把日志發到從集群,從集群解析日志寫到主集群。那么我們只要想辦法改成寫到新版本就可以了,下面講一下我的方案(餿主意):

5. 實時跨版本replication數據

這里,我們依然需要一個備份集群,但是備份集群本身是不寫數據到自己的,只是做為一個橋梁。我們通過更改寫數據的方式,改成通過http服務寫到新版本的rest服務,由rest直接寫到新版本集群就可以。整個流程大概如下:

涉及的代碼也比較簡單,主要涉及一個類——ReplicationSink:

初始化的初始化rest服務

更改batch方法,寫到rest服務

6. 原來數據 遷移

目前嘗試了一下,在沒有改代碼的情況下是沒有辦法在HBase層面上通過snapshot從老版本遷移到新版本,所以只能從HDFS層面下手。因為數據是實時寫,我們只要做好同步之后,在某個時刻,暫定同步,flush數據,然后通過“暴力遷移”的方式解決:

7. 總結

相比于協調業務慢慢遷移,通過這種方式在DBA遷移好數據之后,業務自己選擇時間驗證數據之后切換客戶端就可以。當然還有其他方式,例如通過Export 和 Import 跑mr的方式。
如果你有更好的方式,或者這種方式考慮不周到的,歡迎討論。

 

來自:http://mp.weixin.qq.com/s/nwLOm5CX3WU92rG_TSeOhg

 

 本文由用戶 GasThurston 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!