目录标题
在 ClickHouse 中部署 2 个节点的方式,取决于你的目标:是 高可用性、 读写分离,还是只是单纯的 横向扩容(并行查询)。以下是 两节点 ClickHouse 部署方案的几种常见模式,并以 实际操作步骤说明。
🎯 一、部署目标分析
| 目标 | 推荐部署架构 |
|---|---|
| 数据复制 & 高可用 | 使用 ReplicatedMergeTree + Zookeeper |
| 横向扩展 & 并行查询 | 使用 Distributed 表 + Shard 架构 |
| 简单同步 & 无Zookeeper | 使用 clickhouse-copier 或定时同步脚本 |
两节点一般不能实现真正意义上的集群高可用(需要 3 节点以上防脑裂),但可以实现主备、复制、分片等部署形态。
🚀 二、ClickHouse 2节点集群部署方案(带Zookeeper)
1. 架构图(Shard1 Replica1 + Shard2 Replica2)
┌──────────────────────────┐
│ ClickHouse 节点A │
│ Shard1 + Replica1 │
│ Distributed + Replicated│
└──────────────────────────┘
▲
│
▼
┌──────────────────────────┐
│ ClickHouse 节点B │
│ Shard2 + Replica2 │
│ Distributed + Replicated│
└──────────────────────────┘
┌────────────┐
│ Zookeeper │
└────────────┘
🧱 三、具体部署步骤
✅ 1. 安装 ClickHouse 和 Zookeeper
在两台机器(假设 A: 192.168.1.101,B: 192.168.1.102)都安装 ClickHouse:
sudo apt install clickhouse-server clickhouse-client -y
部署单节点 Zookeeper(也可以用 Docker),例如在 A 上:
sudo apt install zookeeperd -y
配置 /etc/zookeeper/conf/zoo.cfg 保持默认即可(单节点模式)。
✅ 2. 配置 config.xml(两节点都要配置)
编辑 /etc/clickhouse-server/config.xml:
<zookeeper>
<node>
<host>192.168.1.101</host>
<port>2181</port>
</node>
</zookeeper>
✅ 3. 配置 metrika.xml(关键配置)
编辑 /etc/clickhouse-server/metrika.xml 来定义分片和副本:
<yandex>
<cluster>
<shard>
<replica>
<host>192.168.1.101</host>
<port>9000</port>
</replica>
</shard>
<shard>
<replica>
<host>192.168.1.102</host>
<port>9000</port>
</replica>
</shard>
</cluster>
</yandex>
✅ 4. 创建 Replicated 表和 Distributed 表
在两个节点分别执行:
A 节点:
CREATE TABLE db.table_local ON CLUSTER 'cluster'
(
id UInt64,
name String
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/shard1/table_local', 'replica1')
ORDER BY id;
CREATE TABLE db.table_all AS db.table_local
ENGINE = Distributed('cluster', 'db', 'table_local', rand());
B 节点:
CREATE TABLE db.table_local ON CLUSTER 'cluster'
(
id UInt64,
name String
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/shard2/table_local', 'replica2')
ORDER BY id;
CREATE TABLE db.table_all AS db.table_local
ENGINE = Distributed('cluster', 'db', 'table_local', rand());
✅ 5. 启动并测试集群
sudo systemctl restart clickhouse-server
然后插入数据:
INSERT INTO db.table_all VALUES (1, 'Alice'), (2, 'Bob');
SELECT * FROM db.table_all;
会自动写入各自的 Shard(根据 rand 分片策略)。
🧠 四、注意事项
| 项目 | 建议 |
|---|---|
| Zookeeper 节点数 | 最好是奇数(3个以上),防脑裂 |
| 网络配置 | 确保两节点能互通 TCP 9000 / 2181 |
| 生产部署 | 推荐至少 3个 ClickHouse 节点 + 3个 ZK 节点 |
| 备份方案 | 可结合 clickhouse-backup 工具使用 |
🧩 五、如果你不想部署 Zookeeper 呢?
可以用 普通 MergeTree 表 + rsync 脚本定期同步。但:
- 无强一致性
- 无自动故障切换
- 不能横向扩展
✅ 六、小结
| 场景 | 是否推荐 |
|---|---|
| 两节点测试、同步 | ✅ 可以实现基本读写分离、复制 |
| 两节点生产 HA | ⚠️ 不建议(容易脑裂),请至少 3节点 |
| 小型集群+ZK | ✅ Replicated + Distributed 是最佳组合 |
如你有 k8s、docker-compose、Ansible、clickhouse-keeper 或 S3 集成部署需求,我也可提供完整方案。
是否需要我输出 完整的部署 YAML 文件、docker-compose 或 systemd 脚本示例?
172

被折叠的 条评论
为什么被折叠?



