云栖里小区交付那天,物业和业主们同时发现一个棘手问题:小区几十栋楼(Kubernetes 节点)里,住着成千上万随时搬家换楼的租客(容器应用)。租客们今天在 3 号楼跑推荐算法,明天就被调度到 9 号楼跑模型推理;只要一换房间,原先塞在床底的数据就跟着灰飞烟灭。车库堆满了没人认领的“孤儿数据”,而真正重要的模型权重、业务日志却无处安放。 业主委员会决定建设公共储物系统。咨询了行业专家后,摆上桌的是两个方向完全不同的方案:一个像聘请大型物业公司——由专业团队建仓、分仓、巡逻,这就是 Rook(底层用 Ceph);另一个像业主自发组织的互助会——不用另请外援,每家每户匀出一点储物空间,邻居之间互相备份,这就是 Longhorn。 接下来的故事,就是这两个方案从架构、冗余、快照到性能与运维的全面较量。看完这个故事,你将明白:没有最好的存储,只有最匹配的存储。

岗位关联

对 AI 从业者而言,理解两种存储方案的架构与选型逻辑,是搭建高可用 AI 训练与推理平台、保障模型数据不丢失的必备技能。

目录
  1. 可视化演示
  2. 云原生存储的困局
  3. Rook 架构原理
  4. Longhorn 架构原理
  5. 数据冗余策略
  6. 快照与恢复
  7. 性能与规模
  8. 选型与落地
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示Rook Operator管理Ceph的声明式模型、三副本数据冗余与自愈机制,以及快照时间线恢复,支持滑杆模拟副本故障。

本节配有交互动效(进入视口后自动加载,约 3KB)。

Rook Operator模式 CRD声明→Rook Operator监控→Ceph存储集群 持续调谐OSD/MON组件 存储管理自动化、声明式

云原生存储的困局

云栖里小区的住户有一个共同烦恼:容器就像拎包入住的租客,随时可能搬家、换楼。今天在 3 号楼跑推荐算法,明天就被调度到 9 号楼跑模型推理。如果家具都直接堆在房间里(容器内部存储),一旦搬家,东西就全丢了。于是,把数据放到“不管谁住都一直存在的公共仓库”里,成了刚需。这个公共仓库,在 Kubernetes 的世界里叫持久卷(PersistentVolume)。

但光有仓库还不够:仓库必须跨楼分布,必须防小偷,必须在一个楼着火时还能找回全部物品。于是两类方案登场:Rook 是“专业物业公司”,把 Ceph 这套成熟的分布式存储搬进 Kubernetes,由专门的管理处统一调度;Longhorn 则是“业主互助会”,不依赖外部系统,直接利用每栋楼自己的磁盘,靠邻居之间相互复制数据达成高可用。

一个绕不开的代价是容量利用率。为了保证数据不丢,同一份数据需要在多个节点上各存一份,这就是副本机制。副本数越多,数据越安全,但真正能用来装新数据的空间就越少。

所以,租客们要接受的第一个现实是:想安全,就得付出空间。物业公司的三副本和互助会的双副本,都不是免费的礼物,而是用“少装东西”换来的“不怕丢东西”。理解了这笔账,后面再看两个方案谁优谁劣就有了共同的地基。

可用容量=裸容量副本数\displaystyle \text{可用容量} = \frac{\text{裸容量}}{\text{副本数}}
这个公式是说:你买了 3 块同样大小的硬盘,如果每份数据都存 3 份,那真正能存新数据的地方只有总容量的三分之一。安全是用空间换来的。
  1. 裸容量把所有硬盘的原始空间相加,得到仓库总面积,单位通常用 TB。
    裸容量=∑i=1NSi\text{裸容量} = \sum_{i=1}^{N} S_i
  2. 副本数每份数据同时存放的份数,类似一件家具配了几把备用钥匙。
    副本数=r\text{副本数} = r
  3. 两者相除可用容量是裸容量除以副本数,即真正能填新货的空间。
    可用容量=裸容量r\text{可用容量} = \frac{\text{裸容量}}{r}

Rook 架构原理

