惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

雷峰网
雷峰网
宝玉的分享
宝玉的分享
I
InfoQ
P
Privacy International News Feed
V
V2EX
IT之家
IT之家
S
SegmentFault 最新的问题
D
Darknet – Hacking Tools, Hacker News & Cyber Security
V2EX - 技术
V2EX - 技术
C
CERT Recently Published Vulnerability Notes
C
Check Point Blog
The Register - Security
The Register - Security
爱范儿
爱范儿
博客园 - 三生石上(FineUI控件)
AWS News Blog
AWS News Blog
M
MIT News - Artificial intelligence
C
Cyber Attacks, Cyber Crime and Cyber Security
F
Fortinet All Blogs
B
Blog
N
Netflix TechBlog - Medium
B
Blog RSS Feed
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Last Week in AI
Last Week in AI
T
Threatpost
Forbes - Security
Forbes - Security
U
Unit 42
A
Arctic Wolf
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
P
Palo Alto Networks Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Recorded Future
Recorded Future
L
Lohrmann on Cybersecurity
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
月光博客
月光博客
Spread Privacy
Spread Privacy
MongoDB | Blog
MongoDB | Blog
Jina AI
Jina AI
I
Intezer
V
Visual Studio Blog
阮一峰的网络日志
阮一峰的网络日志
The Hacker News
The Hacker News
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
L
LangChain Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园_首页
MyScale Blog
MyScale Blog
腾讯CDC
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
量子位

博客园 - 小得盈满

Hudi 时间旅行与增量查询的区别分析 NATS 的基本安装及使用 Doris 和 StarRocks 性能测试对比 使用 Docker 部署 Elasticsearch 集群 Qdrant 单机和集群的安装方法 ClickHouse UDF 的基本用法 StarRocks 容器镜像构建 Kafka 线上性能调优 StarRocks 集群安装 Kafka 的分片和副本机制 Flink 自定义 ClickHouse Table Connector 的简单实现 Redis 性能优化实战 记一次 Go 调用系统命令出现的问题分析 APISIX proxy-cache 插件用法 etcd 历史版本回溯的方法 APISIX 简单的自定义插件开发步骤 Kafka 集群副本数量调整 使用 Docker Compose 安装 APISIX etcd 集群安装 Consul 集群安装
ClickHouse 添加磁盘扩容存储
小得盈满 · 2025-08-06 · via 博客园 - 小得盈满

我们可能经常会遇到 ClickHouse 磁盘写满的情况,这个时候除了删数据之外还可以考虑添加一块新的磁盘,让 ClickHouse 可以往新的磁盘那写入数据。ClickHouse 本身就支持配置各类存储策略,可以实现条带化、冷热分离、多存储卷顺序写入等不同的存储策略。

当前我们只针对于多个对等磁盘的空间扩容问题进行磁盘的添加。

那么添加新的磁盘其实就相当于利用多个卷的的顺序写入这种策略来实现,从而达到添加数据卷的效果,只是我们不创建新的表,而是直接修改原有数据表的存储策略,不过有一些限制,这些是 ClickHouse 为了保证数据的安全,这些限制后面会提到。

多存储卷配置建议 ClickHouse 版本在 22 以上。

首先我们在 ClickHouse 启动时至少会有一块默认的盘和卷,比如我们默认的数据目录为 /data/clickhouse/,此时 ClickHouse 也会生成默认的存储策略,名称就叫 default,我们可以执行下面的 SQL 查看:

SELECT * FROM system.disks
SELECT * FROM system.storage_policies

可以看到默认的磁盘和默认的策略都是 default

然后我们需要挂载好新的盘,假设新的数据目录为 /data2/clickhouse/,那么我们需要在配置文件中添加存储策略的配置:

<storage_configuration>
    <disks>
        <data2>
            <path>/data2/clickhouse/</path>
            <keep_free_space_bytes>10485760</keep_free_space_bytes>
        </data2>
    </disks>
    <policies>
        <multidisk_storage>
            <volumes>
                <!-- 对于扩容的话,这里名称必须用 default -->
                <default>
                    <disk>default</disk>
                </default>
                <volume2>
                    <disk>data2</disk>
                </volume2>
            </volumes>
            <move_factor>0.1</move_factor>
        </multidisk_storage>
    </policies>
</storage_configuration>

在上面的配置中,我们在 disks 中添加了 data2 表示新的磁盘,注意其中的 path 一定要以 / 结尾,表示这是一个目录。

然后在 policies 中我们添加了 multidisk_storage 存储策略,在 volumes 中指定多个卷,第一个是 default 也就是原有的卷,后面的 volume2 是后来添加的卷。注意第一个名称必须为 default,不能为其他的名字,否则后面无法对现有表修改存储策略。

然后 move_factor 表示移动 part 的因子,也就是说当一个卷的可用空间不足 10% 时,ClickHouse 会将其中的 part 移动到下一个卷中。

然后配置后直接保存正常就可以生效了,如果有多个节点要同步配置文件,保证每个节点的表都可以扩容。

然后再使用上面的 SQL 查看磁盘和策略就可以看到我们刚添加的配置了,然后我们对 MergeTree 表修改存储策略:

ALTER TABLE <db>.<table> MODIFY SETTING storage_policy='multidisk_storage'
# 可以使用 ON CLUSTER 对每个节点的表都进行修改
ALTER TABLE <db>.<table> ON CLUSTER <cluster_name> MODIFY SETTING storage_policy='multidisk_storage'

修改的时候如果我们上面的存储策略中第一个卷的名称不是 default,那么这个时候就会报错:

New storage policy `default` shall contain volumes of old one. (BAD_ARGUMENTS)

也就是说我们最新的存储策略必须包含原来的 default 卷,要不然之前的数据就没了,所以 ClickHouse 在这里进行了限制。

修改之后如果第一个卷的空间剩余不足 10%,那么 ClickHouse 就会将其中的 part 自动的转移到第二个卷中,实时写入的数据也会流向第二个卷,查询的时候会同时查询多个卷的数据,所以数据的完整性不会受到影响。

Reference:

  1. https://github.com/ClickHouse/ClickHouse/issues/12632