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

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

相关推荐
SL-staff5 小时前
规则引擎如何实现风控报告的自动化?JVS-Rules提供解决方案
大数据·自动化·excel·规则引擎·jvs-rules·风控报告·数据溯源
用户3610588626125 小时前
Flink基础之Flink批流数据读取处理案例剖析:从文件到 Kafka 的完整代码
大数据·flink
Aloudata5 小时前
Ossie 会不会成为“开源 Palantir”的起点?
大数据·人工智能·数据分析·本体论·data agent·语义层
hanbo17C26 小时前
不同规模的企业,选建站公司都要注意什么?
大数据·运维开发
智搜广告6 小时前
GEO优化公司怎么选?智搜广告从三个维度帮你判断
大数据·人工智能·python·elasticsearch·microsoft·geo
玩美数据-6 小时前
企业级在线调研与数据分析解决方案
大数据·人工智能·数据分析
IT研究室6 小时前
最新大数据毕业设计选题推荐-基于大数据的北京市药品批准信息数据可视化分析-大数据-Spark-Hadoop-Bigdata
大数据·信息可视化·课程设计
Elastic 中国社区官方博客6 小时前
Elasticsearch:ES|QL 搜索教程
大数据·数据库·人工智能·sql·elasticsearch·搜索引擎·全文检索
大力财经7 小时前
百度正式纳入港股通,9月7日起内地投资者可直投
大数据·百度
生活皆是风景7 小时前
GEO玩明白,流量自动上门
大数据·人工智能·产品运营