云栖里请来的物业公司(Rook)干活很有章法。它先在小区中央设了一个“总控办公室”——MON 监视器。这个办公室只接电话、记台账、指挥调度,绝对不亲手搬货物。真正干活的是遍布各楼地下室的“仓管员”——OSD 进程,每一份数据的读写都要经它们的手落到磁盘上。管理(控制面)与搬运(数据面)分离,是物业公司方案最核心的设计。

物业公司的第二个法宝是 CRD 部署机制。所有仓库的设计图纸都以“自定义资源”的形式交给 Kubernetes 这个“城建局”审批。Rook Operator 像施工队长,盯着图纸,发现哪栋楼的仓库没盖好就自动安排施工,把部署从“手工搬砖”变成了“声明式管理”:你只告诉它“我要一个三副本存储池”,剩下的它自己搞定。

随着小区规模扩大,物业公司要考虑数据怎么均匀摊到每栋楼。Ceph 引入了 PG(放置组)作为数据分布的基本单位,类似把仓库划分成许多“储物网格”。网格太少则数据倾斜,太多则消耗资源,业界有一个经验公式估算 PG 数量:

物业公司方案的特点很清楚:能力强、集约化,适合大规模社区。但管理层级多,对“城建局”(Kubernetes)的资源占用不低,也需要熟悉物业流程的专职员工(存储运维)来打理。这就像大公司有完善的制度,但每个人都要遵守厚厚的流程手册。

PG 数量≈OSD 数×100副本数\displaystyle \text{PG 数量} \approx \frac{\text{OSD 数} \times 100}{\text{副本数}}
这个公式是说:每增加一个仓管员(OSD),大约要配套 100 个储物网格(PG),再按副本数折算,才能让货物既分散又不过度碎片化。
  1. OSD 数量参与存储的仓管员总数,是数据分布的地基。
    OSD 数=N\text{OSD 数} = N
  2. 乘以 100经验法则中每个 OSD 大约承载 100 个 PG,保证数据分散均匀。
    目标 PG≈N×100\text{目标 PG} \approx N \times 100
  3. 除以副本数PG 要按副本数折算,否则规划过量会消耗大量资源。
    PG 数量≈N×100r\text{PG 数量} \approx \frac{N \times 100}{r}

Longhorn 架构原理

隔壁的“业主互助会”(Longhorn)完全是另一种活法。没有总部办公室,没有独立后端,它直接向 Kubernetes 要了一块“自留地”:每个节点上挂载的空闲磁盘,被改造成一个个“储物格”(Replica)。所有管理逻辑以 Kubernetes 控制器(Controller)的形式运行,相当于城建局直接帮忙管账,互助会一分额外的管理费都不用花。

每户居民要存东西时,互助会派一辆“小推车”(Engine)上门。这辆车很勤快:数据先进本楼储物格,随后立刻同步复制到另外两栋楼的储物格里,确保任何一栋楼出问题,其他楼还能拿出完整物品。引擎负责接收客户端的读写请求,副本负责安静地存放数据;一旦某副本所在节点故障,控制器会自动在新的节点上重建副本,实现自愈。

安全性上,我们可以用概率来理解:假设一个副本所在位置在某个时间窗口内损坏的概率是 p,副本总数是 r,只要还有一个副本活着,数据就能抢救回来。

互助会的哲学是把复杂度摊到每个节点身上,用简单组件拼出高可用。优点是轻量、好上手,缺点也明显:节点之间同步通信频繁,规模一大,“小推车”们会开始互相踩脚,网络开销直线上升。这就像小社区靠邻里互助能运转得很好,但真到了上万人的大社区,还是需要专业物业。

P可用=1−pr\displaystyle P_{\text{可用}} = 1 - p^{r}
这个公式是说:每个副本都存活,数据才绝对安全;反过来,只要不是“全都坏了”就算安全。副本越多,“全都坏了”这个倒霉事件的概率就越小。
  1. p单个副本节点在同一时间窗口内损坏的概率,类似某栋楼突发水灾的概率。
    pp
  2. p 的 r 次方r 个副本同时损坏的概率,因为各副本相互独立时概率相乘。
    prp^{r}
  3. 1 减去只要不是“全部损坏”就安全,所以用 1 减去全部损坏的概率。
    P可用=1−prP_{\text{可用}} = 1 - p^{r}

