ClickHouse高可用集群

2021-09-25 16:30:11 字數 4702 閱讀 7380

和一些在使用clickhouse的同學聊了下,有不少中小型公司使用的還是單機版,這點還是出乎意料;可能真的是因為clickhouse秒天秒地的效能,加上資料量不大,資料恢復成本不高,才出此策略;

入正題:今天嘗試搭建了乙個2*2的clickhouse集群,兩個分片,每個分片有兩個副本,共四個節點,邏輯拓撲圖如下

host

shard

replica

hadoop2

0101

hadoop5

0102

hadoop6

0201

hadoop7

0202

1.安裝clickhouse-server

在所有節點安裝clickhouse-server,參考clickhouse install on centos

2.修改配置config.xml

涉及三部分remote_servers,zookeeper,macros,所有的節點的remote_servers,zookeeper是一樣的,不同的是macros,每個節點根據自己的角色修改shard和replica的值;下面給出hadoop2這個節點的配置

true

hadoop2

9666

hadoop5

9666

true

hadoop6

9666

hadoop7

9666

hadoop1

2181

hadoop2

2181

hadoop3

2181

hadoop4

2181

hadoop5

2181

0101

啟動所有的clickhouse-server

service clickhouse-server start
3.建表

在每個節點建立t_s2_r2,不需要手動替換shard和replica,建表的時候會根據shard和replica資料自行在zookeeper中註冊

create table t_s2_r2\

(\ dt date,\

path string \

)\engine = replicatedmergetree('/clickhouse/tables//t_s2_r2','',dt, dt, 8192)

建立分布式表t_s2_r2_all,這個表在任何乙個節點建立都行,t_s2_r2_all就像乙個檢視,指向所有的分片,資料真正的儲存在每個節點的t_s2_r2

create table t_s2_r2_all as t_s2_r2 engine = distributed(perftest_2shards_2replicas, default, t_s2_r2, rand())
插入資料

insert into t_s2_r2_all values('2019-07-21','path1')

insert into t_s2_r2_all values('2019-07-22','path1')

insert into t_s2_r2_all values('2019-07-23','path1')

insert into t_s2_r2_all values('2019-07-23','path1')

檢視資料

hadoop7 :) select * from t_s2_r2_all

select *

from t_s2_r2_all

┌─────────dt─┬─path──┐

│ 2019-07-21 │ path1 │

│ 2019-07-22 │ path1 │

│ 2019-07-24 │ path1 │

└────────────┴───────┘

┌─────────dt─┬─path──┐

│ 2019-07-23 │ path1 │

└────────────┴───────┘

4 rows in set. elapsed: 0.009 sec.

檢視每個節點表t_s2_r2資料

hadoop2 :) select * from t_s2_r2

select *

from t_s2_r2

┌─────────dt─┬─path──┐

│ 2019-07-23 │ path1 │

└────────────┴───────┘

hadoop5 :) select * from t_s2_r2

select *

from t_s2_r2

┌─────────dt─┬─path──┐

│ 2019-07-23 │ path1 │

└────────────┴───────┘

1 rows in set. elapsed: 0.007 sec.

hadoop6 :) select * from t_s2_r2

select *

from t_s2_r2

┌─────────dt─┬─path──┐

│ 2019-07-21 │ path1 │

│ 2019-07-22 │ path1 │

│ 2019-07-24 │ path1 │

└────────────┴───────┘

3 rows in set. elapsed: 0.002 sec.

hadoop7 :) select * from t_s2_r2

select *

from t_s2_r2

┌─────────dt─┬─path──┐

│ 2019-07-21 │ path1 │

│ 2019-07-22 │ path1 │

│ 2019-07-24 │ path1 │

└────────────┴───────┘

3 rows in set. elapsed: 0.002 sec.

可以看到hadoop2和hadoop5資料是一致的,hadoop6和hadoop7資料是一致的,現在測試下高可用,乾掉hadoop2節點

service clickhouse-server stop

t_s2_r2_all資料依舊可查,因為shard01還有乙個存活副本hadoop5

hadoop7 :) select * from t_s2_r2_all

select *

from t_s2_r2_all

┌─────────dt─┬─path──┐

│ 2019-07-21 │ path1 │

│ 2019-07-22 │ path1 │

│ 2019-07-24 │ path1 │

└────────────┴───────┘

┌─────────dt─┬─path──┐

│ 2019-07-23 │ path1 │

└────────────┴───────┘

4 rows in set. elapsed: 0.008 sec.

現在依然可以插入資料

insert into t_s2_r2_all values('2019-07-29','path2')
這條資料落在了shard01上

hadoop5 :) select * from t_s2_r2

select *

from t_s2_r2

┌─────────dt─┬─path──┐

│ 2019-07-29 │ path2 │

└────────────┴───────┘

┌─────────dt─┬─path──┐

│ 2019-07-23 │ path1 │

└────────────┴───────┘

2 rows in set. elapsed: 0.002 sec.

現在再啟動hadoop2節點上的clickhouse-server,剛才插入的資料,會自動同步到hadoop2的t_s2_r2

hadoop2 :) select * from t_s2_r2

select *

from t_s2_r2

┌─────────dt─┬─path──┐

│ 2019-07-29 │ path2 │

└────────────┴───────┘

┌─────────dt─┬─path──┐

│ 2019-07-23 │ path1 │

└────────────┴───────┘

2 rows in set. elapsed: 0.003 sec.

當hadoop2和hadoop5上的clickhouse-server同時被乾掉時,那t_s2_r2_all就不可用了,這個應該很好理解,這裡就不再測了

end

高可用集群

高可用集群主要實現自動偵測 auto detect 故障 自動切換 故障轉移 failover 和自動恢復 failback 簡單來說就是,用高可用集群軟體實現故障檢查和故障轉移 故障 備份主機切換 的自動化,當然像負載均衡 dns分發也可提供高可性。active passive 主備模型 acti...

Keepalived Nginx高可用集群

安裝環境 centos6.6 x64 nginx版本 1.9.3 keepalived版本 1.2.18 ipvip 主節點192.168.11.21 192.168.11.20 備節點192.168.11.22 192.168.11.20 1.1 安裝openssl tar zxvf openss...

高可用集群 fence

一 物理機安裝fence 開啟服務,並做相應設定 刪除生成的鑰匙,重新擷取 rm fr etc cluster fence xvm.key dd if dev urandom of etc cluster fence xvm.key bs 128 count 1 重啟服務 systemctl res...