两节点 ClickHouse 部署方案


在 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 脚本示例

### 解决 ClickHouse 安装部署过程中的常见错误 在安装和配置 ClickHouse 的过程中可能会遇到多种类型的错误。以下是针对一些常见的问题及其解决方案: #### 驱动程序与方言插件不匹配 当使用 SQLAlchemy 进行数据库操作时,如果使用的 ClickHouse 方言插件版本不合适或者缺少必要的驱动程序,则可能导致连接失败或其他异常情况发生。确保已正确安装了适用于当前环境的最新版 ClickHouse 方言插件以及相应的 Python 驱动程序[^1]。 ```bash pip install sqlalchemy-clickhouse ``` #### 版本兼容性问题 不同版本之间可能存在 API 变更或行为差异,在升级或降级 ClickHouse 服务器端软件之后应当仔细核对客户端工具(如 `clickhouse-client`)和服务端之间的版本一致性。例如,尝试通过命令行客户端连接到特定版本的服务实例时需要注意两者间的适配关系[^2]。 ```bash [root@bigdata01 ~]# clickhouse-client --version ClickHouse client version 21.3.4.25 (official build). ``` #### ZooKeeper 依赖缺失 对于分布式架构下的 ClickHouse 部署方案而言,ZooKeeper 是实现高可用性和数据复制功能的关键组件之一。因此,在搭建多节点集群之前务必先完成 ZooKeeper 的单独安装并验证其正常工作状态;即使是在单机环境下测试也建议遵循这一原则来简化后续扩展迁移的工作量[^3]。 ```bash wget https://archive.apache.org/dist/zookeeper/zookeeper-3.8.0/apache-zookeeper-3.8.0-bin.tar.gz tar -zxvf apache-zookeeper-3.8.0-bin.tar.gz cd apache-zookeeper-3.8.0-bin/ bin/zkServer.sh start ``` #### 系统资源限制不足 某些情况下,默认的操作系统参数可能不足以支持大型查询负载或是频繁的数据写入请求。适当调整 Linux 内核关于打开文件数量 (`nofile`) 和进程数目 (`nproc`) 上限可以帮助缓解此类性能瓶颈现象[^4]。 ```bash sudo vi /etc/security/limits.conf soft nofile 65536 hard nofile 65536 soft nproc 131072 hard nproc 131072 ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值