二、扩容
2.1 扩容副本
对于副本节点的扩容,当ck集群新增副本节点后,zk会自动将原副本中的数据同步至新增副本节点中。
1、扩容副本的大致步骤
- 在扩容副本节点中修改配置,将集群配置中添加当前副本节点
- 启动扩容副本节点节点,并创建相关复制表(此时该副本节点查询请求可正常路由选择所有的副本节点,但原副本节点配置文件未刷新,只能路由选择原有副本节点)
- 原副本节点修改配置文件,将集群配置中添加新增副本节点信息
2、案例测试
1)扩容前配置
-- 配置文件
<clickhouse_remote_servers>
<!-- Test only shard config for testing distributed storage -->
<shard1_repl1>
<shard>
<!-- Optional. Shard weight when writing data. Default: 1. -->
<weight>1</weight>
<!-- Optional. Whether to write data to just one of the replicas. Default: false (write data to all replicas). -->
<internal_replication>true</internal_replication>
<replica>
<host>sdw1</host>
<port>9000</port>
</replica>
</shard>
</shard1_repl1>
</clickhouse_remote_servers>
-- sdw1集群信息
sdw1 :) select * from system.clusters;
SELECT *
FROM system.clusters
┌─cluster──────┬─shard_num─┬─shard_weight─┬─replica_num─┬─host_name─┬─host_address──┬─port─┬─is_local─┬─user────┬─default_database─┬─errors_count─┬─estimated_recovery_time─┐
│ shard1_repl1 │ 1 │ 1 │ 1 │ sdw1 │ 172.16.104.12 │ 9000 │ 1 │ default │ │ 0 │ 0 │
└──────────────┴───────────┴──────────────┴─────────────┴───────────┴───────────────┴──────┴──────────┴─────────┴──────────────────┴──────────────┴─────────────────────────┘
1 rows in set. Elapsed: 0.005 sec.
-- sdw1上复制表信息
sdw1 :) show tables;
SHOW TABLES
┌─name─┐
│ tt1 │
└──────┘
1 rows in set. Elapsed: 0.007 sec.
sdw1 :) select * from tt1 order by id;
SELECT *
FROM tt1
ORDER BY id ASC
┌─id─┬─name─┬─create_date─┐
│ 4 │ ww │ 2020-01-02 │
└────┴──────┴─────────────┘
┌─id─┬─name─┬─create_date─┐
│ 6 │ dsk │ 2020-07-20 │
└────┴──────┴─────────────┘
┌─id─┬─name─┬─create_date─┐
│ 19 │ bw │ 2021-02-18 │
└────┴──────┴─────────────┘
3 rows in set. Elapsed: 0.012 sec.
2)修改配置文件
<clickhouse_remote_servers>
<!-- Test only shard config for testing distributed storage -->
<shard1_repl1>
<shard>
<!-- Optional. Shard weight when writing data. Default: 1. -->
<weight>1</weight>
<!-- Optional. Whether to write data to just one of the replicas. Default: false (write data to all replicas). -->
<internal_replication>true</internal_replication>
<replica>
<host>sdw1</host>
<port>9000</port>
</replica>
<!-- 将新增的副本节点添加至集群配置中 -->
<replica>
<host>sdw2</host>
<port>9000</port>
</replica>
</shard>
</shard1_repl1>
</clickhouse_remote_servers>
<!-- 新增副本节点按照规律填写macros信息 -->
<macros>
<layer>01</layer>
<shard>01</shard>
<replica>cluster01-01-2</replica>
</macros>
3)修改sdw2节点配置信息后,启动新增副本节点ck服务,并手动创建相关表结构。此时对于sdw2节点来讲,集群的副本信息是完整的,可正常路由到任意节点,当时对于sdw1节点来讲,由于配置文件还未刷新,集群副本仍然还是只有sdw1一个。
-- 启动sdw2节点
# systemctl restart clickhouse-server
-- 在sdw2节点上手动创建表结构
sdw2 :) create table db1.tt1 (`id` Int32,`name` String,`create_date` Date) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/tt1', '{replica}') PARTITION BY toYYYYMM(create_date) ORDER BY id SETTINGS index_granularity = 8192;
sdw2 :) create table db1.tt2 on cluster shard1_repl1 (`id` Int32,`name` String) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/tt2', '{replica}'