You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将ClickHouse异步插入待处理.bin文件存储至外部SSD

解决方案:转移ClickHouse Distributed异步插入待处理数据至外部存储

核心原理

Distributed表的异步插入待处理.bin文件,默认存储在ClickHouse数据目录的对应分片队列目录中。通过自定义存储策略(storage_policy),可以指定这类数据存储到外部SSD或对象存储,替代启动盘。


步骤1:定义存储策略

编辑ClickHouse主配置文件(如/etc/clickhouse-server/config.xml)或conf.d下的自定义配置文件,添加存储策略配置:

场景1:外部SSD存储

<storage_configuration>
    <disks>
        <!-- 定义外部SSD磁盘 -->
        <external_ssd_disk>
            <path>/mnt/external_ssd/clickhouse_data/</path>
        </external_ssd_disk>
    </disks>
    <policies>
        <!-- 定义用于Distributed队列的存储策略 -->
        <distributed_queue_policy>
            <volumes>
                <external_volume>
                    <disk>external_ssd_disk</disk>
                </external_volume>
            </volumes>
        </distributed_queue_policy>
    </policies>
</storage_configuration>

场景2:对象存储(以S3为例)

如果用S3作为存储后端,磁盘配置替换为:

<disks>
    <s3_queue_disk>
        <type>s3</type>
        <endpoint>https://your-s3-endpoint/</endpoint>
        <access_key_id>your-access-key</access_key_id>
        <secret_access_key>your-secret-key</secret_access_key>
        <bucket>clickhouse-distributed-queue</bucket>
        <path>async_queue/</path>
    </s3_queue_disk>
</disks>

策略部分依然使用distributed_queue_policy,将磁盘指定为s3_queue_disk即可。

配置完成后,重启ClickHouse服务使配置生效:sudo systemctl restart clickhouse-server


步骤2:为Distributed表绑定存储策略

针对已存在的Distributed表

执行ALTER语句修改表设置:

ALTER TABLE your_distributed_table MODIFY SETTING storage_policy = 'distributed_queue_policy';

针对新建的Distributed表

在创建语句中直接指定存储策略:

CREATE TABLE your_distributed_table
(
    -- 表结构定义
    id UInt64,
    event_time DateTime
)
ENGINE = Distributed(your_cluster_name, your_database, local_target_table, id)
SETTINGS storage_policy = 'distributed_queue_policy';

步骤3:迁移现有累积数据(可选)

如果启动盘上已有大量待处理的.bin文件,可手动迁移至新存储路径:

  1. 停止ClickHouse服务:sudo systemctl stop clickhouse-server
  2. 找到Distributed表的原有队列目录(通常在/var/lib/clickhouse/data/your_database/your_distributed_table/下,包含shardX_replicaY子目录)
  3. 将这些子目录复制到新存储路径的对应表数据目录下
  4. 调整新路径的权限:chown -R clickhouse:clickhouse /mnt/external_ssd/clickhouse_data/
  5. 删除原启动盘上的旧队列目录(避免占用空间)
  6. 重启ClickHouse服务:sudo systemctl start clickhouse-server

步骤4:验证配置

执行以下SQL确认表的存储策略已生效:

SELECT name, storage_policy FROM system.tables WHERE name = 'your_distributed_table';

同时检查新的异步插入产生的.bin文件是否出现在外部SSD或S3的指定路径中。


注意事项

  • 确保外部存储路径拥有ClickHouse进程的读写权限
  • 使用S3时,需保证ClickHouse节点能正常访问S3端点,且密钥具备bucket的读写权限
  • 存储策略修改后,新的异步插入任务会自动使用新路径,旧数据需手动迁移或等待ClickHouse处理完成后自动清理

内容的提问来源于stack exchange,提问作者Anuraj Jain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 18:32:36