滾動監聽 滴滴HBase大版本滾動公升級之旅

2021-10-25 13:22:22 字數 3198 閱讀 4699

背景

因此對於hbase團隊而言,公升級迫在眉睫刻不容緩。

2.

挑戰

首先簡單介紹一下hbase的架構。hbase是乙個典型的主從結構——主備master用於管理集群;regionserver用於響應處理使用者讀寫請求;使用zookeeper保障集群內的一致性;節點間通過rpc通訊;底層資料檔案hfile儲存於hdfs中。

此外hbase具有相當豐富的上下游生態,從以streamingsql為代表的實時任務到spark、mr等批處理任務,通過下圖可以得窺一二:

基於以上對集群架構和上下游生態的梳理,可以明確公升級過程中我們主要面臨的挑戰有:

基於以上這些挑戰點,其實不難得出乙個結論:我們需要設計並實施大量的前置準備工作以保證公升級過程的可靠性,但這並不是什麼壞訊息,因為只要我們的準備工作足夠細緻完善,順利公升級的把握和信心也就越強——這個思路在我們今後的工作中也同樣適用。

下面簡單列舉了我們完成的準備工作:

3.

公升級方案

公升級方案主要有兩種:新建集群+資料遷移 和 滾動公升級。

優點缺點

新集群+資料遷移

雙集群可快速降級,風險較小

需使用者配合切換,體驗較差

公升級週期較長,預計半年以上

操作複雜,成本高

滾動公升級

使用者無感知

發現故障需要即時回滾,挑戰相對較高

公升級周期短

操作簡單,成本低

實際上滾動公升級的方案一定是最優選,主要是出於對「release版本仍然不夠穩定」的擔憂,我們一度有所猶豫。但最終基於「充分的準備與測試」帶給我們的信心,最終我們仍然選擇了滾動公升級。

簡單說明滾動公升級的大致步驟:

解決相容性問題,主要體現在新建rsgroup元資料表並重寫資料、

掛載新的coprocessor等;

公升級master節點;

公升級meta分組;

依次公升級業務分組;

實操及問題

我們從19年下半年啟動了這一輪滾動公升級的調研與準備,今年3月下旬正式開始線上操作,截至5月初已完成了國內外共計9個集群的公升級工作,使用者無感知。

在此期間我們也遇到了不少未解問題,這裡摘取乙個critical問題做簡單介紹:region split過程中疊加rs宕機引發資料丟失:region split是乙個相當複雜的事務過程,大體可分為以下幾步:

當父region下線、子region還未正式上線時regionserver宕機,master上的servercrashprocedure執行緒開始進行回滾,會將子region刪除;此外master上還有乙個catalogjanitor執行緒做資料清理,正常split過程中由於zk上存在對應節點,這個執行緒會被阻塞;然而由於rs宕機,臨時節點也隨之消失,該執行緒正常工作,判斷meta表中父region已經下線,從而將父region刪除——至此父子region皆被刪除,導致資料丟失。

修復方案已提交社群:hbase-23693其它patch list:5.

總結

本次公升級工作從立項到完結耗時近一年,能夠成功完成非常開心。一方面本次公升級極大拉進了內部版本與社群release版本的距離,為更加良性的版本迭代及社群互動夯實了基礎;另一方面新版本引入了諸多新特性,在穩定性、易用性方面都為我們帶來了更為廣闊的成長空間;更重要的是在這個過程中我們自身也沉澱出了一套系統的工作思路與方**,期待後續可以更好的為業務賦能,為公司創造價值。

作者簡介

推薦閱讀

滴滴開源/ open source

nightingale

|fastload 

| levin

|aoe |

delta |mpx |booster

|chameleon

|ddmq |droidassist |rdebug 

|doraemonkit

|mand moblie

|virtualapk

技術乾貨/ recommended article

滾動監聽實現

fn.smartfloat function window scroll function else if scrolls array i if scrolls top else else return this each function slide smartfloat 兩個for迴圈實現監聽分...

監聽滾動事件

1.vue元件新增滾動事件 export default methods 計算滾動盒子高度 移動端中滾動框的高度受裝置的影響,由於移動端中使用rem的緣故,因此高度是不定的,所以計算高度是不可少的。一般使用 document.getelementbyid div offsetheight docum...

vue中監聽頁面滾動和監聽某元素滾動

在生命週期 mounted 中進行監聽滾動 mounted 在方法中定義監聽滾動執行的方法 scrolltotop 注意 需要監聽的這個元素需要擁有固定的高度 在vue元件中 content scroll scrollevent div 在方法中定義scrolldiv,是監聽class為conten...