数据冗余策略

冗余策略是储物系统的“保安设计”。物业公司(Rook)提供了两套保安方案:多副本(Replication)和纠删码(Erasure Coding)。多副本最直白——每件货物复印三份,放三栋楼,任何一栋出事,另外两栋还有完整物品。互助会(Longhorn)则主打同步多副本,默认保存 2 份或 3 份,逻辑简单,容易理解。

纠删码更像“拼图保险”:把一份货物拆成 k 块,再额外生成 m 块校验拼图,总共 k+m 块分散存放。只要剩下任意 k 块,就能把原货物完整拼回来。比如 EC(4+2),把数据拆成 4 块、生成 2 块校验块,6 块分散放在 6 个节点,丢 2 块还能恢复。它不需要“整份复制”,因此省空间:

但省空间的代价是计算:每次写入都要做编码,每次恢复都要做解码,CPU 和网络开销明显高于多副本。对延迟敏感的 AI 推理服务而言,这可能是致命伤;对冷数据备份而言,这又是一笔划算买卖。物业公司两种方案都能配,选择多但决策难;互助会只做多副本,简单直接,也少了很多调优空间。

E=kk+m\displaystyle E = \frac{k}{k+m}
这个公式说的是编码效率:三副本的效率是 1/3 ≈ 33%,而 EC(4+2) 的效率是 4/6 ≈ 67%。同样的裸容量,纠删码能存将近两倍的数据。
  1. k原始数据被拆成的数据块数量,类似拼图的原图碎片数。
    kk
  2. m额外生成的校验块数量,用来在丢块时反推原图。
    mm
  3. 编码效率有效数据占存储总量的比例,越高越省空间。
    E=kk+mE = \frac{k}{k+m}

快照与恢复

除了防盗,还要防“手滑”。住户不小心删了重要文件,或者在升级配置时把系统搞乱了,这时候就需要“时光机”——快照(Snapshot)。快照能把存储卷在某一瞬间的状态完整“拍照”下来,之后随时可以一键回滚到拍照时的样子。它是存储系统里最实用的后悔药。

Rook 使用 Ceph RBD 快照,针对块设备做细粒度的瞬间备份,支持增量快照与克隆;Longhorn 则提供卷级快照,同样支持回滚,还能把快照定期备份到 S3 等远程仓库,实现跨机房容灾。两者的共同点是:快照操作本身很快,因为底层采用写时复制机制——拍照瞬间并不复制所有数据,只记录“哪些块被改过”。

快照恢复能力有一个关键指标叫 RPO(恢复点目标),它衡量的是“故障时最多可能丢多久的数据”。快照拍得越勤,RPO 越短,数据丢得越少。

快照不是免费午餐。COW 机制下,快照后第一次修改某个数据块,系统要先把旧块复制到快照区再执行写入,这就产生了额外的写放大。快照保留越多,后台的“影子数据”越多,对性能的拖累越明显。所以,快照策略要跟业务容忍度匹配:核心数据库 5 分钟一拍,临时开发卷一天一拍就够了。

RPO=ΔT快照间隔\displaystyle \text{RPO} = \Delta T_{\text{快照间隔}}
这个公式是说:如果你的快照每 30 分钟拍一次,那当灾难发生时,最多会丢失最近 30 分钟内写入的数据。快照间隔就是你的数据“后悔药”的有效期。
  1. 快照间隔两次“时光机拍照”之间的时间间隔,间隔越短越安全。
    ΔT=T相邻快照差值\Delta T = T_{\text{相邻快照差值}}
  2. RPO允许丢失的最大数据时间窗口,即最近一次快照到故障时刻的距离。
    RPO=ΔT\text{RPO} = \Delta T

性能与规模

