You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向ClickHouse集群新增节点的正确操作流程是什么

ClickHouse 20.4.8.99 版本 ReplicatedReplacingMergeTree 集群新增节点操作步骤

前置说明

你之前遇到的ATTACH语法报错,是因为20.4.8.99 属于较低版本,不支持ATTACH TABLE ... FROM 'path'带路径+列定义的写法,该语法是 21.3 之后版本才新增的特性,低版本仅支持无路径的 ATTACH 或直接 CREATE TABLE 操作。
创建表提示存在已有数据目录,是因为之前操作失败后残留了未清理的元数据、数据目录文件,操作前需先清理残留文件。


前置准备

  • 新节点安装和现有集群完全一致的 20.4.8.99 版本 ClickHouse,配置文件(config.xml、metrika.xml)中的集群配置、ZooKeeper 地址、宏配置(macros 下的 shard、replica 标识)和对应分片的规则一致,端口、权限配置和现有节点对齐
  • 新节点启动后验证和现有所有节点、ZooKeeper 集群的网络连通性,保证 9000、8123、2181 等必要端口无防火墙限制
  • 提前清理新节点上目标表的残留文件:数据目录(默认路径/var/lib/clickhouse/data/[库名]/[表名]/)、元数据目录(默认路径/var/lib/clickhouse/metadata/[库名]/[表名].sql),同时确认 ZooKeeper 上对应新副本的路径无脏数据,如有可手动删除/clickhouse/tables/[分片ID]/[库名]/[表名]/replicas/[新副本名]路径

扩容操作步骤

场景1:新增节点属于全新分片

  • 在任意现有节点执行集群级 DDL 同步创建分片表:
CREATE TABLE IF NOT EXISTS [库名].[表名] ON CLUSTER [集群名]
(
-- 完全复制现有表的列定义
) ENGINE = ReplicatedReplacingMergeTree(
'/clickhouse/tables/{shard}/[库名]/[表名]',
'{replica}',
[你配置的版本字段]
)
-- 完全复制现有表的分区、排序、主键、配置参数
PARTITION BY ...
ORDER BY ...
PRIMARY KEY ...
SETTINGS ...;
  • 如果现有集群使用了分布式表,同样执行带ON CLUSTER的分布式表创建 DDL,同步到所有节点
  • 如需均衡现有分片的数据到新分片,逐分区执行迁移即可:ALTER TABLE [分布式表名] MOVE PARTITION '[分区名]' TO SHARD '[新分片ID]'

场景2:新增节点属于现有分片的额外副本

  • 直接在新节点本地执行和同分片其他节点完全一致的建表语句,无需加ON CLUSTER:
CREATE TABLE IF NOT EXISTS [库名].[表名]
(
-- 完全复制同分片现有节点的列定义
) ENGINE = ReplicatedReplacingMergeTree(
'/clickhouse/tables/[对应分片ID]/[库名]/[表名]',
'[新副本的replica标识]',
[你配置的版本字段]
)
-- 完全复制现有表的分区、排序、主键、配置参数
PARTITION BY ...
ORDER BY ...
PRIMARY KEY ...
SETTINGS ...;
  • 建表完成后 ClickHouse 会自动从 ZooKeeper 拉取副本元数据,从同分片其他副本同步全量数据,无需手动拷贝文件或挂载
  • 同步完成后执行SELECT count(*) FROM [表名]和同分片其他节点对比数据量,确认同步正常即可

内容的提问来源于stack exchange,提问作者konart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 08:27:03