HBase TB級數據規模不停機遷移最佳實踐
- 2019 年 10 月 7 日
- 筆記
背景
有關HBase集群如何做不停服的數據遷移一直都是雲HBase被問的比較多的一個問題,目前有許多開源的工具或者HBase本身集成的方案在性能、穩定性、使用體驗上都不是很好,因此阿里雲提供了BDS遷移服務,可以幫助雲上客戶實現TB級數據規模不停機遷移
支援場景
- HBase大版本升級, 1.x升級2.x
- 集群配置升級,8核16G升級為16核32G
- 集群網路環境變更,經典網路遷移到VPC
- 異地跨機房遷移
- HBase業務拆分
方案介紹
開源方案
HBase不停機遷移主要包括三個部分:表結構的遷移、實時數據同步、歷史全量數據遷移。
- 表結構遷移
對於表結構遷移來說,開源的DataX還是HBase本身都不提供表結構遷移的功能,只能進行手動建表,手動建表會存在幾個問題:
- 如果源集群表數據較多,客戶手動建表比較麻煩
- 手動建表可能忽略表分區,導致目標表分區很不合理,遷移完之後影響請求RT
- 實時數據同步
對於實時數據同步來說,有兩種現有的方案:客戶端應用雙寫、HBase Replication
- 客戶端應用雙寫需要業務方對客戶端程式碼進行改造,並且雙寫會放大毛刺,只要有一個集群出現問題就會影響業務寫入,對於實時要求性比較強的業務是不能接受的
- HBase Replication 對於大集群或者寫入壓力比較大的集群來說,存在如下幾個問題:
- 同步的邏輯集成在RegionServer當中,RegionServer讀寫和同步會相互影響
- 不同的RegionServer同步的壓力可能是不同的,不抗熱點
- 如果遇到同步積壓,往往RegionServer的負載已經很高不太容易通過調整執行緒來解決,只能等低峰期慢慢消化或者增加RegionServer節點
- 全量數據遷移
對於全量數據遷移來說,可以使用DataX、HBase CopyTable、HBase創建和導出快照
- DataX走的API層面的遷移,對於源集群大表的全表Scan和目標表大量的Put都會對集群業務產生影響,增加業務的讀寫毛刺,另外API層面的遷移比文件層的拷貝會多佔用50%以上的流量
- HBase創建和導出快照,快照的創建和導出都是在源集群上完成,會影響源集群穩定性,創建快照會暫用源集群的存儲資源,對一張大表創建完快照,然後進行major compaction可能會導致HDFS容量水位迅速上漲,可能會寫滿HDFS

對於HBase集群相互遷移,BDS支援表結構遷移、全量數據遷移以及增量數據同步
- 表結構遷移
- 自動創建目標表並保證分區一致,避免遷移後表單分區數據量過大,影響目標表讀寫RT
- 以表級別為粒度,支援批量提交
- 全量數據遷移
- 走文件層的數據文件拷貝比通常API層的數據遷移通常能節省50%以上的流量
- 自動處理Region Split、HFile Compaction
- 單節點遷移速度可達到100MB/s,節點數支援水平擴展,能夠滿足支援TB、PB級別的數據遷移
- 遷移速度可以動態配置
- 增量數據同步
- 非同步解析源集群HDFS上的WALs並在目標集群進行回放,增量同步不會和源集群HBase進行交互
- 有完善的錯誤重試機制,實時監控任務速度和進度,支援任務失敗報警
- 同步吞吐動態可配
穩定性保障
BDS穩定性
- BDS採用的是分散式的架構,master通過zk監聽worker節點是否存活,如果節點宕機會對任務進行重分配,完善的failover機制
- 完善的監控體系、報警機制,監控表遷移的進度,遷移了多大的數據量,遷移的速率,實時同步的延遲等資訊,對於需要人為介入的異常進行報警
- BDS支援任務斷點續傳
源集群業務穩定性
- 對於實時的數據同步,開源的方案走的是HBase Replication,同步邏輯集成在RegionServer中,RegionServer本身的讀寫和數據同步相互影響。BDS和HBase集群解耦,獨立部署,避免對HBase集群CPU、記憶體等機器資源的佔用
- 全量數據遷移、實時數據同步只訪問源集群的HDFS,全程不會和HBase做交互,盡量避免對源集群業務產生的影響
- 可以動態調整全量數據遷移和實時數據同步的遷移速率
遷移步驟
下圖為集群遷移的基本步驟

