文章目录
- 一、缩容
- 1.1 下线副本
- 1、下线副本大致步骤
- 2、案例测试
- 1.2 下线分片
- 1、下线分片大致步骤
- 2、案例测试
一、缩容
1.1 下线副本
对于多副本的集群,由于副本中包含着完全相同的数据,主副本与副本是完全对等的,即使将主副本下线后,ZK也会重新选举其他副本作为新的主副本。
1、下线副本大致步骤
- 修改集群相关节点的配置文件,将需要下线的副本在集群定义中去掉
- 重启集群相关所有节点,并关闭需要下线节点
2、案例测试
1)缩容前环境信息
sdw1、sdw2为一个shard下的两个replica,sdw1为replica1、sdw2为replica2。目前我们需要把sdw2去掉,使得其变为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>
<replica>
<host>sdw2</host>
<port>9000</port>
</replica>
</shard>
</shard1_repl1>
</clickhouse_remote_servers>
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 │
│ shard1_repl1 │ 1 │ 1 │ 2 │ sdw2 │ 172.16.104.13 │ 9000 │ 0 │ default │ │ 0 │ 0 │
└──────────────┴───────────┴──────────────┴─────────────┴───────────┴───────────────┴──────┴──────────┴─────────┴──────────────────┴──────────────┴─────────────────────────┘
2 rows in set. Elapsed: 0.006 sec.
2)修改sdw1、sdw2的配置文件
<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>
<!-- # 把sdw2的replica的信息注释掉
<replica>
<host>sdw2</host>
<port>9000</port>
</replica>
-->
</shard>
</shard1_repl1>
</clickhouse_remote_servers>
3)重启sdw1服务,关闭sdw2服务,检查集群配置
-- sdw1 重启ck服务
# systemctl restart clickhouse-server
-- sdw2 关闭ck服务
# systemctl stop clickhouse-server
-- 检查当前ck集群信息
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.007 sec.
4)检查数据
sdw1 :) show tables;
SHOW TABLES
┌─name───┐
│ t1 │
│ t3 │
│ t3_all │
│ t4 │
│ t5 │
│ t6 │
│ t7 │
│ t8 │
└────────┘
8 rows in set. Elapsed: 0.006 sec.
sdw1 :) select * from t8 order by id;
SELECT *
FROM t8
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─┐
│ 12 │ aw │ 2021-01-02 │
│ 17 │ bb │ 2021-01-02 │
└────┴──────┴─────────────┘
┌─id─┬─name─┬─create_date─┐
│ 19 │ bw │ 2021-02-18 │
│ 21 │ cc │ 2020-01-08 │
└────┴──────┴─────────────┘
┌─id─┬─name─┬─create_date─┐
│ 32 │ ww │ 2020-02-02 │
└────┴──────┴─────────────┘
7 rows in set. Elapsed: 0.009 sec.
1.2 下线分片
由于不同的分片中包含了不同的数据,所以需要对指定分片下线时,需要提前将该分片的数据迁移至其他节点,然后进行下线操作。
1、下线分片大致步骤
- 将需要下线的分片节点中的本地数据进行备份
修改集群相关节点的配置文件,去掉需要下线的分片节点数据 - 重启集群相关节点,关闭需要下线节点
- 将备份数据在仍保留的分片节点进行数据恢复,若恢复表为分布式表,需要恢复至本地表中
2、案例测试
集群为mdw、sdw3两个分片节点,无副本。测试需要将sdw3的分片节点进行下线,并将所有数据迁移至mdw节点。
1)缩容前环境信息
<clickhouse_remote_servers>
<!-- Test only shard config for testing distributed storage -->
<shard2_repl0>
<shard>
<replica>
<host>mdw</host>
<port>9000</port>
</replica>
</shard>
<shard>
<replica>
<host>sdw3</host>
<port>9000</port>
</replica>
</shard>
</shard2_repl0>
</clickhouse_remote_servers>
mdw :) 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─┐
│ shard2_repl0 │ 1 │ 1 │ 1 │ mdw │ 172.16.104.11 │ 9000 │ 1 │ default │ │ 0 │ 0 │
│ shard2_repl0 │ 2 │ 1 │ 1 │ sdw3 │ 172.16.104.14 │ 9000 │ 0 │ default │ │ 1 │ 0 │
└──────────────┴───────────┴──────────────┴─────────────┴───────────┴───────────────┴──────┴──────────┴─────────┴──────────────────┴──────────────┴─────────────────────────┘
2 rows in set. Elapsed: 0.007 sec.
-- 数据检查
mdw :) select * from t8 order by id;
SELECT *
FROM t8
ORDER BY id ASC
┌─id─┬─name─┬─create_date─┐
│ 4 │ ww │ 2020-01-02 │
│ 6 │ dsk │ 2020-07-20 │
│ 12 │ aw │ 2021-01-02 │
│ 17 │ bb │ 2021-01-02 │
│ 19 │ bw │ 2021-02-18 │
│ 21 │ cc │ 2020-01-08 │
└────┴──────┴─────────────┘
┌─id─┬─name─┬─create_date─┐
│ 32 │ ww │ 2020-02-02 │
└────┴──────┴─────────────┘
7 rows in set. Elapsed: 0.667 sec.
mdw :) select * from t8_local order by id;
SELECT *
FROM t8_local
ORDER BY id ASC
┌─id─┬─name─┬─create_date─┐
│ 4 │ ww │ 2020-01-02 │
│ 19 │ bw │ 2021-02-18 │
│ 21 │ cc │ 2020-01-08 │
└────┴──────┴─────────────┘
3 rows in set. Elapsed: 0.008 sec.
mdw :) select * from t2 order by id;
SELECT *
FROM t2
ORDER BY id ASC
┌─id─┬─name─┐
│ 1 │ aa │
│ 2 │ bb │
│ 3 │ cc │
│ 4 │ dd │
│ 5 │ ee │
└────┴──────┘
5 rows in set. Elapsed: 0.016 sec.
mdw :) select * from t2_local order by id;
SELECT *
FROM t2_local
ORDER BY id ASC
┌─id─┬─name─┐
│ 2 │ bb │
│ 5 │ ee │
└────┴──────┘
2 rows in set. Elapsed: 0.005 sec.
2)备份
-- 对于分布式分区表,需要对将要下线的服务sdw3的本地表进行备份
sdw3 :) alter table db1.t8_local fetch partition 202002 from '/clickhouse/tables/02-03/t8_local';
sdw3 :) alter table db1.t8_local fetch partition 202007 from '/clickhouse/tables/02-03/t8_local';
sdw3 :) alter table db1.t8_local fetch partition 202101 from '/clickhouse/tables/02-03/t8_local';
-- 将sdw3的备份拷贝到mdw
# scp -r /data/clickhouse-server/data/data/db1/t8_local/detached/* root@mdw:/data/clickhouse-server/data/data/db1/t8_local/detached
-- 对于非分区表,通过客户端将sdw3数据进行导出备份
# clickhouse-client -h 172.16.104.14 --query="select * from db1.t2_local" > t2_local.tsv
# cat t2_local.tsv
1 aa
3 cc
4 dd
-- 将sdw3的备份拷贝到mdw
# scp -r ./t2_local.tsv root@mdw:/root
3)配置文件修改
<clickhouse_remote_servers>
<!-- Test only shard config for testing distributed storage -->
<shard2_repl0>
<shard>
<replica>
<host>mdw</host>
<port>9000</port>
</replica>
</shard>
<!-- 将需要下线的节点sdw3注释掉
<shard>
<replica>
<host>sdw3</host>
<port>9000</port>
</replica>
</shard>
-->
</shard2_repl0>
</clickhouse_remote_servers>
4)重启mdw服务,关闭sdw3服务
-- 重启mdw服务
# systemctl restart clickhouse-server
-- 关闭sdw3服务
# systemctl stop clickhouse-server
5)将sdw3的数据备份进行数据恢复
-- 进入mdw服务中需要恢复的表分区下,检查目录/文件权限
# cd /data/clickhouse-server/data/data/db1/t8_local/detached
# chown -R clickhouse:clickhouse ./
# ll
总用量 0
drwxr-x--- 2 clickhouse clickhouse 279 2月 22 21:11 202002_0_0_0
drwxr-x--- 2 clickhouse clickhouse 279 2月 22 21:11 202007_0_0_0
drwxr-x--- 2 clickhouse clickhouse 279 2月 22 21:11 202101_0_0_0
-- 对于分布式分区表,将需要恢复的数据恢复至对应表的detached目录下,通过attach进行装载恢复
mdw :) alter table db1.t8_local attach partition 202002;
mdw :) alter table db1.t8_local attach partition 202007;
mdw :) alter table db1.t8_local attach partition 202101;
-- 对于非分区表,通过客户端将备份数据进行导入恢复
# cat t2_local.tsv | clickhouse-client -h 172.16.104.11 --query "insert into db1.t2_local format TSV";
6)集群检查、数据检查
-- 集群检查
mdw :) 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─┐
│ shard2_repl0 │ 1 │ 1 │ 1 │ mdw │ 172.16.104.11 │ 9000 │ 1 │ default │ │ 0 │ 0 │
└──────────────┴───────────┴──────────────┴─────────────┴───────────┴───────────────┴──────┴──────────┴─────────┴──────────────────┴──────────────┴─────────────────────────┘
1 rows in set. Elapsed: 0.007 sec.
-- 数据检查
mdw :) select * from t2 order by id;
SELECT *
FROM t2
ORDER BY id ASC
┌─id─┬─name─┐
│ 1 │ aa │
│ 2 │ bb │
│ 3 │ cc │
│ 4 │ dd │
│ 5 │ ee │
└────┴──────┘
5 rows in set. Elapsed: 0.008 sec.
mdw :) select * from t8 order by id;
SELECT *
FROM t8
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─┐
│ 12 │ aw │ 2021-01-02 │
│ 17 │ bb │ 2021-01-02 │
└────┴──────┴─────────────┘
┌─id─┬─name─┬─create_date─┐
│ 19 │ bw │ 2021-02-18 │
│ 21 │ cc │ 2020-01-08 │
└────┴──────┴─────────────┘
┌─id─┬─name─┬─create_date─┐
│ 32 │ ww │ 2020-02-02 │
└────┴──────┴─────────────┘
7 rows in set. Elapsed: 0.010 sec.