跳到正文
cyxc.club

rook-ceph 给 16T 加 EC filesystem 池

/ 约 7 分钟

2026-09-16 03:37(CST)把 rook-ceph-cluster 从 helm rev 31 升到 32。现网 ceph-block / ceph-filesystem 一个键都没改。多了两张要显式点名的 StorageClass:ceph-block-hddceph-filesystem-hdd。正文落前舱 12 块 16T,EC 2+1、故障域 host,和录播对象池同一批轴。

盘位规划里写过「16T 不进块池」:三台 R730xd 的槽位和容量。那句话仍然对 默认类 成立。库、KubeVirt 系统盘、现网 113 个 RBD 还在后舱 960G。缺的是 POSIX 大容量(Debian / Ubuntu APT 源),不是把默认类改去打机械盘。

槽 10 怎么挂、换盘怎么走,见 记录一次给 6 个旧 HDD OSD 挂槽 10 缓存盘机械盘和缓存盘故障时怎么换,不要和这篇混。

目录


要解决什么

现网唯一的 EC 2+1 是 ceph-objectstore.rgw.buckets.datadefault~hdd),09-16 当天 stored 25 TiB,MAX AVAIL 84 TiB,几乎全是录播。块和 CephFS 钉在 default~ssd replica 3:ceph-block 还能写大约 1.1 TiBceph-filesystem-data0 同样大约 1.1 TiB。

APT 源要的是目录树:apt-mirror / rsync / nginx,不是 S3 客户端。对象 URL 对 apt 不合适(现网 oss.cyxc.club 上多数桶要密钥,apt 不会签)。现有 CephFS 太小,是因为 data0 钉死 960G,不是 CephFS 不能用 16T。

所以:另开一套 POSIX,正文进机械盘;默认类、现有 PVC 不动。


不要做的三件事

不要把 RBD 建进 rgw.buckets.data 那是录播池,application=rgw。源站用新池,数据仍然落同一套 EC,但不要混在一个池里。

不要把 16T 并进现在的 ceph-block 改 crush 会把库和虚机盘拽到机械盘上。09-04 那次 fio:6 块 S4510、三副本、12 路客户端,顺序写合计 388 MiB/s,4K 随机写 22.8k IOPS。那是 960G 的数字。机械盘 EC 的 4K 随机写差一个数量级以上,系统盘不能下去。

不要 apt-mirror 写一小块 ceph-blockrclone sync 全量 amd64 就要 2–6 TiB,SSD 块池只剩 1.1 TiB。apt-mirror 增量靠本地文件还在,清掉暂存等于下次从头下,变成永久双份。rclone mount 也不是盘:wget 先写临时文件再 rename,S3 没有改名,每个包复制两次。

对象方案以后仍在。这次要的是 POSIX,就走新 StorageClass。


两张新类,旧类原样

默认 StorageClass 仍是 ceph-block。不写 storageClassName、或写旧名字,还在 960G。

StorageClass 谁用 正文 元数据 删 PVC
ceph-block(默认) 现网 113 卷、库、虚机盘 960G replica 3 同池 Delete
ceph-filesystem 现网 9 卷 960G replica 3 960G metadata Delete
ceph-bucket ObjectBucketClaim 16T EC(RGW) 索引在 960G Delete
ceph-block-hdd 显式点名 16T EC 2+1 960G 镜像头 Delete
ceph-filesystem-hdd 显式点名,APT 源走这个 16T EC 2+1 960G 目录/inode Delete

RADOS 名字:

crush 角色
ceph-block-hdd default~hdd EC 2+1 块正文
ceph-block-hdd-metadata default~ssd replica 3 RBD 头
ceph-filesystem-hdd-metadata default~ssd replica 3 目录 / inode
ceph-filesystem-hdd-data0 default~ssd replica 3 Rook 要求的默认数据池,没有 SC
ceph-filesystem-hdd-ec default~hdd EC 2+1 文件正文

新文件系统是独立的 CephFilesystem,另起一对 MDS(rook-ceph-mds-ceph-filesystem-hdd-a / b)。不是给旧 FS 加第二数据池。旧 ceph-filesystem 的 MDS、池、SC 都没动。

CSI:块类 pool=ceph-block-hdd-metadatadataPool=ceph-block-hdd。文件类 fsName=ceph-filesystem-hddpool=ceph-filesystem-hdd-ec


CephFS 为什么多一块 SSD data0