小区规模不同,两家方案的体验完全相反。在只有三五栋楼、几十户人家的小社区里,互助会(Longhorn)明显更占优:没有额外的管理进程,部署一条命令搞定,读写路径短,性能足够。物业公司(Rook)这时反而显得笨重——MON、MGR 等控制面进程要占资源,PG 规划、故障域设计还没派上用场就先消耗了运维精力。

当社区扩展到上百栋楼、上千户人家时,物业公司的优势开始显现。Ceph 经过十几年大规模生产验证,数据再平衡(Rebalance)机制成熟,故障域可以按机架、按机房隔离;而互助会的“人肉网络”中,每个节点都要与其他节点频繁同步、调度副本,网络与元数据开销会随规模平方级增长,渐渐力不从心。

无论哪家方案,都要面对冗余带来的“隐形税”——写放大。你以为只写了 1 份数据,实际上系统可能写了 2 份、3 份,甚至更多(副本同步、快照复制、校验计算)。

所以选型时不要只看“谁的读写延迟低”,还要看“谁的写放大更匹配你的负载”。AI 训练任务大多是大块顺序写,写放大相对可控;而数据库这类大量小随机写的场景,写放大会被放大数倍,存储选型的容错空间就小得多。

写放大=物理写入逻辑写入\displaystyle \text{写放大} = \frac{\text{物理写入}}{\text{逻辑写入}}
这个公式是说:写放大因子越接近 1,存储系统越“省力气”;因子越大,同样的业务写入对磁盘寿命和带宽的消耗越狠。
  1. 物理写入实际落盘的数据总量,包含副本同步、快照复制等额外写入。
    W物理W_{\text{物理}}
  2. 逻辑写入应用真正提交的有效数据量。
    W逻辑W_{\text{逻辑}}
  3. 比值写放大因子,等于物理写入除以逻辑写入。
    写放大=W物理W逻辑\text{写放大} = \frac{W_{\text{物理}}}{W_{\text{逻辑}}}

选型与落地

社区委员会开会,最终的问题不是“谁更强”,而是“谁更适合我们”。选型可以从三个维度评估:规模、运维能力和功能需求。规模上,几百 GB 到几十 TB、节点数在 10 个以内的小集群,Longhorn 的轻量是巨大优势;几十 TB 以上、节点数上百、需要对象存储或多集群管理,Rook/Ceph 的经验沉淀更值得信赖。

运维能力是第二个关键变量。Longhorn 的运维门槛低,普通 Kubernetes 工程师看一遍文档就能上手;Rook 涉及 Ceph 调优,需要专人跟进。功能需求上,如果只是给数据库、消息队列提供块存储,两者都胜任;如果你还需要 S3 对象存储(Ceph RGW)、文件存储(CephFS),那 Rook 几乎是唯一选择。

最后还要算一笔总账。很多人只盯着硬件采购价,忽略了长期运维和故障停机的隐性成本:

无论选择哪家,落地时都要守住三条底线:备份要定期演练,不能只配不用;监控要覆盖磁盘、网络和副本状态,提前发现隐患;升级要小步快跑,先在测试环境验证再上生产。小区储物系统不是一锤子买卖,而是需要持续照看的长期工程。

TCO=C硬件+C运维×N年+C停机\displaystyle \text{TCO} = C_{\text{硬件}} + C_{\text{运维}} \times N_{\text{年}} + C_{\text{停机}}
这个公式是说:总体拥有成本等于硬件采购,加上逐年投入的运维人力,再加上故障停机造成的业务损失。运维友好省下的钱,往往比硬件差价更可观。
  1. 硬件成本服务器与磁盘的采购成本,相当于物业费里的基础建设支出。
    C硬件C_{\text{硬件}}
  2. 运维成本运维人力按年折算,覆盖监控、升级、排障的长期投入。
    C运维×N年C_{\text{运维}} \times N_{\text{年}}
  3. 停机成本故障停机造成的业务损失,规模越大损失越大。
    C停机C_{\text{停机}}
  4. 三者求和相加才是真实总成本,光看硬件价签容易误判。
    TCO=C硬件+C运维×N年+C停机\text{TCO} = C_{\text{硬件}} + C_{\text{运维}} \times N_{\text{年}} + C_{\text{停机}}

