ClickHouse集群搭建和使用


一、搭建Zookeeper集群

參考: 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM