ClickHouse 是一個用於聯機分析( OLAP )的列式數據庫管理系統( DBMS )。它於 2016 年以 Apache 2.0 協議開源,以優秀的查詢性能,深受廣大大數據工程師歡迎。數據庫
爲了服務客戶業務,騰訊雲於 2020 年 4 月正式上線 ClickHouse 服務。服務上線以來,迅速得到內外客戶普遍支持,服務業務數量成規模增加。與此同時,運維與管控壓力也隨之而來,用戶對彈性伸縮能力的呼聲愈來愈大。網絡
事實上,ClickHouse 是典型的 Share-Nothing 架構,自然支持彈性伸縮能力。不管是增長節點數量,仍是增長數據分片副本數量都很是容易。架構
圖1 ClickHouse Share-Nothing 架構運維
可是,ClickHouse 集羣在增長節點後,集羣上的數據集沒法自動均衡分佈。須要人工干預,確保數據均衡。同理,下線集羣節點前,也須要人工干預,將被下線節點的機器遷移到其餘節點。分佈式
在生產環境中,運維工做強度隨着集羣中表的數量,數據規模增長而急劇加強。爲了緩解雲上 ClickHouse 用戶運維壓力,將 ClickHouse 數據均衡運維工做自動化是很是有價值的。性能
本文將帶你們瞭解騰訊雲 ClickHouse 是如何實現無人值守的數據均衡服務,但願與你們一同交流。測試
在生產環境中,一般 ClickHouse 一般以集羣模式部署。在 ClickHouse 集羣中,用戶根據業務需求將集羣節點劃分爲若干子集合。每一個集合存儲若干數據集,在使用層面,用戶經過分佈式表( Distributed Engine )來查詢整個數據集。大數據
在 ClickHouse 的語義中,有一個 Cluster 概念,它是一個節點的集合,而且定義了存儲在該 Cluster 上的數據集的分片數量,以及分片的副本數量,以及其存儲節點。blog
如上圖 1 所示,一個名爲 cluster-dataset 的 Cluster, 定義了 4 個分片( SHARD ), 每一個分片有 2 個副本。當存儲在這個 Cluster 上的數據集,一般會分散存儲在 4 個分片中,而且每一個分片數據會存儲 2 個副本。資源
爲 Cluster 增長分片是很是容易,分配機器,修改配置便可。以下圖所示,給 cluster-dataset 增長一個分片。可是已存的數據數據集仍然在分片 SHARED1-4 上。很明顯,新增的節點存在資源浪費的問題,包括計算資源和存儲資源。
圖2:擴容節點示意圖
爲了解決這樣問題,有若干方案解決:
將數據所有刪除掉,從後備數據源從新導入數據到 ClickKhouse;
增長新節點的權重,過必定時間後待數據均衡後,從新調整新增節點權重;
其餘,如人工搬運數據到新增節點
可是不管使用上述哪種種方法,都存在缺陷。好比對於第一個方案而言,若是 ClickHouse 中數據並沒有後備數據源,那麼該方案不可行。即便有後備數據源,從新導入數據耗時,且停服時間與數據量成正比,代價大。
對於第二種方案,須要對新節點進行屢次權限調整。在調整期間,數據存儲壓力向新增節點傾斜,沒法充分利用集羣優點。且容易致使新近數據集中在新增節點上,致使集羣資源浪費,下降查詢效率。
對於第三種方案而言,操做繁雜,在表多,數據量大的狀況下,易出錯。
爲了解決 ClickHouse 集羣數據均衡功能缺失,帶來的運維壓力,騰訊雲 ClickHouse 提供了數據自動均衡功能。
簡而言之,在得到用戶受權後,用戶在控制檯上簡單配置,填寫數據遷移網絡帶寬上限,便可啓動數據均衡任務。
後臺管控系統根據機器當期磁盤可用容量,合理安排數據遷移計劃。而後,根據網絡帶寬上限,執行遷移計劃。最終,使得數據在節點上分佈趨於均衡。
舉一個例子來進行說明,在雲上申請一個 ClickHouse 實例,2 個節點。在其中一個節點上建立一個名爲 lineorder 的表,並導入測試數據。查看該表在該節點上的存儲容量,結果以下所示:
另一個節點上沒有該表的數據,也沒有表的 schema。咱們經過數據遷移功能完成數據均衡。接下來經過控制檯,咱們完成數據遷移。具體步驟以下:
選擇 Cluster,選擇 ClickHouse 實例,點擊集羣服務,選擇 ClickHouse 組件,在"操做"下拉列表中,選擇數據遷移菜單項。選擇數據均衡模式。
在肯定 Cluster 後,能夠選擇數據遷出與遷入節點。
在肯定了遷移節點後,咱們能夠選擇待遷移的表。
最後,提交任務。ClickHouse 就開始數據遷移工做。在任務中心能夠看到數據遷移進度。
任務結束時候,也能夠查看遷移任務詳情信息。
待數據遷移完成後,咱們能夠查看數據在兩個節點上數據分佈狀況。在集羣節點上數據量狀況以下:
能夠看到,數據遷移完成後,數據條數和數據量是徹底吻合的。
雲上數據遷移功能旨在解決 ClickHouse 彈性伸縮時數據遷移問題。使用場景包括:
新擴容節點後,使用數據遷移功能,遷移部分數據至新節點,讓數據在集羣節點上趨於均衡;
縮容節點前,將待下線節點上的數據遷移到其餘節點,避免數據丟失。
數據遷移功能極大的緩解了集羣版 ClickHouse 運維壓力。須要注意的是,數據均衡任務運行過程當中,被遷移的表沒法被業務訪問。