AI 应用场景

场景一:大模型训练 Checkpoint 快照续训

阶段:模型训练与容灾恢复

解决的问题:大模型训练常持续数天甚至数周,GPU 节点一旦故障,未落盘的权重全部作废。传统 NFS 保存慢且存在单点风险;Longhorn 卷挂载到训练 Pod 后,快照与恢复都在秒级完成,训练中断只需回退到最后一次快照。

具体案例:某 AIGC 创业公司在 8 卡 GPU 节点上训练 7B 参数模型,训练 Pod 挂载 Longhorn 卷,每 30 分钟自动创建快照。一次节点宕机后,平台在 2 分钟内拉起新 Pod 并挂载原卷,从最近快照恢复断点续训,进度仅损失 30 分钟。

场景二:向量数据库与 RAG 服务的高可用存储

阶段:推理服务数据层

解决的问题:RAG 应用依赖 Milvus、Elasticsearch 等有状态组件,索引数据必须多副本高可用。Rook/Ceph 的三副本加机架级故障域隔离,让向量索引在单机架断电时依然可读。

具体案例:某企业知识库 RAG 系统用 3 节点 Rook 集群提供 RBD 块存储给 Milvus 的 StatefulSet;数据三副本分布在不同机架,配合 Ceph 快照做每日自动备份,支撑日均百万次检索。

场景三:多团队 AI 开发环境的存储隔离

阶段:开发测试环境

解决的问题:多个算法团队共享集群时,需要隔离且可回收的临时存储。Longhorn 按 StorageClass 划分配额,团队释放环境后卷可一键回收,避免“僵尸数据”占满磁盘。

具体案例:某中型算法团队用 Longhorn 为每个 Git 分支创建独立卷,CI/CD 流水线结束自动清理旧卷,存储成本降低约 40%。

Python 演示

python33 行
"""蒙特卡洛模拟:对比三种冗余策略在 12 块盘随机故障下的数据丢失概率"""import random  def run_trials(strategy, fail_prob, trials=20000):    losses = 0    for _ in range(trials):        alive = [1 if random.random() > fail_prob else 0 for _ in range(12)]        if strategy == "replica3":  # Rook 默认三副本            groups = [alive[i:i + 3] for i in range(0, 12, 3)]            lost = any(sum(g) == 0 for g in groups)        elif strategy == "ec42":  # Rook 纠删码 4+2            groups = [alive[0:6], alive[6:12]]            lost = any(sum(g) < 4 for g in groups)        else:  # Longhorn 默认二副本            groups = [alive[i:i + 2] for i in range(0, 12, 2)]            lost = any(sum(g) == 0 for g in groups)        if lost:            losses += 1    return losses / trials  def main():    random.seed(42)    for p in (0.02, 0.05, 0.10):        r3 = run_trials("replica3", p)        ec = run_trials("ec42", p)        l2 = run_trials("replica2", p)        print(f"单盘故障率 {p:.0%}: 三副本={r3:.4%}  EC4+2={ec:.4%}  二副本={l2:.4%}")  if __name__ == "__main__":    main()
目的:用随机模拟直观对比“三副本、纠删码 4+2、二副本”三种冗余策略在不同磁盘故障率下的数据丢失概率,帮助理解冗余与安全的权衡。
  1. alive = [1 if random.random() > fail_prob else 0 for _ in range(12)]模拟 12 块磁盘,每块以 fail_prob 概率随机损坏
  2. groups = [alive[i:i + 3] for i in range(0, 12, 3)]三副本把 12 块盘分成 4 组,每组 3 块互为备份
  3. lost = any(sum(g) == 0 for g in groups)某一组三块盘全坏才算数据丢失
  4. groups = [alive[0:6], alive[6:12]]纠删码把 12 块盘分成两组,每组 6 块
  5. lost = any(sum(g) < 4 for g in groups)组内存活少于 4 块就无法重建数据
  6. random.seed(42)固定随机种子,保证每次运行结果可以复现
  7. print(f"单盘故障率 {p:.0%}: ...")格式化输出三种策略的丢失概率对比

