阿里云 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 原生支持 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 备份命令

备份单个数据库:

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

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

相关推荐
MayBaymax6 小时前
ES 基础总结
大数据·elasticsearch·搜索引擎
Elastic 中国社区官方博客6 小时前
两个依赖和一个配置块:通过 Prometheus 远程写入将 Spring Boot 指标发送到 Elasticsearch
大数据·数据库·spring boot·elasticsearch·搜索引擎·全文检索·prometheus
nvd116 小时前
Flink 极简入门与零常驻批处理架构实战:从双模式辨析到 GitOps 通用模具治理
大数据·架构·flink
大大大大晴天️6 小时前
每天认识一个组件:向量化计算加速Apache Auron
大数据
IT研究室6 小时前
最新大数据毕业设计选题推荐-基于大数据的线上网站书籍数据分析与可视化-大数据-Spark-Hadoop-Bigdata
大数据·信息可视化·数据分析·spark·课程设计
计算机源码社6 小时前
【27届大数据毕设】基于Spark的AI艺术创作者价值评估与市场趋势预测研究 基于Python与Spark的AI生成艺术受众画像及异常热度识别可视化平台
大数据·人工智能·hadoop·python·spark·毕业设计·课程设计
SelectDB技术团队7 小时前
ELK 太占磁盘、ES 总报写入拒绝:从归因到可执行的优化清单
大数据·clickhouse·elk·elasticsearch·全文检索·复杂查询·实时更新
宸津-代码粉碎机13 小时前
OpenAI 连夜迎战 Grok Bot 和 Muse:AI 智能体从 “会聊天” 到 “能办事”,现在入场还来得及吗
java·大数据·人工智能·分布式·python
Leo.yuan14 小时前
2026年本地化Data Agent优质厂商盘点:哪些产品更适合企业生产环境
大数据·数据库·人工智能
云上先途15 小时前
任务智能体可以自动完成哪些类型工作,是不是只能做简单重复操作?
大数据·人工智能