Skip to main content
RunBook Academy

CephLXXXII · Hyper-Converged CephHyper-Converged Ceph

Scaling a hyper-converged cluster

Intermediate⏱ ~17 mincephpvecmpveceph

What you'll learn

  • Describe what adding a node changes
  • Sequence a node addition safely
  • Recognise the scaling limits
  • Plan growth that does not waste capacity

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

Adding a node adds compute and storage together, which is convenient when both are needed and wasteful when only one is.

What a node addition changes

LayerEffect
Computemore CPU and memory for VMs
Storage capacitymore raw capacity
Storage performancemore devices, more parallelism
Failure absorption1/N falls, improving efficiency
Failure domain countmore hosts, better CRUSH placement
Recoverya rebalance of roughly the new node’s share

The failure absorption improvement is often overlooked: going from four nodes to five reduces the reserve from 25% to 20% of usable capacity, which frees capacity in addition to what the node adds.

Sequencing the addition

# 1. join the Proxmox cluster
EXISTING_NODE_IP=10.20.0.11
pvecm add ${EXISTING_NODE_IP}
pvecm status
# 2. verify networking before adding storage
CEPH_NODE=stor-04
ping -M do -s 8972 -c 2 ${CEPH_NODE}
iperf3 -c ${CEPH_NODE} -t 10
# 3. install Ceph and add the host
pveceph install
ceph orch host add pve-05 10.0.1.15
ceph orch host label add pve-05 osd
# 4. add OSDs, ideally all at once
ceph orch daemon add osd pve-05:/dev/sdb
ceph orch daemon add osd pve-05:/dev/sdc
# ...
# 5. watch the rebalance
watch -n 30 'ceph -s | grep misplaced'

Adding all the node’s OSDs together produces one rebalance rather than one per device.

The scaling limits

Node countCharacteristic
3minimum; no recovery from a host failure with size=3
4–6works well; absorption reserve is large
7–12the sweet spot
13–20contention management becomes significant work
20+dedicated is usually better
The limits come from:
  coordination cost of maintenance across many coupled nodes
  contention management growing with density
  the fixed compute-to-storage ratio diverging from demand
  failure domain design becoming harder with mixed roles

Growth that does not waste capacity

SituationApproach
Both neededadd a balanced node
Compute onlyadd a compute-only Proxmox node, no OSDs
Storage onlyadd drives to existing nodes, or a storage-only node
Neither balancedconsider migrating to dedicated
# a compute-only node: join Proxmox, do not add OSDs
IP=10.20.0.11
pvecm add ${IP}
# do not run pveceph osd create

Mixed node roles within one cluster are entirely supported and are what prevents the fixed-ratio waste.

Quiz

Knowledge check · 4 questions

  1. Q1. Why does adding a node improve usable capacity by more than the drives it contains?

  2. Q2. Every node added to a hyper-converged cluster must run both VMs and OSDs.

  3. Q3. Plan growth for a hyper-converged cluster.

    A six-node hyper-converged cluster is at 45% storage utilisation and 85% CPU utilisation. VM demand is growing steadily; storage demand is flat.

  4. Q4. At what node count does hyper-convergence stop scaling well, and why?

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

Production discipline

Add nodes with only the role that is needed — a Proxmox cluster supports compute-only nodes and Ceph hosts without VMs, and always adding balanced nodes is what makes hyper-convergence expensive at scale. Add all of a new node’s OSDs together so the addition produces one rebalance.

Cross-course references

  • Kubernetes: node pools with distinct roles avoid the same fixed-ratio waste
  • Linux: heterogeneous cluster membership is normal and often more efficient