卷类型说明
卷类型是存储策略中 volume 配置的一个属性,用于定义卷的存储行为。包括 JBOD、SINGLE_DISK、UNKNOWN三种。默认类型为JBOD。
JBOD (Just a Bunch Of Disks)
设计目标:将多个磁盘组合为一个逻辑卷,不提供冗余,但支持数据分布和并行读写。
核心特性:
数据分布:数据按轮询(Round-Robin)或权重(Weight)分布在卷内的磁盘上。
无冗余:单个磁盘故障可能导致数据丢失。
高性能:通过多磁盘并行 I/O 提升吞吐量。
适用场景:
需要大容量存储且容忍单点故障的场景。
非关键数据(如日志、临时表)的存储。
<!-- ClickHouse 配置文件(config.xml 或 storage.xml) -->
<storage_configuration>
<disks>
<disk1> <!-- 磁盘定义 -->
<path>/data/disk1/</path>
</disk1>
<disk2>
<path>/data/disk2/</path>
</disk2>
</disks>
<policies>
<jbod_policy> <!-- 存储策略 -->
<volumes>
<jbod_volume> <!-- 卷类型为 JBOD -->
<disk>disk1</disk>
<disk>disk2</disk>
<volume_type>JBOD</volume_type>
</jbod_volume>
</volumes>
</jbod_policy>
</policies>
</storage_configuration>
SINGLE_DISK
设计目标:仅使用单个磁盘,数据不跨磁盘分布。
核心特性:
简单性:数据全部写入指定磁盘。
无冗余:磁盘故障会导致数据丢失。
适用场景:
单磁盘环境或测试环境。
数据量小且无需分布的场景。
<storage_configuration>
<disks>
<single_disk>
<path>/data/single/</path>
</single_disk>
</disks>
<policies>
<single_policy>
<volumes>
<single_volume>
<disk>single_disk</disk>
<volume_type>SINGLE_DISK</volume_type>
</single_volume>
</volumes>
</single_policy>
</policies>
</storage_configuration>
UNKNOWN
设计目标:未明确指定卷类型时的默认值,通常表示配置不完整或需要外部处理。
核心特性:
灵活性:允许动态分配存储策略。
警告:需谨慎使用,可能导致未定义行为。
适用场景:
临时配置或动态存储策略的场景。
需要后续程序逻辑干预的复杂存储管理。
<volumes>
<custom_volume>
<disk>custom_disk</disk>
<volume_type>UNKNOWN</volume_type> <!-- 需外部逻辑处理 -->
</custom_volume>
</volumes>
总结
特性 |
JBOD |
SINGLE_DISK |
UNKNOWN |
数据分布 |
多磁盘轮询/权重分布 |
单磁盘存储 |
未定义,依赖外部逻辑 |
冗余能力 |
无 |
无 |
依赖配置 |
性能 |
高(并行 I/O) |
低(单磁盘) |
不确定 |
适用场景 |
大容量非关键数据 |
简单存储或测试环境 |
动态或复杂存储策略 |
可靠性 |
低(单磁盘故障导致数据丢失) |
低 |
依赖实现 |
最佳实践
冗余与备份:
JBOD 和 SINGLE_DISK 均无冗余,需结合副本(如 ReplicatedMergeTree)或定期备份提高可靠性。
冷热分层:
在存储策略中定义多个卷(如 hot_volume 和 cold_volume),通过 TTL 规则将旧数据迁移到低成本存储(如 S3)。