Skip to main content
RunBook Academy

CephXLV · RADOS Gateway (RGW)RADOS Gateway (RGW)

The RGW pools and what each requires

Advanced⏱ ~17 mincephradosgw-admin

What you'll learn

  • Identify every pool an RGW zone uses
  • Match placement and replication to each pool's role
  • Size the index pool appropriately
  • Recognise problems specific to each pool

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

An RGW deployment creates six or seven pools automatically, and treating them uniformly is a mistake: one holds nearly all the bytes, one determines nearly all the latency, and one breaks large uploads if it is missing.

The pools

ceph osd pool ls | grep rgw
radosgw-admin zone get --rgw-zone=default | jq 'keys'
PoolContentsTypeDevice class
.rgw.buckets.dataobject payloadsEC suitablebulk
.rgw.buckets.indexbucket indexes (omap)replicatedflash
.rgw.buckets.non-ecin-flight multipartreplicatedany
.rgw.metauser and bucket metadatareplicatedflash preferred
.rgw.logoperation, usage, sync logsreplicatedany
.rgw.controlcontrol objectsreplicatedany
.rgw.otpone-time-password statereplicatedany

The index pool

The one that matters most for responsiveness:

ceph osd crush rule create-replicated rgw-index-nvme default host nvme
ceph osd pool set default.rgw.buckets.index crush_rule rgw-index-nvme
ceph osd pool set default.rgw.buckets.index size 3
ceph osd pool set default.rgw.buckets.index pg_num_min 128
ceph osd pool set default.rgw.buckets.index pg_autoscale_bias 4

It holds omap, so it cannot be erasure coded. It is small by capacity and touched by every PUT, DELETE, and LIST. Flash placement and a PG floor are the two settings worth making explicitly.

The data pool

ceph osd erasure-code-profile set rgw-ec k=8 m=3 crush-failure-domain=host
ceph osd pool create default.rgw.buckets.data erasure rgw-ec
ceph osd pool application enable default.rgw.buckets.data rgw
ceph osd pool set default.rgw.buckets.data bulk true

This is where the capacity is and where EC pays. Verify average object size against k × min_alloc_size before choosing a wide profile.

The non-ec pool

ceph osd pool ls | grep non-ec

Holds in-flight multipart upload state, which involves operations EC pools handle poorly. It must exist and be replicated. Its absence breaks large uploads specifically while ordinary PUTs continue working — a distinctive failure signature.

Per-pool symptoms

SymptomPool
Slow LIST, slow small PUTindex
Slow large transfersdata
Multipart uploads fail, small PUTs finenon-ec
User or bucket operations slowmeta
Sync status stale in multisitelog

Quiz

Knowledge check · 4 questions

  1. Q1. Multipart uploads fail while ordinary PUTs work correctly. Which pool should you check?

  2. Q2. RGW index pool capacity should be planned from projected object count rather than data volume.

  3. Q3. Plan pools for a small-object RGW deployment.

    A deployment will hold 4 billion objects averaging 60 KB — roughly 240 TB of data. The cluster has HDD and NVMe device classes. The team plans to place all RGW pools on HDD using the defaults.

  4. Q4. Why can the RGW index pool not be erasure coded?

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

Production discipline

Place the RGW index pool on the fastest device class available and plan its capacity from projected object count rather than data volume; both decisions are cheap and both are commonly got wrong by relying on the automatic pool creation. Verify the non-ec pool exists on any EC-backed deployment, since its absence breaks only large uploads.

Cross-course references

  • Kubernetes: separating etcd onto fast storage follows the identical reasoning
  • Linux: filesystem inode capacity versus data capacity is the same count-versus-volume distinction