一、搭建Zookeeper集群
我這里用的是三台服務器,分別為第一台118.xx.xx.101,第二台 49.xx.xx.125, 第三台110.xx.xx.67
二、配置ClickHouse集群
用的也是三台服務器,分別為第一台118.xx.xx.101,第二台 49.xx.xx.125, 第三台110.xx.xx.67
1、集群配置
vi /etc/clickhouse-server/config.xml
<perftest_3shards_1replicas> <shard> <internal_replication>true</internal_replication> <replica> <host>118.xx.xx.101</host> <port>9000</port> <user>larrylin2</user> <password>xxxx</password> </replica> </shard> <shard> <replica> <internal_replication>true</internal_replication> <host>49.xx.xx.125</host> <port>9000</port> <user>larrylin2</user> <password>xxxx</password> </replica> </shard> <shard> <internal_replication>true</internal_replication> <replica> <host>110.xx.xx.67</host> <port>9000</port> <user>larrylin2</user> <password>xxxx</password> </replica> </shard> </perftest_3shards_1replicas>
perftest_3shards_1replicas 為集群名稱
2、zookeeper配置
vi /etc/clickhouse-server/config.xml
127.0.0.1是當前這台服務器。49和110是另外兩台
3、配置macros
vi /etc/clickhouse-server/config.xml
118是這台服務器的IP
三、沒有副本的分布式集群
1、在第一台服務器118.xx.xx.101中
1) 在每個服務端創建一個普通表
create table tb_distribute(id UInt16, name String) ENGINE=TinyLog;
2) 在任意一個客戶端創建一個分布式引擎表
create table dis_table(id UInt16, name String) ENGINE=Distributed(perftest_3shards_1replicas, db_test, tb_distribute, id);
perftest_3shards_1replicas: 集群名稱
db_test: 數據庫名稱
tb_distribute: 普通表
id: 分片id
3)插入數據
insert into tb_distribute values(1,'zhangsan');
查詢數據,可以發現tb_distribute和dis_table兩張表都又這條數據
在第三台服務110.xx.xx.67中插入測試數據
insert into tb_distribute values(2,'lisi');
然后在第一台服務器118.xx.xx.101中查詢,可以發現了在第三台服務110.xx.xx.67服務器中插入的數據。
在第一台服務器中增加數據,使用分布式表
insert into dis_table values(11,'宋江');
然后在第二台查詢到了這條數據
所有數據機器分布
總結: 向任何一台集群的 tb_distribute中插入數據,在分布式表中dis_table 能查到。
向分布式表中dis_table中插入數據,數據會被分到某個機器的tb_distribute表中。
四、有副本的分布式集群
1、配置
vi /etc/clickhouse-server/config.xml,三台機器配置是一樣的。
<perftest_1shards_3replicas> <shard> <internal_replication>false</internal_replication> <replica> <host>118.xx.xx.101</host> <port>9000</port> <user>larrylin2</user> <password>xxxx</password> </replica> <replica> <internal_replication>true</internal_replication> <host>49.xx.xx.125</host> <port>9000</port> <user>larrylin2</user> <password>xxxx</password> </replica> <replica> <host>110.xx.xx.67</host> <port>9000</port> <user>larrylin2</user> <password>xxxx</password> </replica> </shard> </perftest_1shards_3replicas>
2、重啟
三台機器分別重啟,然后查看集群
3、在3台機器上分別創建普通表
create table tb_d_test( id String, date Date ) ENGINE = MergeTree(date,(id,date), 8192);
4、創建分布式表
在任一機器上
create table dis_all AS tb_d_test ENGINE= Distributed(perftest_1shards_3replicas, db_test, tb_d_test, rand());
查看創建的表
5、往分布式表中插入數據
insert into dis_all values ('1','2021-07-14');
然后在三台機器上查詢普通表 tb_d_test;
select * from tb_d_test;
可以發現,這三台數據都有數據。
perftest_3shards_1replicas