ClickHouse 无分片集群副本扩容与收缩
在 ClickHouse 集群部署中,“仅副本无分片” 的架构因配置简单、数据高可用,被广泛应用于中小规模数据场景。本文基于实际运维经验,详细拆解该架构下集群副本的扩容、收缩操作步骤,包含配置修改、状态验证及避坑要点,帮你快速完成集群伸缩。
一、集群初始环境说明
1. 节点基础信息
集群包含 3 个副本节点,无分片配置,节点与 IP 对应关系如下:
| 节点名称 | IP 地址 |
|---|---|
| Clickhouse node1 | 21.198.165.19 |
| Clickhouse node2 | 21.198.165.20 |
| Clickhouse node3 | 21.198.165.21 |
2. 核心配置文件(remote_servers 部分)
集群名称为
clickhouse_test,关键配置如下(需与 config.xml 中incl参数一致):<remote_servers>
<clickhouse_test>
<shard>
<!-- 复制表场景必须设为true,避免数据重复写入 -->
<internal_replication>true</internal_replication>
<replica>
<host>xh-mytest-ck01</host>
<port>9000</port>
</replica>
<replica>
<host>xh-mytest-ck02</host>
<port>9000</port>
</replica>
<replica>
<host>xh-mytest-ck03</host>
<port>9000</port>
</replica>
</shard>
</clickhouse_test>
</remote_servers>
3. 集群状态查询方法
ClickHouse 中查询集群信息需使用
system.clusters表(注意不是cluster表,否则会报UNKNOWN_TABLE错误):SELECT * FROM system.clusters;
执行后可查看集群名称、分片 / 副本编号、节点 IP、端口等核心信息,验证集群当前状态。
二、集群收缩:移除副本节点
1. 收缩核心原理
副本节点间地位对等,下线任一副本无需备份数据。若下线的是主副本,剩余副本会自动选举新主副本,不影响集群服务可用性。
2. 分步操作流程
- 编辑集群配置文件:删除待下线节点(如 xh-mytest-ck03)的
<replica>配置块,修改后配置如下:
<remote_servers>
<clickhouse_test>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>xh-mytest-ck01</host>
<port>9000</port>
</replica>
<replica>
<host>xh-mytest-ck02</host>
<port>9000</port>
</replica>
</shard>
</clickhouse_test>
</remote_servers>
- 无需重启集群:Zookeeper 支持动态加载配置,修改后即时生效。
- 验证收缩结果:执行
SELECT * FROM system.clusters;,若结果中仅保留 xh-mytest-ck01 和 xh-mytest-ck02 节点,说明收缩成功。
三、集群扩容:新增副本节点
1. 扩容前提准备
- 新增节点(如 xh-mytest-ck03)需完成 ClickHouse 安装,且版本与现有节点一致。
- 确保新增节点与现有节点网络互通(9000 端口可访问),并配置好 Zookeeper 连接(与集群其他节点一致)。
- 若新增节点曾加入过集群,需先清理历史数据和元信息,避免冲突。
2. 分步操作流程
- 同步配置文件:在所有现有节点和新增节点上,修改
remote_servers配置,添加新增节点的<replica>块(保持全集群配置一致):
<replica>
<host>xh-mytest-ck03</host>
<port>9000</port>
</replica>
- 执行建库建表语句:在新增节点上执行与主集群一致的
CREATE DATABASE和CREATE TABLE语句。 - 自动数据同步:新增节点会从 Zookeeper 获取主节点信息,自动同步全量数据,无需手动拷贝。
- 验证扩容结果:执行
SELECT * FROM system.clusters;,若新增节点出现在结果中,且errors_count为 0,说明扩容成功。
四、关键避坑指南
- 配置一致性要求:扩容时必须在所有节点同步更新配置,否则主节点无法识别新增副本,查询时不会分发任务到新节点。
internal_replication参数:复制表场景下必须设为true,否则写入操作会同时向所有副本写入数据,导致数据重复和不一致。- 节点下线注意事项:若需下线的节点是业务高频访问的副本,建议在低峰期操作,避免短时间内数据同步压力集中。
- 版本兼容性:新增节点的 ClickHouse 版本需与集群现有版本匹配,否则可能出现数据同步失败或功能不兼容问题。
五、总结
ClickHouse 无分片集群的伸缩核心是 “配置修改 + 动态生效”,无需复杂的分片重平衡操作。收缩时直接删除副本配置,扩容时同步配置并执行建表语句即可,全程不影响集群服务。关键在于保持配置一致性和参数正确性,避免因细节失误导致数据异常。
浙公网安备 33010602011771号