ClickHouse節點擴容及資料遷移

2021-10-24 07:14:16 字數 2553 閱讀 9538

之前公司面臨磁碟不足的問題,雖然通過增加磁碟來緩解了。但是clickhouse集群節點擴充是發展遲早要面臨的問題,所以嘗試思考解決方案。

ck不同於hadoop體系,hdfs當集群增減節點時可以通過balance命令去自動調節。但ck集群不能自動感知集群拓撲變化,也不能自動 balance 資料。當集群資料量較大,複製表和分布式表過多時、想做到表維度、或者集群之間的資料平衡會導致運維成本很高。

這裡提供三個解決思路

當我們追求分布式表在新集群的平衡,資料量不大的情況,可以在新集群建立臨時表b、然後將原始表a寫入b中,再刪除a表重新建立,之後將b表寫入a中。

這種方式並不是資料量大、表數量過多的情形。

當我們先用磁碟不夠用的情況、通過配置權重指定大部分資料寫入新的節點,隨著時間流逝,原節點具有ttl的部分資料自動刪除,資料會趨於均衡,最後調回原始權重。是一種比較可行的方案。只需要配置/etc/metrika.xml 中各個shard的權重即可。

99dc-sit-225

9000

default

1dc-sit-226

9000

default

列如我這裡設定dc-sit-225節點權重為99,dc-sit-226節點權重為1。需要注意的是權重必須大於0(經過測試,小於0時節點會啟動失敗,等於0時配置不會生效)。

我們可以給每個節點中的表設定ttl保留時間,隨著時間的進行,已經保留時間長的資料會逐漸的被清除掉。到最後,節點的資料會均很分布 步驟

1、將配置檔案進行拷貝到待安裝節點

2、更改配置檔案中的 metrika.xml 中關於 副本、分片的配置。例如:

(1)新增分片、副本

1<

!-- false代表一次性寫入所有副本,true表示寫入其中乙個副本,配合zk來進行資料複製 -->

true

172.17.0.3

9000

default

default

1<

!-- false代表一次性寫入所有副本,true表示寫入其中乙個副本,配合zk來進行資料複製 -->

true

172.17.0.4

9000

default

default

1<

!-- false代表一次性寫入所有副本,true表示寫入其中乙個副本,配合zk來進行資料複製 -->

true

172.17.0.6

9000

default

default

(2)更改macros的引數

<

!-- 配置引數:集群名,分片名,副本名 -->

report_shards_replicas

01cluster-01-1

3、將以前表的結構拷貝到新增節點: (只需拷貝metadata目錄下的檔案即可)

mv   metadata/    到當前節點clickhouse的data目錄下的
經過嘗試,上面直接講metadata的表結構拷貝過去的方法,有乙個致命的bug。如果表是分布式表,直接將表結構拷貝,雖然clickhouse中表已經建立成功,但是在zk上的表的唯一位址並不會自動建立。所以所有需要與zk互動的表都變成: read only模式,不能插入資料

改變思路:手動建立表結構

步驟:

attach table cs_user_info

(`id` int32,

`user_name` string,

`pass_word` string,

`phone` string,

`email` string,

`time

` string

)engine

= replicatedmergetree(

'/clickhouse/tables/-/test/cs_user_info',''

)order

bytime

settings index_granularity =

8192

$file代表每個sql檔案

sudo clickhouse-client -h 172.20.3.*** --port 9000 -u admin --password 6ml2ixjn --multiquery <

$file

手動同步資料:

在新的伺服器上建立相同的表,將需遷移的伺服器上的表資料移動到新的伺服器對應目錄下,然後連線clickhouse執行以下語句:

detach table szt_data_t3; --先將表與資料分離(若表已存在)  

attach table szt_data_t3; --然後重新新增進來

clickhouse 單節點部署

官方預構建的二進位制檔案通常針對x86 64進行編譯,並利用sse 4.2指令集,因此,除非另有說明,支援它的cpu使用將成為額外的系統需求。下面是檢查當前cpu是否支援sse 4.2的命令 grep q sse4 2 proc cpuinfo echo sse 4.2 supported echo...

elasticsearch擴容與下線節點

複製本集群es的安裝包到被擴容的機器 scp r opt elasticsearch 7.6.2 10.4.72.10 opt建立使用者和軟連線並授權 useradd elastic ln s elasticsearch 7.6.2 elasticsearch chown r elastic ela...

Mycat 分片規則詳解 資料遷移及節點擴容

使用的是 mycat 提供的 datamigrate 指令碼進行對資料進行遷移和節點擴容,目前支援的 mycat 是1.6 版本,由於 mycat 是由 j a 編寫的因此在做資料遷移及節點擴容時需要安裝jdk等,還有相關的依賴資料庫驅動程式等 準備工作 擴容步驟 停止 mycat 服務,需要保證資...