一、背景
我们之前已经学会了搭建clickhouse集群,我们搭建的是一套单分片两副本的集群,接下来我们来测试下clickhouse的扩缩容情况
二、扩容
扩容相对来说比较简单,我们原来的架构如下
host | shard | replica |
---|---|---|
192.169.1.1 | 1 | 1 |
192.169.1.2 | 1 | 2 |
现在我们要在这个基础上在加个shard,那么该怎么弄呢,其实很简单,准备一台机器192.168.1.3,然后将配置与之前的配置改成一致,这是基础配置,接下来是改动的部分
192.168.1.1和192.168.1.2,192.168.1.3的配置文件改动相同部分如下
文件原来的配置
xml
<remote_servers>
<cluster_2S_1R>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>192.168.1.1</host>
<port>9000</port>
</replica>
<replica>
<host>192.168.1.2</host>
<port>9000</port>
</replica>
</shard>
</cluster_2S_1R>
</remote_servers>
改动后的配置
xml
<remote_servers>
<cluster_2S_1R>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>192.168.1.1</host>
<port>9000</port>
</replica>
<replica>
<host>192.168.1.2</host>
<port>9000</port>
</replica>
</shard>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>192.168.1.3</host>
<port>9000</port>
</replica>
</shard>
</cluster_2S_1R>
</remote_servers>
192.168.1.3的单独改动的配置,macros配置如下
xml
<macros>
<shard>02</shard>
<replica>192.168.1.3</replica>
</macros>
接下来就可以查看集群信息了,发现我们新增的分片已经出现在上面了
sql
select * from system.clusters;
扩容后的架构
host | shard | replica |
---|---|---|
192.169.1.1 | 1 | 1 |
192.169.1.2 | 1 | 2 |
192.169.1.3 | 2 | 1 |
sql
# MergeTree的复制引擎是ReplicatedMergeTree,所以这里并不会复制数据
CREATE DATABASE db1 ON CLUSTER cluster_2S_1R;
CREATE TABLE db1.table1 ON CLUSTER cluster_2S_1R
(
`id` UInt64,
`column1` String
)
ENGINE = MergeTree
ORDER BY id;
# 分片1插入
INSERT INTO db1.table1 (id, column1) VALUES (1, 'abc');
# 分片2插入
INSERT INTO db1.table1 (id, column1) VALUES (2, 'def');
# 在不同节点查询可以看到不同节点的数据不一致
SELECT * FROM db1.table1;
# 创建设置分片键的表
CREATE TABLE db1.table1_dist ON CLUSTER cluster_2S_1R
(
`id` UInt64,
`column1` String
)
ENGINE = Distributed('cluster_2S_1R', 'db1', 'table1', rand())
# 查看表
SELECT * FROM db1.table1_dist;
三、缩容
缩容与扩容的操作反向即可,但是这里要注意,clickhouse并不具备自动调动分片的能力,所以需要手动复制分片的数据导入到还存活的分片,不然数据会丢失