阿里云 ECS 安装 ClickHouse:密码配置、目录迁移与基础调优

概述

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

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


1. 安装 ClickHouse

1.1 配置 Yum 源

创建 ClickHouse 的 Yum 源配置文件:

bash 复制代码
sudo vi /etc/yum.repos.d/clickhouse.repo

写入以下内容:

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

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

bash 复制代码
sudo yum makecache
sudo yum install -y clickhouse-server clickhouse-client

1.2 开放监听地址

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

xml 复制代码
<listen_host>0.0.0.0</listen_host>

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

1.3 启动服务

bash 复制代码
sudo systemctl start clickhouse-server
sudo systemctl enable clickhouse-server

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

bash 复制代码
clickhouse-client

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


2. 设置密码

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

2.1 通过配置文件设置密码

停止服务:

bash 复制代码
sudo systemctl stop clickhouse-server

创建用户密码配置:

bash 复制代码
sudo vi /etc/clickhouse-server/users.d/default-password.xml

示例配置如下:

xml 复制代码
<clickhouse>
    <users>
        <default>
            <password>your_password</password>
            <networks>
                <ip>::/0</ip>
            </networks>
        </default>
    </users>
</clickhouse>

重启后连接:

bash 复制代码
sudo systemctl start clickhouse-server
clickhouse-client --password

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

2.2 通过 SQL 修改密码

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

xml 复制代码
<access_control_path>/var/lib/clickhouse/access/</access_control_path>

重启服务:

bash 复制代码
sudo systemctl restart clickhouse-server

登录后执行:

sql 复制代码
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 查询并发与线程

xml 复制代码
<!-- config.xml -->
<max_concurrent_queries>100</max_concurrent_queries>
<max_threads>8</max_threads>

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

3.2 内存限制

xml 复制代码
<!-- 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_by GROUP BY 超限后溢写磁盘 5G
max_bytes_before_external_sort ORDER BY 超限后溢写磁盘 5G

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

3.3 后台合并池

xml 复制代码
<!-- 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 安全限制

xml 复制代码
<!-- 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 缓存优化

xml 复制代码
<!-- 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 停止服务

bash 复制代码
sudo systemctl stop clickhouse-server

4.2 创建目录并设置权限

bash 复制代码
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,调整以下路径:

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 迁移已有数据

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

bash 复制代码
sudo cp -r /var/lib/clickhouse/* /data/clickhouse/data/
sudo chown -R clickhouse:clickhouse /data/clickhouse

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

4.5 启动并验证

bash 复制代码
sudo systemctl start clickhouse-server
clickhouse-client --password -q "SELECT name, path FROM system.databases"

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


5. 备份与恢复

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

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 备份命令

备份单个数据库:

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

备份所有数据库:

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

备份单张表:

bash 复制代码
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 恢复命令

恢复所有数据库:

bash 复制代码
clickhouse-client --password -q "RESTORE ALL DATABASES FROM Disk('backups', 'all_20260805.zip')"

恢复单个数据库:

bash 复制代码
clickhouse-client --password -q "RESTORE DATABASE default FROM Disk('backups', 'default_20260805.zip')"

恢复单张表:

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

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

5.4 跨服务器迁移

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

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

示例:

bash 复制代码
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 源、安装服务、设置访问控制、迁移数据目录、补充调优参数、建立备份恢复方案。

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

相关推荐
真上帝的左手1 小时前
19. 大数据- 湖仓一体&BI - 阿里云实践
大数据·阿里云·云计算
ACP广源盛139246256731 小时前
Qwen3.8‑2.4T 开源落地@ACP#国产 MoE 大模型私有化部署中 MST 多屏转换芯片 GSV2231 硬件价值与应用场景
大数据·数据库·人工智能·嵌入式硬件
万岳科技系统开发2 小时前
外卖跑腿小程序如何提升本地生活服务平台运营效率?
大数据·小程序·生活
cc复CC2 小时前
从零开始手写 Spark 02|数据流与延迟迭代
大数据·分布式
数据智研2 小时前
【数据分享】全国农产品成本收益资料汇编(1953-2025)
大数据·人工智能·信息可视化·数据分析
yinshuzhineng3 小时前
问题:如何实现数字化转型,增强竞争优势?
大数据·人工智能·制造
Zaimmm3 小时前
临床文献智能检索哪家强?2026年主流AI循证平台深度测评与推荐
大数据·人工智能·microsoft
QYR_Jodie3 小时前
2026-2032全球玻璃纤维网市场分析:2032年将达到5.55亿美元
大数据·人工智能
八角Z3 小时前
AI Agent作为经济参与者的兴起:机器经济与传统金融体系的并存与交织
大数据·人工智能·服务发现