ceph EC和副本chunk配置对比

概念理解:

object_size:一个对象的大小,必须是 2 的幂次方,范围 4K~32M

stripe_unit:一个条带化单元的大小,每次写入在单个 object 内的连续字节数,默认等于 object_size

stripe_count:每轮条带化会轮询分片多少个对象,默认 1

chunk_size:每个 chunk 的大小

chunk_count:chunk 的总数量(即 K+M)

 

PS:其中 object_sizestripe_unitstripe_count 是 Ceph 块存储(RBD)和文件存储(CephFS)共有的条带化布局参数;而 chunk_size 和 chunk_count 并非 Ceph 原生参数,通常属于纠删码(Erasure Coding)或外部存储系统的概念。

 

RBD约束条件:stripe_unit × stripe_count ≤ object_size,CephFS 要求 object_size 必须是 stripe_unit 的整数倍,这与 RBD 的  约束略有不同。两者的约束条件并不等价,核心区别在于 RBD 允许对象内存在“剩余空间”,而 CephFS 严格要求整除对齐。

 

默认策略是 object_size == stripe_unit 且 stripe_count == 1,即每个对象只放一个 stripe unit。

 

副本机制:

  RBD 的默认配置是 stripe_unit = object_size(如均为 4MB),且 stripe_count = 1。 这意味着每个对象只装一个 stripe_unit,stripe_unit 和 object 一一对应,所以在默认流程中你感知不到它的存在。

EC机制:

  EC 机制下 RBD 层的这三个参数默认值与副本池完全相同(stripe_unit = object_size = 4MBstripe_count = 1),但 EC 池真正起作用的条带化参数是 EC profile 中定义的 chunk_size(默认 4KB),chunk_size 指每个 chunk 的大小,chunk_count 指 chunk 的总数量(即 K+M)

 

总结调优策略:

先明确两类IO场景的统一判定标准,作为后续调优的基础边界:

  • ‌大IO场景‌:单IO请求大小 ≥ 64KB,典型场景为AI训练数据读取、视频流读写、大数据离线批处理、虚拟机全磁盘备份
  • ‌小IO场景‌:单IO请求大小 < 64KB,典型场景为数据库随机读写、容器日志写入、虚拟机系统盘IO、对象存储小文件上传下载

image

 

调优优先级建议:网络分离 > OSD 内存/线程 > PG 数量 > BlueStore 缓存 > 条带化参数 > RBD 缓存 > 内核参数。大部分场景下,做好前几项就能获得显著提升,条带化参数只有在明确 IO 模式时才需要调整。

posted on 2026-08-13 18:44  梅梅酱~  阅读(2)  评论(0)    收藏  举报