常见误区

误区“Rook 不是存储吗?那我部署了 Rook,底层数据不就自动分布到各个节点了吗?它和 Ceph 到底有什么区别?”

正解Rook 本质是 Kubernetes 里的“物业公司”,它负责把 Ceph 这套仓库设施以云原生方式编排起来:部署、扩缩容、升级、监控都由 Rook Operator 完成,但真正的数据读写、副本管理、故障恢复都是 Ceph 在干活。类比来说,物业公司(Rook)管理着仓库设施(Ceph),两者不能画等号。

为何常见:因为用户接触到的几乎都是 Rook 的 CRD 和命令行,Ceph 被完全封装在底层,久而久之就把“运营商”当成了“仓库本身”。

误区“Longhorn 只是把每台机器的磁盘拼在一起,没有 Ceph 那样专业的存储引擎,肯定不稳定、性能差。”

正解Longhorn 的设计目标就是“轻量自愈”:用 Kubernetes 原生控制器驱动一切,引擎接收 IO、副本同步、节点故障自动重建。对中小规模集群,它的稳定性和性能完全够用,而且运维体验远优于 Rook。性能强弱要看场景,而不是看架构是否“看起来专业”。

为何常见:人们习惯用“底层技术复杂度”来判断方案优劣,忽略了“匹配度”才是选型的第一原则,就像小区不一定非要请五星级物业。

误区“数据安全最重要,副本越多越保险,我把每个卷都配成 5 副本总没错吧?”

正解副本每多一份,写入放大就多一份,磁盘和网络开销同步上升,可用容量却按比例下降(可用容量 = 裸容量 / 副本数)。2 副本已能抵御单节点故障,3 副本能覆盖常见故障域;5 副本带来的安全性提升微乎其微,成本却接近翻倍。安全要在预算和性能之间取平衡。

为何常见:人的直觉是“多备几份更安心”,但存储系统里每一份冗余都有真实的硬件和性能代价。

误区“我已经给卷打了 7 个快照,相当于有 7 份完整备份,原始数据可以删了吧?”

正解快照基于写时复制(COW),拍照瞬间并不复制全部数据,只是记录元数据;后续数据被修改时,旧块才被复制进快照区。快照之间共享大量数据块,保留 7 个快照绝不是 7 份完整副本。若误删原始数据,快照可能因为缺少底层块而无法完整恢复。

为何常见:“快照”这个词容易让人联想到“照片”就是完整复制品,忽略了它的增量本质。

误区“纠删码省一半空间,读写性能应该也不差,那我全部存储池都用 EC(4+2) 好了。”

正解EC 的编码和解码需要消耗 CPU,重建时要从多个节点读取数据块,网络开销大;对小规模集群或延迟敏感业务,EC 可能比三副本更慢。它最适合冷数据、备份和归档场景。热数据该用多副本,冷数据才适合纠删码,两者是互补不是替代。

为何常见:人们关注到 EC 的容量优势后容易忽略它的计算和重建代价,就像只看到拼图省地方,却忘了每次拼图都费时间。

面试题

Q1. Rook 的底层存储引擎是哪个?

单选题 · easy

  • A.Ceph 分布式存储← 正确答案
  • B.GlusterFS 文件系统
  • C.NFS 网络文件共享
  • D.LVM 逻辑卷管理

答案:A。Rook 是 Kubernetes 生态里的“运营商”,它把 Ceph 组件编排成云原生应用,底层数据引擎仍然是 Ceph。就像物业公司(Rook)管理者仓库设施(Ceph),两者不是一回事。GlusterFS、NFS、LVM 都不是 Rook 的底层引擎。

Q2. Rook 架构中真正负责把数据写入磁盘的组件是?

单选题 · mid

  • A.MON 监视器组件
  • B.MGR 管理器组件
  • C.OSD 存储服务组件← 正确答案
  • D.RGW 对象网关组件

