概述
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 跨服务器迁移
跨服务器迁移可以按下面的流程处理:
- 在源服务器执行备份。
- 将备份文件拷贝到目标服务器。
- 在目标服务器执行恢复。
示例:
bash
scp /var/lib/clickhouse/backups/all_20260805.zip target:/var/lib/clickhouse/backups/
如果目标服务器的数据目录做过迁移,需要确认备份目录也在 ClickHouse 可访问的位置,并且文件权限属于 clickhouse 用户。
6. 常见注意事项
- 不要在公网直接暴露 ClickHouse 端口,至少要配合安全组、白名单和强密码。
- 生产环境建议创建独立业务用户,不要长期使用
default用户。 - 数据目录迁移前先停服务,迁移后检查目录权限。
- 内存参数不要照搬,需要根据机器内存和查询压力调整。
- 删除大表建议设置保护阈值,避免误操作造成不可恢复的数据损失。
总结
在 ECS 上安装 ClickHouse 的核心流程可以概括为:配置 Yum 源、安装服务、设置访问控制、迁移数据目录、补充调优参数、建立备份恢复方案。
其中最容易出问题的地方是访问控制和数据目录权限。安装完成后建议先做一次完整的启动、连接、建表、备份、恢复验证,再交给业务使用。