概述

ClickHouse 是一款常用于 OLAP 场景的列式数据库,适合日志分析、报表查询、用户行为分析等高吞吐查询场景。本文记录一次在阿里云 ECS 上安装 ClickHouse 的流程,覆盖 Yum 源配置、服务启动、密码设置、数据目录迁移、基础调优和备份恢复。

本文以 CentOS/RHEL 系统为例,命令中涉及的密码、用户名、库名均为示例值,实际使用时请替换为自己的配置。


1. 安装 ClickHouse

1.1 配置 Yum 源

创建 ClickHouse 的 Yum 源配置文件:

sudo vi /etc/yum.repos.d/clickhouse.repo

写入以下内容:

[repo.yandex.ru_clickhouse_rpm_stable_x86_64]
name=clickhouse stable
baseurl=https://mirrors.aliyun.com/clickhouse/rpm/stable/
enabled=1
gpgcheck=0

刷新缓存并安装服务端、客户端:

sudo yum makecache
sudo yum install -y clickhouse-server clickhouse-client

1.2 开放监听地址

编辑 /etc/clickhouse-server/config.xml:

<listen_host>0.0.0.0</listen_host>

如果只允许本机访问,可以保持默认配置;如果要允许内网其他机器访问,需要开放监听地址,并配合安全组、防火墙、用户访问来源一起控制。

1.3 启动服务

sudo systemctl start clickhouse-server
sudo systemctl enable clickhouse-server

可以使用客户端验证服务是否正常:

clickhouse-client

默认安装后通常没有设置密码,建议安装完成后立即做用户和访问控制配置。


2. 设置密码

ClickHouse 可以通过配置文件设置密码,也可以启用访问控制后使用 SQL 管理用户。生产环境更推荐创建独立业务用户,不建议直接长期使用 default 用户承载业务访问。

2.1 通过配置文件设置密码

停止服务:

sudo systemctl stop clickhouse-server

创建用户密码配置:

sudo vi /etc/clickhouse-server/users.d/default-password.xml

示例配置如下:

<clickhouse>
    <users>
        <default>
            <password>your_password</password>
            <networks>
                <ip>::/0</ip>
            </networks>
        </default>
    </users>
</clickhouse>

重启后连接:

sudo systemctl start clickhouse-server
clickhouse-client --password

这里的 ::/0 表示允许所有来源访问,仅适合测试或配合外层安全控制使用。生产环境建议限制为内网网段、堡垒机地址或应用服务器地址。

2.2 通过 SQL 修改密码

如果希望用 SQL 管理用户,需要先启用访问控制。编辑 /etc/clickhouse-server/config.xml,增加:

<access_control_path>/var/lib/clickhouse/access/</access_control_path>

重启服务:

sudo systemctl restart clickhouse-server

登录后执行:

ALTER USER default IDENTIFIED BY 'your_password';
CREATE USER app_user IDENTIFIED BY 'app_user_password';
GRANT ALL ON *.* TO app_user;

如果权限要求更细,可以按库、表授权,不要直接授予全库权限。


3. 基础调优参数

ClickHouse 的调优需要结合机器规格和业务查询特点。下面这些参数适合作为初始配置参考。

3.1 查询并发与线程

<!-- config.xml -->
<max_concurrent_queries>100</max_concurrent_queries>
<max_threads>8</max_threads>

max_concurrent_queries 控制最大并发查询数,max_threads 控制单个查询使用的最大线程数。并发过高容易造成 CPU、内存、磁盘 I/O 同时被打满,需要根据机器规格调整。

3.2 内存限制

<!-- users.xml 或 users.d/ 下配置 -->
<profiles>
    <default>
        <max_memory_usage>10000000000</max_memory_usage>
        <max_bytes_before_external_group_by>5000000000</max_bytes_before_external_group_by>
        <max_bytes_before_external_sort>5000000000</max_bytes_before_external_sort>
    </default>
</profiles>
参数作用示例值
max_memory_usage单查询最大内存10G
max_bytes_before_external_group_byGROUP BY 超限后溢写磁盘5G
max_bytes_before_external_sortORDER BY 超限后溢写磁盘5G

max_memory_usage 不建议直接设置到机器内存上限,要给系统、后台合并任务和其他查询留出空间。

3.3 后台合并池

<!-- config.xml -->
<background_pool_size>16</background_pool_size>
<background_schedule_pool_size>16</background_schedule_pool_size>

这两个参数影响后台 merge、mutation 等任务的调度能力。写入量较高时可以适当增大,但也要观察磁盘 I/O 和 CPU 使用率。

3.4 安全限制

<!-- users.xml -->
<profiles>
    <default>
        <max_partitions_per_insert_block>100</max_partitions_per_insert_block>
        <max_table_size_to_drop>50000000000</max_table_size_to_drop>
    </default>
