騰訊雲ClickHouse如何實現自動化的資料均衡?

騰訊雲+社群發表於2020-09-21

​一、引言

 

ClickHouse 是一個用於聯機分析( OLAP )的列式資料庫管理系統( DBMS )。它於 2016 年以 Apache 2.0 協議開源,以優秀的查詢效能,深受廣大大資料工程師歡迎。

 

為了服務客戶業務,騰訊雲於 2020 年 4 月正式上線 ClickHouse 服務。服務上線以來,迅速獲得內外客戶廣泛支援,服務業務數量成規模增長。與此同時,運維與管控壓力也隨之而來,使用者對彈性伸縮能力的呼聲越來越大。

 

事實上,ClickHouse 是典型的 Share-Nothing 架構,天然支援彈性伸縮能力。無論是增加節點數量,還是增加資料分片副本數量都非常容易。

 

圖1 ClickHouse Share-Nothing 架構

 

但是,ClickHouse 叢集在增加節點後,叢集上的資料集無法自動均衡分佈。需要人工干預,確保資料均衡。同理,下線叢集節點前,也需要人工干預,將被下線節點的機器遷移到其他節點。

 

在生產環境中,運維工作強度隨著叢集中表的數量,資料規模增加而急劇增強。為了緩解雲上 ClickHouse 使用者運維壓力,將 ClickHouse 資料均衡運維工作自動化是非常有價值的。

 

本文將帶大家瞭解騰訊雲 ClickHouse 是如何實現無人值守的資料均衡服務,希望與大家一同交流。

 

二、ClickHouse叢集資料均衡功能缺失

 

 

在生產環境中,通常 ClickHouse 通常以叢集模式部署。在 ClickHouse 叢集中,使用者根據業務需求將叢集節點劃分為若干子集合。每個集合儲存若干資料集,在使用層面,使用者通過分散式表( Distributed Engine )來查詢整個資料集。

 

在 ClickHouse 的語義中,有一個 Cluster 概念,它是一個節點的集合,並且定義了儲存在該 Cluster 上的資料集的分片數量,以及分片的副本數量,以及其儲存節點。

 

如上圖 1 所示,一個名為 cluster-dataset 的 Cluster, 定義了 4 個分片( SHARD ), 每個分片有 2 個副本。當儲存在這個 Cluster 上的資料集,通常會分散儲存在 4 個分片中,並且每個分片資料會儲存 2 個副本。

 

為 Cluster 增加分片是非常容易,分配機器,修改配置即可。如下圖所示,給 cluster-dataset 增加一個分片。但是已存的資料資料集仍然在分片 SHARED1-4 上。很明顯,新增的節點存在資源浪費的問題,包括計算資源和儲存資源。

 

圖2:擴容節點示意圖

 

為了解決這樣問題,有若干方案解決:

 

  • 將資料全部刪除掉,從後備資料來源重新匯入資料到 ClickKhouse;

  • 增加新節點的權重,過一定時間後待資料均衡後,重新調整新增節點權重;

  • 其他,如人工搬運資料到新增節點

 

但是無論使用上述哪一種種方法,都存在缺陷。比如對於第一個方案而言,如果 ClickHouse 中資料並無後備資料來源,那麼該方案不可行。即使有後備資料來源,重新匯入資料耗時,且停服時間與資料量成正比,代價大。

 

對於第二種方案,需要對新節點進行多次許可權調整。在調整期間,資料儲存壓力向新增節點傾斜,無法充分利用叢集優勢。且容易導致新近資料集中在新增節點上,導致叢集資源浪費,降低查詢效率。

 

對於第三種方案而言,操作繁雜,在表多,資料量大的情況下,易出錯。

 

三、雲上ClickHouse解決方案

 

 

為了解決 ClickHouse 叢集資料均衡功能缺失,帶來的運維壓力,騰訊雲 ClickHouse 提供了資料自動均衡功能。

 

簡而言之,在獲得使用者授權後,使用者在控制檯上簡單配置,填寫資料遷移網路頻寬上限,即可啟動資料均衡任務。

 

後臺管控系統根據機器當期磁碟可用容量,合理安排資料遷移計劃。然後,根據網路頻寬上限,執行遷移計劃。最終,使得資料在節點上分佈趨於均衡。

 

舉一個例子來進行說明,在雲上申請一個 ClickHouse 例項,2 個節點。在其中一個節點上建立一個名為 lineorder 的表,並匯入測試資料。檢視該表在該節點上的儲存容量,結果如下所示:

 

 

另外一個節點上沒有該表的資料,也沒有表的 schema。我們通過資料遷移功能完成資料均衡。接下來通過控制檯,我們完成資料遷移。具體步驟如下:

 

1. 選擇Cluster

 

選擇 Cluster,選擇 ClickHouse 例項,點選叢集服務,選擇 ClickHouse 元件,在"操作"下拉選單中,選擇資料遷移選單項。選擇資料均衡模式。

 

 

2. 選擇遷移節點

 

在確定 Cluster 後,可以選擇資料遷出與遷入節點。

 

 

3. 選擇遷移資料表

 

在確定了遷移節點後,我們可以選擇待遷移的表。

 

 

4. 確認資訊

 

 

最後,提交任務。ClickHouse 就開始資料遷移工作。在任務中心可以看到資料遷移進度。

 

 

任務結束時候,也可以檢視遷移任務詳情資訊。

 

騰訊雲ClickHouse如何實現自動化的資料均衡?

 

待資料遷移完成後,我們可以檢視資料在兩個節點上資料分佈情況。在叢集節點上資料量情況如下:

 

騰訊雲ClickHouse如何實現自動化的資料均衡?

 

可以看到,資料遷移完成後,資料條數和資料量是完全吻合的。

 

四、結語

 

雲上資料遷移功能旨在解決 ClickHouse 彈性伸縮時資料遷移問題。使用場景包括:

 

  • 新擴容節點後,使用資料遷移功能,遷移部分資料至新節點,讓資料在叢集節點上趨於均衡;

  • 縮容節點前,將待下線節點上的資料遷移到其他節點,避免資料丟失。

 

資料遷移功能極大的緩解了叢集版 ClickHouse 運維壓力。需要注意的是,資料均衡任務執行過程中,被遷移的表無法被業務訪問。

相關文章