Rook 官方 EC 文件系统示例写得很死:必须先有一个 副本数据池当默认,EC 只能当第二池。CSI 的 pool 再指到 EC 那一块。

所以 ceph-filesystem-hdd-data0 在 960G 上,几乎不放业务,也没有 StorageClass。不是漏了。有人自己改 layout 或另做 SC,写进去的才是 SSD 余量,不是 16T。

ObjectStore 那条「dataPool 别写 deviceClass: hdd」套不到这里。那是已经建好、EC profile 的 crush class 为空、改 CR 会让 ObjectStore 一直 Failure。新池必须写 hdd,不写的话 crush 走 default,条带会打到 960G。

块盘这边 Rook 会给 EC 池打开 allow_ec_overwrites。helm 里也写明了。没有 overwrite,RBD / CephFS 不能在 EC 上做部分写。


块和文件差在哪

两边正文都在同一批 12 块 16T、同一套 EC 2+1 上。Squid 19.2.3 没有 FastEC(部分读/写是 Tentacle 的池开关)。顺序大文件的带宽上限差不多,都受轴限制。差在目录走哪。

ceph-block-hdd ceph-filesystem-hdd
元数据 RBD 头在 SSD;ext4 的 inode / 日志在 16T MDS + metadata 池在 SSD
几十万个 .deb 每次 create 改 ext4 日志,机械盘读改写 整文件写是 EC 舒适区;stat 不打 16T
虚机盘 / 库 不要用。继续 ceph-block 更不要
多 Pod 一般 RWO 原生 RWX

APT 源用 ceph-filesystem-hdd。只要「一块大盘、文件很少」才用 ceph-block-hdd。槽 10 的 PM883 只是 HDD OSD 的 WAL/onode,不是把卷缓在 SSD 上。


chart 注释不能原样解开

上游 cephECBlockPools 示例是 failureDomain: osd、元数据 size: 2、SC 名叫 rook-ceph-block。三台机器抄这个:3 个 EC 分片可以落在同一台的 4 块盘上,整机掉线卷就没了。

这套取值:

  • 故障域 host,k=2 m=1,和对象池一样
  • 元数据 ssd replica 3
  • 正文 deviceClass: hdd
  • bulk: "true"
  • 新文件系统 preserveFilesystemOnDelete: true(误删 CR 时文件系统还在)
  • 两张新类 reclaimPolicy: Delete(PVC 删了卷一起清)
  • isDefault: false

helm 模板每个 cephFileSystems 项渲一张 SC,所以 HDD 文件系统自己带 ceph-filesystem-hdd,不必另写清单。cephECBlockPools 渲两个 CephBlockPool(正文名、名字-metadata)加一张块类。


2026-09-16 凌晨(CST)

时间 做什么
改 values 之前 备份 helm get valueshelm-values-rev31-before-hdd-pools.yaml
03:37 helm upgrade rook-ceph-cluster,rev 32
+30s 两张 SC 已在;ceph-block-hdd / -metadata Ready
+1 min ceph-filesystem-hdd Ready,SVG Ready,两台新 MDS Running(22 一台、21 一台)

升完对照:

  • 旧 PVC:113 个 ceph-block Bound,9 个 ceph-filesystem Bound
  • ceph-filesystem-hdd-ec crush take default~hddallow_ec_overwrites: true,MAX AVAIL 84.4 TiB
  • ceph-filesystem-hdd-data0 crush default~ssd,AVAIL 1135G
  • ceph-block-hdd 同样 ec_overwritesapplication rbd
  • HEALTH_WARN 仍是过期 scrub(挂槽 10 那阵 noscrub 积压),不是这次

PG autoscaler 会给两个 bulk 池加 PG,HDD OSD 上的 PG 数会涨。回填量很小(空池),不是 remap 数据。


和对象池抢轴

两套 HDD 正文和 rgw.buckets.data 抢同一笔空闲。helm 里没写配额。一块几十 TiB 的 PVC 或一次全量 Ubuntu 镜像,会把录播还能写的 84 TiB 吃掉。用之前先定 maxSize,或至少锁 suite / 架构,不要默认全镜像。

回滚不要把 cephECBlockPools 整段再注释掉:块池 CR 没有 preserve 标志,operator 可能删池。文件系统开了 preserveFilesystemOnDelete

定位硬盘仍用 WWN / 序列号 / 槽,不要用 /dev/sdX。OSD 号会换盘。