1.机器准备:
我们准备了6台机器用来部署,准备搭建一个3分片2副本集群,当然也可根据你自己实际情况选择机器数量。
2.在每台机器上安装clickhouse:
依次执行以下命令(来源于官网文档):
sudo yum install yum-utils
sudo rpm --import https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG
sudo yum-config-manager --add-repo https://repo.clickhouse.tech/rpm/stable/x86_64
sudo yum install clickhouse-server clickhouse-client
3.启动每台机器的clickhouse:
sudo systemctl start clickhouse-server
启动后可以查看状态:
sudo systemctl status clickhouse-server
启动成功后,可以使用命令连接clickhouse:
clickhouse-client
4.部署zookeeper集群:
为什么使用zookeeper?不用也可以,但建议还是使用。附上我搭建zookeeper的教程连接:
(一定要看,本人亲自搭建过,一步一步来,不会有问题)
ClickHouse提供了非常高级的基于zookeeper的表复制方式,同时也提供了基于Cluster的复制方式,分析一下这两种方式:
1.基于zookeeper的表复制方式:
/etc/clickhouse-server/config.xml
(1)配置 listen_host字段:
<listen_host>::1</listen_host>
<listen_host>127.0.0.1</listen_host>
<zookeeper>
<node index="1">
<host>172.31.36.230</host>
<port>2181</port>
</node>
<node index="2">
<host>172.31.36.231</host>
<port>2181</port>
</node>
<node index="3">
<host>172.31.36.232</host>
<port>2181</port>
</node>
</zookeeper>
3.配置 remote_server字段:
找到配置文件中的 remote_server标签,发现它里面有很多的内容,我们没有都用到,它只是给我一个例子,把里面的内容都删除,粘贴上我们自己想要的:
<remote_servers>
<!--ck_cluster是集群名字,自己命名就可以,建库建表需要用到-->
<ck_cluster>
<!-- 数据分片1 -->
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>172.32.28.141</host>
<port>9000</port>
</replica>
<replica>
<host>172.32.28.142</host>
<port>9000</port>
</replica>
</shard>
<!-- 数据分片2 -->
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>172.32.28.143</host>
<port>9000</port>
</replica>
<replica>
<host>172.32.28.144</host>
<port>9000</port>
</replica>
</shard>
<!-- 数据分片3 -->
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>172.32.28.145</host>
<port>9000</port>
</replica>
<replica>
<host>172.32.28.146</host>
<port>9000</port>
</replica>
</shard>
</ck_cluster>
</remote_servers>
(4)配置macros字段:
根据每台机器的分片副本,配置。如:第3分片的第一副本这样配置:
<macros>
<shard>03</shard>
<replica>01</replica>
</macros>
比如:我们所有机器具体信息:
ck01: shard=01, replica=01
ck02: shard=01, replica=02
ck03: shard=02, replica=01
ck04: shard=02, replica=02
ck05: shard=03, replica=01
ck05: shard=03, replica=02
配置后可以再每台机器上用命令查看是否成功:
select * from system.macros
第一分片第一副本的机器会显示:
┌─macro───┬─substitution─┐
│ replica │ 01 │
│ shard │ 01 │
└─────────┴──────────────┘
配置文件是热更新的,所以修改配置后无需要重启服务,除非是首次启动 ClickHouse 。
(5)实验:
当我们配置完成以上之后,基于zookeeper的clickhouse集群就部署完成了,我们做几个简单的实验来验证:
查看集群状态:
随便选一台机器,连接clickhouse后,输入命令:
select * from system.clusters;
如果集群部署成功,你会看到所有机器的信息。
创建 ReplicatedMergeTree 测试表:
任选一台机器,创建一个 ReplicatedMergeTree 引擎的测试表,测试 ZooKeeper 同步功能
CREATE TABLE test_ck ON CLUSTER ck_cluster (EventDate DateTime, Number UInt32, id UInt32 )
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/test_ck', '{replica}') PARTITION BY toYYYYMM(EventDate)
ORDER BY (Number, EventDate, intHash32(id)) SAMPLE BY intHash32(id);
在其他机器节点show tables查看表结构是否同步成功;
验证同一分片不同副本数据备份是否生效:
-- ck01 登录执行 insert into test_ck values ('2021-02-01 00:00:01', 2, 2); -- ck02 登录执行 select * from test
若数据存在,则表示数据同步配置成功!
创建 Distributed 引擎测试表:
创建一个分布式测试表测试数据分片是否正常。因为已经配置了zookeeper,所以创建表的DDL语句也会同步到其他节点上。
CREATE TABLE dis_test ON CLUSTER ck_cluster AS test_ck
ENGINE = Distributed(ck_cluster, default, test_ck, rand())
//参数含义:ck_cluster集群名称,default数据库,test_ck表,rand()分布式表采用的分配算法,除了这个还有sipHash64(字段名)
(注意:分布式表是基于已经存在的本地表来实现的,分布式表相当于视图,本身并不存储数据,写分布式表,分布式表会将数据发送到各个机器上。查分布式表,会聚合所有机器的数据显示)
插入分布式表几条数据:
insert into dis_test values ('2021-07-01 8:00:01', 1,10);
insert into dis_test values ('2021-07-01 8:00:02', 11,15);
insert into dis_test values ('2021-07-01 8:00:03', 10,15);
insert into dis_test values ('2021-07-01 8:00:04', 13,5);
insert into dis_test values ('2021-07-01 8:00:05', 1,5);
insert into dis_test values ('2021-07-01 8:00:06', 12,14);
直接查询分布式表可以看到这些数据:
select * from dis_test
可以在每个分片的一个机器上查看本地表test_ck,看每个分片都有几条数据:
select * from test_ck
至此,基于zookeeper的clickhouse集群部署方式完成!
因篇幅问题不能全部显示,请点此查看更多更全内容