答案:C。OSD 直接读写磁盘,是真正的“仓管员”;MON 和 MGR 属于控制面,只负责监控与调度,不碰数据;RGW 是对象存储网关。类比:仓库员工搬货,办公室只接电话。

Q3. 以下哪些是 Longhorn 的设计特点?

多选题 · mid

  • A.无需独立存储后端← 正确答案
  • B.深度集成 Ceph 后端
  • C.基于 Kubernetes 原生控制环← 正确答案
  • D.默认使用纠删码存储

答案:AC。Longhorn 不依赖外部存储系统,直接用节点磁盘,并通过 Kubernetes 控制器驱动副本调度与重建;它默认使用多副本而非纠删码。深度集成 Ceph 是 Rook 的特点。

Q4. 三副本模式下,裸容量 9TB 的集群可用于新数据的容量是?

单选题 · mid

  • A.9TB 全部可用
  • B.6TB 约三分之二
  • C.3TB 约三分之一← 正确答案
  • D.4.5TB 约二分之一

答案:C。可用容量 = 裸容量 / 副本数 = 9 / 3 = 3TB。三副本意味着每份数据占三份空间,真正能写新数据的只有三分之一。安全是用空间换来的。

Q5. Ceph 纠删码 EC(4+2) 能容忍同组最多几块数据盘损坏?

单选题 · hard

  • A.最多 2 块← 正确答案
  • B.最多 4 块
  • C.最多 6 块
  • D.最多 1 块

答案:A。EC(4+2) 将数据拆成 4 块并生成 2 块校验块,共 6 块。只要剩余任意 4 块就能重建原始数据,因此最多能容忍 2 块同时损坏。类比:拼图丢了 2 块还能凭原图和校验块拼回来。

Q6. 下列属于 Rook/Ceph 控制面组件的是?

多选题 · easy

  • A.MON 监视器← 正确答案
  • B.MGR 管理器← 正确答案
  • C.OSD 存储进程
  • D.CSI 存储驱动

答案:AB。MON 负责集群状态监视,MGR 负责指标与调度,它们都属控制面;OSD 负责实际数据读写,属数据面;CSI 是 Kubernetes 的存储接口插件,不属于 Ceph 控制面。

Q7. Longhorn 中负责接收客户端 IO 并同步到多个副本的组件是?

单选题 · mid

  • A.引擎 Engine 组件← 正确答案
  • B.副本 Replica 组件
  • C.调度 Controller 组件
  • D.备份镜像 Volume 组件

答案:A。Engine 像“小推车”,接收客户端 IO 并负责写入本节点以及同步到其他副本节点;Replica 只负责安静存放数据;Controller 负责管理卷生命周期。引擎是数据路径的入口。

Q8. COW 写时复制快照为什么会造成额外写入开销?

单选题 · hard

  • A.快照会另存完整副本
  • B.首次修改块前先复制旧块← 正确答案
  • C.每次读取都会放大十倍
  • D.快照数量无限自动增长

答案:B。COW 机制下,快照后第一次修改某个数据块,系统会先把旧数据块复制到快照区再执行新写入,因此产生额外写放大。快照不是完整备份,不会另存全部副本,也不会无限自动增长。

Q9. 以下场景更适合选择 Longhorn 的是?

多选题 · mid

  • A.中小规模 Kubernetes 集群← 正确答案
  • B.团队没有专职存储运维← 正确答案
  • C.上千节点超大规模集群
  • D.强依赖对象存储多网关

答案:AB。Longhorn 轻量、易运维,适合中小规模集群和无专职存储运维的团队;超大规模集群和对象存储、多网关等丰富功能需求更适合 Rook/Ceph。

Q10. 云原生持久化存储要解决的核心痛点是?

单选题 · easy

  • A.容器重启后数据不丢失← 正确答案
  • B.提升 CPU 调度效率
  • C.加速容器镜像的拉取
  • D.替代 Service Mesh 通信

答案:A。容器本是无状态租客,随时可能被调度到其他节点。持久化存储让数据生命周期与容器解耦,容器重启或迁移后数据依然存在。CPU 调度、镜像拉取、网络通信都不是存储的核心职责。