linux环境docker-compose部署Clickhouse 集群

服务器配置

💻 服务器配置参考(每台)

硬件资源最小可运行开发/测试 (可用)推荐配置 (生产环境)
CPU2 核,支持 SSE 4.24 核16 核或以上
内存4 GB8 GB64 GB 或以上
磁盘20 GB SSD50 GB+ SSDNVMe SSD或高性能云盘
网络1 Gbit/s1 Gbit/s10 Gbit/s

说明

  • 4GB 内存可以完成 ClickHouse 的安装、启动和基础功能验证,但仅限功能验证,无法承载任何数据加载或查询负载。
  • 8GB 内存可满足开发测试和小规模数据加载,但需对默认配置进行调优(降低缓存、减少并行度等)。
  • 生产环境磁盘容量需根据数据量和保留策略规划,建议内存与存储空间比例1:100 ~ 1:130
  • 如果每台服务器运行2 个 ClickHouse 实例,内存需按实例数累加。

🦒 ZooKeeper / ClickHouse Keeper 配置参考

硬件资源最小可运行开发/测试推荐配置 (生产环境)
CPU1 核2 核4 核或以上
内存1 GB4 GB8 GB 或以上
磁盘10 GB HDD20 GB SSDNVMe SSD
实例数1 个1 个3 个

注意:如果资源充足,强烈建议将 ZooKeeper / ClickHouse Keeper 部署在独立的服务器上,与 ClickHouse 数据节点分离,避免资源竞争。

💎 总结

  • 最小可运行:4GB 内存即可安装启动,适合做功能验证和"能不能跑起来"的测试。
  • 开发/测试:8GB 内存可以执行简单查询和小规模数据加载。
  • 生产环境:建议 64GB 以上内存,具体规格需根据数据量、查询复杂度和并发量综合评估。

准备工作

每台服务器运行 2 个 ClickHouse 实例 + 1 个 ZooKeeper 节点,使用host网络模式
在每台服务器上配置host:

cat>>/etc/hosts<<EOF 192.168.50.6 server01 192.168.50.157 server02 192.168.50.110 server03 EOF

1. 整体设计

  • 服务器规划(与原文一致)

    IP主机名服务
    192.168.50.6server01ZooKeeper (myid=1), ch-main, ch-sub (副本)
    192.168.50.157server02ZooKeeper (myid=2), ch-main, ch-sub (副本)
    192.168.50.110server03ZooKeeper (myid=3), ch-main, ch-sub (副本)
  • 网络模式:全部使用host,避免端口映射和跨容器通信问题。


2. 前置准备(每台服务器)

2.1 创建目录结构

mkdir-p/usr/soft/zookeeper/{data,datalog,logs,conf}mkdir-p/usr/soft/clickhouse-server/{main,sub}/{data,conf,log}# 任何用户都能写入chmod-R777/usr/soft/clickhouse-server/main/{data,log}chmod-R777/usr/soft/clickhouse-server/sub/{data,log}

2.2 准备 ZooKeeper 配置文件

每台服务器/usr/soft/zookeeper/conf/zoo.cfg中写入相同内容(注意 IP 改为您实际环境):

dataDir=/data dataLogDir=/datalog tickTime=2000 initLimit=5 syncLimit=2 clientPort=2181 autopurge.snapRetainCount=3 autopurge.purgeInterval=0 maxClientCnxns=60 server.1=192.168.50.6:2888:3888 server.2=192.168.50.157:2888:3888 server.3=192.168.50.110:2888:3888

2.3 准备 ClickHouse 配置文件

(1) 获取基础配置(任选一台执行)
dockerrun--rm-d--name=temp-ch docker.1ms.run/clickhouse/clickhouse-server:26.4dockercptemp-ch:/etc/clickhouse-server/ /etc/dockerrm-ftemp-ch

然后将/etc/clickhouse-server复制到/usr/soft/clickhouse-server/main/conf/usr/soft/clickhouse-server/sub/conf

# 复制配置到 maincp-r/etc/clickhouse-server/* /usr/soft/clickhouse-server/main/conf/# 复制配置到 subcp-r/etc/clickhouse-server/* /usr/soft/clickhouse-server/sub/conf/# 将配置分发到 server02 和 server03或者手动复制scp-r/usr/soft/clickhouse-server/main/ server02:/usr/soft/clickhouse-server/main/scp-r/usr/soft/clickhouse-server/main/ server03:/usr/soft/clickhouse-server/main/scp-r/usr/soft/clickhouse-server/sub/ server02:/usr/soft/clickhouse-server/sub/scp-r/usr/soft/clickhouse-server/sub/ server03:/usr/soft/clickhouse-server/sub/
(2) 修改config.xml

/usr/soft/clickhouse-server/main/conf/config.xml 中添加或修改以下内容(其他保持默认):

<listen_host>0.0.0.0</listen_host><timezone>Asia/Shanghai</timezone><!-- 删除原有 <remote_servers> 节点,并添加以下配置(与 <remote_servers> 同级) --><remote_serversincl="clickhouse_remote_servers"/><include_from>/etc/clickhouse-server/metrika.xml</include_from><zookeeperincl="zookeeper-servers"optional="true"/><macrosincl="macros"optional="true"/>

默认配置中可能还有 <listen_host>::</listen_host>(IPv6)或其他 listen_host 节点。建议:只保留一个 <listen_host>0.0.0.0</listen_host>,将其他的都注释掉或删除,避免配置冲突。

  • Sub 实例需额外修改端口(避免与 Main 冲突):
    /usr/soft/clickhouse-server/sub/conf/config.xml 中除了上述修改外,还需将端口改为:
<!-- 改为未被占用的端口 --><http_port>8124</http_port><tcp_port>9001</tcp_port><mysql_port>9005</mysql_port><postgresql_port>9006</postgresql_port><interserver_http_port>9010</interserver_http_port>
(3) 创建metrika.xml

main/confsub/conf中创建metrika.xml

vi/usr/soft/clickhouse-server/main/conf/metrika.xmlvi/usr/soft/clickhouse-server/sub/conf/metrika.xml <