- 購買及環境準備
- 購買BDS遷移服務
- 不同網路環境需要打通BDS到各個集群的網路
- 提交遷移任務
- 登陸BDS操作頁面
- 錄入源集群和目標集群的資訊
- 開啟增量同步通道,同步源集群實時寫入數據到目標集群
- 提交歷史數據遷移任務,遷移歷史存量數據文件
- 驗證
- 業務驗證
- 業務切換
案例
遷移規模
網路環境:相同VPC 集群版本:自建HBase1.x遷移到雲HBase1.x 集群規模:集群20台RegionServer 數據規模:數據總量30+T,遷移20+表,日增幾百G 要求:不停服遷移,儘可能避免讀在線業務的影響
環境準備
步驟1:計算BDS服務的規模
BDS單節點(4cores 8G)的遷移最大速度 50MB/s ~ 100MB/s,增量同步任務單機能最多處理5台RS的日誌, 單節點日誌遷移速度最大50 ~ 60MB/s。 源集群有20台節點, 日增數據幾百G,寫入量也不是很大,BDS每個節點同時能夠處理5個RS的日誌,因此,BDS至少需要4個Worker節點。
步驟2:購買BDS集群
詳見《BDS服務開通》,開通了BDS之後,需要配置BDS訪問的白名單,然後配置頁面登陸的賬戶密碼,進行BDS操作頁面的登陸。
步驟3:關聯HBase集群
購買BDS集群之後,需要關聯源集群和目標集群。 對於目標雲HBase集群來說,BDS控制台提供了自動關聯集群的功能,不需要手動的錄入集群的資訊。

控制台點擊關聯集群會羅列出所有BDS所綁定的VPC下的雲HBase集群,選擇對應的目標集群進行綁定,綁定完成之後,可以在BDS HBase數據源頁面看到綁定的集群資訊。

對於自建HBase,需要綁定ip和hostname的映射關係並手動錄入集群資訊。自建HBase集群機器使用的主機名可能是BDS不識別的,因此在錄入自建HBase集群資訊之前,需要配置集群主機名和ip的映射關係到BDS。查看自建集群的/etc/hosts,將/etc/hosts資訊copy到配置項中,在BDS上錄入集群ip和hostname的映射關係。

回到HBase數據源頁面,添加數據源。


錄入自建集群的HDFS地址、HBase的版本、HBase根目錄、HBase連接資訊,點擊添加會對網路連通性、HBase版本進行校驗,源集群和目標集群都驗證通過之後,就可以配置遷移任務。
配置遷移任務
當上面的所有前置條件都配置完成後,就可以開始遷移任務配置。下面詳細介紹下具體的遷移步驟。
步驟1:創建實時數據同步通道
首先登陸BDS介面,點擊任務管理選擇HBase實時數據同步,選擇創建HBase同步通道,進入通道創建的頁面。

選擇源集群和目標集群,按照表為粒度批量提交要遷移的表,創建同步通道。BDS在提交同步通道的時候自動檢測目標表是否存在,不過不存在創建目標表,保證原表和目標表完全一致。這裡推薦使用BDS自動建表保證目標集群和源集群的分區一致。同步通道創建完成之後,我們查看同步通道的進度。

總結一項可以查看整個通道的總延遲,BDS處理的最大最小耗時,讀寫總流量和速率 表資訊詳情可以查看錶put、delete操作總次數,表開始同步的時間點和最近更新的時間點。 日誌資訊詳情主要羅列了各個日誌同步的進度,點位和速率。
步驟2:提交歷史任務遷移
增量數據同步通道完成之後,接下來提交全量數據遷移任務,在任務管理裡面我們選擇HBase歷史數據批量遷移,進入歷史數據管理頁面,點擊創建任務,進入全量數據創建頁面,選擇對應的源集群和目標集群,輸入需要遷移的表,點擊創建。

全量數據遷移任務提交後,BDS會去驗證目標表是否存在,不存在就自動創建目標表,任務開始之後我們可以查看各個表遷移的進度和速率。

步驟3:業務驗證
當全量數據遷移完成,實時同步的延遲在業務可控範圍之內(比如源集群和目標集群同步延遲1秒以內),業務可以進行數據的抽樣校驗,以及開始部分業務灰度。
步驟4:業務切流
驗證通過之後,找個業務低峰期進行業務切流,切流過程中可能遇到問題,回切流量到源集群,為了防止流量切回源集群出現源集群少數據情況,需要業務在切流之前開啟目標集群到源集群的實時同步通道,將切流後的實時寫入數據同步回源集群。
步驟5:釋放BDS資源
業務穩定在新集群上運行了一段時間之後,沒有發現問題,便可以中斷BDS實時同步的通道,釋放掉BDS資源。