ClickHouse 22.3.15.32 集群搭建完整指南

ClickHouse 作为一款高性能的列式数据库管理系统,在处理大规模数据分析场景中表现卓越。本文将详细介绍如何搭建一个高可用的 ClickHouse 22.3 版本集群,包括环境准备、配置文件设置、集群初始化及验证等关键步骤。

一、环境准备

1.1 服务器规划

本次搭建示例采用 3 台服务器组成 ClickHouse 集群,每台服务器同时作为 ClickHouse 服务节点和 ZooKeeper 节点(实际生产环境建议分离部署):

主机名IP 地址角色
ck-node1192.168.1.101ClickHouse + ZooKeeper
ck-node2192.168.1.102ClickHouse + ZooKeeper
ck-node3192.168.1.103ClickHouse + ZooKeeper

1.2 系统要求

  • 操作系统:CentOS 7.x 或 Ubuntu 20.04 LTS
  • 内存:至少 8GB RAM(生产环境建议 16GB+)
  • 磁盘:SSD 或 HDD(建议使用 RAID 确保数据安全)
  • 网络:所有节点间网络互通,关闭防火墙或开放必要端口

1.3 前置操作

在所有节点执行以下操作:

bash

# 关闭SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 配置主机名解析
cat >> /etc/hosts << EOF
192.168.1.101 ck-node1
192.168.1.102 ck-node2
192.168.1.103 ck-node3
EOF

# 安装依赖
yum install -y curl openssl-devel

二、安装 ZooKeeper 集群

ClickHouse 集群依赖 ZooKeeper 进行元数据管理和分布式协调,我们先搭建一个 3 节点的 ZooKeeper 集群。

2.1 安装 Java

ZooKeeper 需要 Java 环境:

bash

yum install -y java-1.8.0-openjdk-devel
java -version  # 验证安装

2.2 安装 ZooKeeper

在所有节点执行:

bash

# 下载并解压ZooKeeper
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz -C /opt/
ln -s /opt/apache-zookeeper-3.7.0-bin /opt/zookeeper

# 创建数据和日志目录
mkdir -p /data/zookeeper/data
mkdir -p /data/zookeeper/logs

# 创建myid文件(每个节点值不同)
# 在ck-node1上
echo 1 > /data/zookeeper/data/myid
# 在ck-node2上
echo 2 > /data/zookeeper/data/myid
# 在ck-node3上
echo 3 > /data/zookeeper/data/myid

2.3 配置 ZooKeeper

在所有节点创建配置文件:

bash

cp /opt/zookeeper/conf/zoo_sample.cfg /opt/zookeeper/conf/zoo.cfg

cat > /opt/zookeeper/conf/zoo.cfg << EOF
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/logs
clientPort=2181
server.1=ck-node1:2888:3888
server.2=ck-node2:2888:3888
server.3=ck-node3:2888:3888
EOF

2.4 启动 ZooKeeper

在所有节点执行:

bash

# 创建系统服务
cat > /etc/systemd/system/zookeeper.service << EOF
[Unit]
Description=Apache ZooKeeper Server
After=network.target

[Service]
Type=forking
WorkingDirectory=/opt/zookeeper
ExecStart=/opt/zookeeper/bin/zkServer.sh start
ExecStop=/opt/zookeeper/bin/zkServer.sh stop
ExecReload=/opt/zookeeper/bin/zkServer.sh restart
User=root
Group=root

[Install]
WantedBy=multi-user.target
EOF

# 启动并设置开机自启
systemctl daemon-reload
systemctl start zookeeper
systemctl enable zookeeper

# 查看状态(应分别显示leader和follower)
/opt/zookeeper/bin/zkServer.sh status

三、安装 ClickHouse 22.X

3.1 添加 ClickHouse 仓库

在所有节点执行:

bash

# 添加官方仓库
yum install -y yum-utils
rpm --import https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG
yum-config-manager --add-repo https://repo.clickhouse.tech/rpms/stable/x86_64

3.2 安装指定版本

bash

# 查看可用版本
yum list 'clickhouse*' --showduplicates | grep 22.

# 安装22.3版本(示例)
yum install -y clickhouse-server-22.3.15.32 clickhouse-client-22.3.15.32

3.3 初始配置

在所有节点执行:

bash

# 创建数据和日志目录
mkdir -p /data/clickhouse/data
mkdir -p /data/clickhouse/logs
chown -R clickhouse:clickhouse /data/clickhouse

# 备份默认配置
mv /etc/clickhouse-server/config.xml /etc/clickhouse-server/config.xml.bak
mv /etc/clickhouse-server/users.xml /etc/clickhouse-server/users.xml.bak

四、配置 ClickHouse 集群

4.1 配置 config.xml

在所有节点创建新的配置文件 /etc/clickhouse-server/config.xml

xml

