之前公司面臨磁碟不足的問題,雖然通過增加磁碟來緩解了。但是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 服務,需要保證資...