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. 分步操作流程

  1. 编辑集群配置文件:删除待下线节点(如 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>
 
  1. 无需重启集群:Zookeeper 支持动态加载配置,修改后即时生效。
  2. 验证收缩结果:执行SELECT * FROM system.clusters;,若结果中仅保留 xh-mytest-ck01 和 xh-mytest-ck02 节点,说明收缩成功。

三、集群扩容:新增副本节点

1. 扩容前提准备

  1. 新增节点(如 xh-mytest-ck03)需完成 ClickHouse 安装,且版本与现有节点一致。
  2. 确保新增节点与现有节点网络互通(9000 端口可访问),并配置好 Zookeeper 连接(与集群其他节点一致)。
  3. 若新增节点曾加入过集群,需先清理历史数据和元信息,避免冲突。

2. 分步操作流程

  1. 同步配置文件:在所有现有节点和新增节点上,修改remote_servers配置,添加新增节点的<replica>块(保持全集群配置一致):
<replica>
    <host>xh-mytest-ck03</host>
    <port>9000</port>
</replica>
 
  1. 执行建库建表语句:在新增节点上执行与主集群一致的CREATE DATABASECREATE TABLE语句。
  2. 自动数据同步:新增节点会从 Zookeeper 获取主节点信息,自动同步全量数据,无需手动拷贝。
  3. 验证扩容结果:执行SELECT * FROM system.clusters;,若新增节点出现在结果中,且errors_count为 0,说明扩容成功。

四、关键避坑指南

  1. 配置一致性要求:扩容时必须在所有节点同步更新配置,否则主节点无法识别新增副本,查询时不会分发任务到新节点。
  2. internal_replication参数:复制表场景下必须设为true,否则写入操作会同时向所有副本写入数据,导致数据重复和不一致。
  3. 节点下线注意事项:若需下线的节点是业务高频访问的副本,建议在低峰期操作,避免短时间内数据同步压力集中。
  4. 版本兼容性:新增节点的 ClickHouse 版本需与集群现有版本匹配,否则可能出现数据同步失败或功能不兼容问题。

五、总结

ClickHouse 无分片集群的伸缩核心是 “配置修改 + 动态生效”,无需复杂的分片重平衡操作。收缩时直接删除副本配置,扩容时同步配置并执行建表语句即可,全程不影响集群服务。关键在于保持配置一致性和参数正确性,避免因细节失误导致数据异常。

posted on 2025-12-08 11:00  数据与人文  阅读(7)  评论(0)    收藏  举报