Skip to main content
RunBook Academy

CephVI · Ceph ArchitectureCeph Architecture

The storage layer cake — RBD, CephFS, and RGW on one RADOS

Foundation⏱ ~15 min

What you'll learn

  • Describe what each service layer adds on top of RADOS
  • Explain which properties are set by RADOS and cannot be changed by a service
  • Choose the appropriate service layer for a given workload
  • Attribute a symptom to the service layer or to RADOS beneath it

Prerequisites

None — start here.

Verified against Ceph Tentacle 20.2.x · Ceph Squid 19.2.x (supported previous) · cephadm matches the verified Ceph release · podman 4.x · csi-rbd and csi-cephfs current · RBD / CephFS / RGW current (matches Ceph release) · Linux kernel 5.15+ (5.10 minimum) · Ubuntu 24.04 LTS (Ceph host baseline) · Debian 12 (Bookworm) (Ceph host baseline) · Rocky Linux / RHEL / AlmaLinux 9.x (Ceph host baseline) · Proxmox VE 9.x (cross-course integration) · Kubernetes 1.31+ (cross-course integration) · 2026-08-18

Not yet marked complete on this device.

Why this matters in production

Ceph is one storage system with three faces. Understanding which face you are looking at — and which properties come from underneath and cannot be changed by the face — is what stops an operator tuning RGW for a problem that lives in RADOS.

The layers

┌───────────────────────────────────────────────┐
│ Applications: VMs, POSIX clients, S3 clients  │
├───────────────┬─────────────┬─────────────────┤
│ RBD           │ CephFS      │ RGW             │
│ block device  │ POSIX FS    │ S3/Swift object │
│ librbd        │ MDS + client│ radosgw daemon  │
├───────────────┴─────────────┴─────────────────┤
│ librados                                      │
├───────────────────────────────────────────────┤
│ RADOS: MON + MGR + OSD, objects, pools, PGs   │
├───────────────────────────────────────────────┤
│ BlueStore on raw block devices                │
└───────────────────────────────────────────────┘

RBD presents a block device. It maps an image onto a sequence of fixed-size RADOS objects and adds snapshots, clones, layering, and mirroring. It adds no metadata daemon — everything is computed from the image name and offset.

CephFS presents a POSIX filesystem. It needs a metadata daemon (MDS) because POSIX requires directories, permissions, and rename semantics that objects do not provide. File data goes to a data pool as objects; file metadata goes to a metadata pool.

RGW presents S3 and Swift APIs. It runs as a daemon that maps buckets and objects onto RADOS objects, and it maintains bucket indexes, user accounts, and multi-site replication state.

What RADOS sets and services cannot change

PropertySet byA service can…
Durability (size, EC)pool configchoose which pool, not change the guarantee
PlacementCRUSH rulechoose the rule per pool
Consistency modelRADOSnot weaken it (RGW multi-site is between zones)
Write latency flooracting set commitsadd caching above, not remove the floor
Capacityclusternot exceed it

This is the table to consult when someone asks whether a service-level setting can fix a problem. If the property lives in RADOS, the answer is no.

Choosing a layer

  • RBD for anything that wants a disk: VMs, containers with block PVCs, databases. One writer per image unless the filesystem above is cluster-aware.
  • CephFS for shared POSIX access from many clients: home directories, render farms, shared application data. Costs an MDS and its metadata pool.
  • RGW for applications that speak S3: backups, artefact stores, data lakes, anything with an existing S3 client.

The mistake worth naming is using CephFS where RBD would do, because a single VM needs a disk rather than shared access, and CephFS adds a metadata daemon, a metadata pool, and a whole class of failure modes for no benefit.

Diagnostic shortcut

For any symptom, ask: does it affect one service or all of them? One service points at that service’s daemon or metadata. All services point at RADOS — capacity, PG health, OSD latency, or the network.

Quiz

Knowledge check · 4 questions

  1. Q1. S3 PUT latency is poor. What is the cheapest test to determine whether the problem is in RGW or beneath it?

  2. Q2. Because RBD, CephFS, and RGW are separate services, heavy load on one is naturally isolated from the others.

  3. Q3. A team plans to store VM disks on CephFS so that all hypervisors can see the same files. Assess the design.

    Six hypervisors running 80 VMs. The proposal is a single CephFS mounted on every hypervisor, with each VM disk stored as a qcow2 file. The stated reason is that live migration needs shared storage. The cluster currently has no MDS deployed. The alternative under consideration is RBD with one image per VM.

  4. Q4. Name three properties that RADOS sets and no service layer can change, and explain the diagnostic use of that fact.

Passing score: 75%. Answers are checked in this browser.

Production discipline

Attribute every symptom to a layer before tuning: rados bench against the service’s data pool separates a gateway or client problem from a RADOS one in five minutes and routinely saves hours. Remember that the services share OSDs by default, so isolation between workloads is a CRUSH and device-class decision rather than something the service layers provide. And choose the simplest layer that meets the requirement — CephFS earns its metadata daemon only when many clients genuinely need simultaneous POSIX access.

Cross-course references

  • Ceph: Part XXXV (RBD Architecture) for the block layer in detail.
  • Ceph: Part XL (CephFS Architecture) for the file layer.
  • Ceph: Part XLV (RADOS Gateway) for the object layer.