</profiles>
参数作用
max_partitions_per_insert_block限制单次 INSERT 涉及的分区数,避免产生过多小分区
max_table_size_to_drop设置删除大表的保护阈值,降低误删风险

3.5 缓存优化

<!-- config.xml -->
<uncompressed_cache_size>8589934592</uncompressed_cache_size>
<mark_cache_size>5368709120</mark_cache_size>

mark_cache_size 对 MergeTree 系列表的查询性能比较关键,尤其是数据量较大、查询频繁命中相同数据范围时。


4. 迁移数据和缓存目录

ECS 的系统盘通常不适合承载大量数据库数据,建议把 ClickHouse 的数据目录、临时目录迁移到数据盘,例如 /data。

4.1 停止服务

sudo systemctl stop clickhouse-server

4.2 创建目录并设置权限

sudo mkdir -p /data/clickhouse/data
sudo mkdir -p /data/clickhouse/tmp
sudo mkdir -p /data/clickhouse/user_files
sudo chown -R clickhouse:clickhouse /data/clickhouse

4.3 修改配置

编辑 /etc/clickhouse-server/config.xml,调整以下路径:

<path>/data/clickhouse/data/</path>
<tmp_path>/data/clickhouse/tmp/</tmp_path>
<user_files_path>/data/clickhouse/user_files/</user_files_path>

4.4 迁移已有数据

如果服务已经产生数据,可以先复制原目录内容:

sudo cp -r /var/lib/clickhouse/* /data/clickhouse/data/
sudo chown -R clickhouse:clickhouse /data/clickhouse

如果是新装环境,可以跳过这一步。

4.5 启动并验证

sudo systemctl start clickhouse-server
clickhouse-client --password -q "SELECT name, path FROM system.databases"

建议修改配置前先备份原始 config.xml,便于异常时快速回退。


5. 备份与恢复

ClickHouse 原生支持 BACKUP 和 RESTORE,可以用于日常备份、迁移和单表恢复。

5.1 常见备份方式

方式适用场景示例
单库备份迁移单个库、常规备份BACKUP DATABASE db TO Disk('backups', 'db.zip')
全量备份全库迁移、灾备BACKUP ALL DATABASES TO Disk('backups', 'all.zip')
单表备份单表恢复、数据抽取BACKUP TABLE db.table TO Disk('backups', 'table.zip')

5.2 备份命令

备份单个数据库:

clickhouse-client --password -q "BACKUP DATABASE default TO Disk('backups', 'default_$(date +%Y%m%d).zip')"

备份所有数据库:

clickhouse-client --password -q "BACKUP ALL DATABASES TO Disk('backups', 'all_$(date +%Y%m%d).zip')"

备份单张表:

clickhouse-client --password -q "BACKUP TABLE db_name.table_name TO Disk('backups', 'table_$(date +%Y%m%d).zip')"

备份文件一般会落在 /var/lib/clickhouse/backups/。

5.3 恢复命令

恢复所有数据库:

clickhouse-client --password -q "RESTORE ALL DATABASES FROM Disk('backups', 'all_20260805.zip')"

恢复单个数据库:

clickhouse-client --password -q "RESTORE DATABASE default FROM Disk('backups', 'default_20260805.zip')"

恢复单张表:

clickhouse-client --password -q "RESTORE TABLE db_name.table_name FROM Disk('backups', 'table_20260805.zip')"

恢复前建议确认目标端不存在同名对象,避免对象冲突。

5.4 跨服务器迁移

跨服务器迁移可以按下面的流程处理:

  1. 在源服务器执行备份。
  2. 将备份文件拷贝到目标服务器。
  3. 在目标服务器执行恢复。

示例:

scp /var/lib/clickhouse/backups/all_20260805.zip target:/var/lib/clickhouse/backups/

如果目标服务器的数据目录做过迁移,需要确认备份目录也在 ClickHouse 可访问的位置,并且文件权限属于 clickhouse 用户。


6. 常见注意事项

  1. 不要在公网直接暴露 ClickHouse 端口,至少要配合安全组、白名单和强密码。
  2. 生产环境建议创建独立业务用户,不要长期使用 default 用户。
  3. 数据目录迁移前先停服务,迁移后检查目录权限。
  4. 内存参数不要照搬,需要根据机器内存和查询压力调整。
  5. 删除大表建议设置保护阈值,避免误操作造成不可恢复的数据损失。

总结

在 ECS 上安装 ClickHouse 的核心流程可以概括为:配置 Yum 源、安装服务、设置访问控制、迁移数据目录、补充调优参数、建立备份恢复方案。

其中最容易出问题的地方是访问控制和数据目录权限。安装完成后建议先做一次完整的启动、连接、建表、备份、恢复验证,再交给业务使用。

更多推荐