<?xml version="1.0"?>
<yandex>
    <!-- 日志和数据存储路径 -->
    <path>/data/clickhouse/</path>
    <tmp_path>/data/clickhouse/tmp/</tmp_path>
    <user_files_path>/data/clickhouse/user_files/</user_files_path>
    <log>/data/clickhouse/logs/clickhouse-server.log</log>
    <errorlog>/data/clickhouse/logs/clickhouse-server.err.log</errorlog>
    
    <!-- 网络配置 -->
    <listen_host>::</listen_host>
    <http_port>8123</http_port>
    <tcp_port>9000</tcp_port>
    <interserver_http_port>9009</interserver_http_port>
    
    <!-- 集群配置 -->
    <remote_servers>
        <clickhouse_cluster>
            <!-- 分片1 -->
            <shard>
                <internal_replication>true</internal_replication>
                <replica>
                    <host>ck-node1</host>
                    <port>9000</port>
                </replica>
            </shard>
            <!-- 分片2 -->
            <shard>
                <internal_replication>true</internal_replication>
                <replica>
                    <host>ck-node2</host>
                    <port>9000</port>
                </replica>
            </shard>
            <!-- 分片3 -->
            <shard>
                <internal_replication>true</internal_replication>
                <replica>
                    <host>ck-node3</host>
                    <port>9000</port>
                </replica>
            </shard>
        </clickhouse_cluster>
    </remote_servers>
    
    <!-- ZooKeeper配置 -->
    <zookeeper>
        <node index="1">
            <host>ck-node1</host>
            <port>2181</port>
        </node>
        <node index="2">
            <host>ck-node2</host>
            <port>2181</port>
        </node>
        <node index="3">
            <host>ck-node3</host>
            <port>2181</port>
        </node>
    </zookeeper>
    
    <!-- 宏定义 - 每个节点不同 -->
    <macros>
        <shard>01</shard>  <!-- 节点1设为01,节点2设为02,节点3设为03 -->
        <replica>ck-node1</replica>  <!-- 对应节点主机名 -->
    </macros>
    
    <!-- 其他默认配置 -->
    <max_connections>4096</max_connections>
    <keep_alive_timeout>3</keep_alive_timeout>
    <max_concurrent_queries>100</max_concurrent_queries>
    <uncompressed_cache_size>8589934592</uncompressed_cache_size>
    <mark_cache_size>5368709120</mark_cache_size>
</yandex>

注意:每个节点的 <macros> 部分需要修改为对应的值:

  • ck-node1: <shard>01</shard><replica>ck-node1</replica>
  • ck-node2: <shard>02</shard><replica>ck-node2</replica>
  • ck-node3: <shard>03</shard><replica>ck-node3</replica>

4.2 配置 users.xml

在所有节点创建 /etc/clickhouse-server/users.xml

xml

<?xml version="1.0"?>
<yandex>
    <profiles>
        <default>
            <max_memory_usage>10000000000</max_memory_usage>
            <use_uncompressed_cache>0</use_uncompressed_cache>
            <load_balancing>random</load_balancing>
        </default>
        <readonly>
            <readonly>1</readonly>
        </readonly>
    </profiles>

    <users>
        <default>
            <password></password>  <!-- 生产环境建议设置密码 -->
            <networks>
                <ip>::/0</ip>
            </networks>
            <profile>default</profile>
            <quota>default</quota>
        </default>
    </users>

    <quotas>
        <default>
            <interval>
                <duration>3600</duration>
                <queries>0</queries>
                <errors>0</errors>
                <result_rows>0</result_rows>
                <read_rows>0</read_rows>
                <execution_time>0</execution_time>
            </interval>
        </default>
    </quotas>
</yandex>

五、启动 ClickHouse 集群

在所有节点执行:

bash

# 修改目录权限
chown -R clickhouse:clickhouse /etc/clickhouse-server/
chown -R clickhouse:clickhouse /data/clickhouse/

# 启动服务
systemctl start clickhouse-server
systemctl enable clickhouse-server

# 查看状态
systemctl status clickhouse-server

六、验证集群配置

6.1 连接到 ClickHouse

bash

clickhouse-client --host ck-node1

6.2 查看集群状态

sql

SELECT * FROM system.clusters;

该命令应显示我们配置的 clickhouse_cluster 及所有节点信息。

6.3 创建分布式表测试

sql

-- 创建本地表
CREATE TABLE default.test_local ON CLUSTER clickhouse_cluster (
    id Int32,
    name String,
    create_time DateTime
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/test_local', '{replica}')
ORDER BY id;

-- 创建分布式表
CREATE TABLE default.test_distributed ON CLUSTER clickhouse_cluster (
    id Int32,
    name String,
    create_time DateTime
) ENGINE = Distributed(clickhouse_cluster, default, test_local, rand());

6.4 插入测试数据

sql

-- 插入测试数据
INSERT INTO default.test_distributed (id, name, create_time)
VALUES 
(1, 'test1', now()),
(2, 'test2', now()),
(3, 'test3', now());

-- 查询数据
SELECT * FROM default.test_distributed;

-- 查看各节点数据分布
SELECT 
    hostName() AS node,
    count(*) AS cnt 
FROM default.test_local 
GROUP BY node;

七、常见问题及解决方案

  1. 服务启动失败

    • 检查日志文件 /data/clickhouse/logs/clickhouse-server.err.log
    • 确认 ZooKeeper 集群正常运行
    • 检查目录权限是否正确
  2. 集群节点无法通信

    • 确认防火墙已关闭或相关端口已开放
    • 检查 /etc/hosts 配置是否正确
    • 验证节点间网络连通性
  3. 分布式表创建失败

    • 检查 ZooKeeper 连接配置
    • 确认所有节点 ClickHouse 服务正常运行
    • 检查集群名称是否一致

八、生产环境建议

  1. 硬件配置

    • 使用高性能 CPU 和足够的内存
    • 采用 SSD 存储提升查询性能
    • 配置冗余电源和 RAID 阵列
  2. 安全加固

    • 为 ClickHouse 设置强密码
    • 限制网络访问,只开放必要端口
    • 定期备份数据
  3. 监控与维护

    • 部署 Prometheus + Grafana 监控集群
    • 配置日志轮转防止磁盘占满
    • 定期执行 OPTIMIZE 操作优化表性能
  4. 高可用设计

    • 每个分片至少配置 2 个副本
    • 考虑使用负载均衡器分发查询请求
    • 部署 ZooKeeper 独立集群并配置监控
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值