CephLXX · Network PerformanceNetwork Performance
Ceph's network traffic patterns
What you'll learn
- Describe Ceph's network protocols and patterns
- Compute the connection count for a cluster
- Identify the fabric requirements that follow
- Dispel the common misconceptions
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
Why this matters in production
Ceph’s requirements of a network are specific and modest, and several widely repeated beliefs about them are wrong. Getting this right avoids both over-engineering and surprises at scale.
What Ceph actually uses
| Property | Ceph |
|---|---|
| Transport | TCP only |
| Addressing | unicast only |
| Multicast | never used |
| Broadcast | never used |
| Protocol | msgr2 (v2), with msgr1 for legacy |
| Ports | 3300 (v2) and 6789 (v1) for monitors; 6800–7300 for OSDs |
| Discovery | via the monitor map, not via any discovery protocol |
There is no multicast requirement, no IGMP configuration, and no broadcast domain requirement beyond ordinary IP reachability. Clusters routinely span routed layer 3 fabrics.
ss -tn state established '( sport >= :6800 and sport <= :7300 )' | wc -l
ceph config get mon ms_bind_msgr2
ceph config get mon ms_bind_msgr1
Connection scaling
Each OSD maintains connections to every other OSD it shares PGs with, which on a well-distributed cluster is most of them:
connections ≈ N_osds × (N_osds - 1) cluster-wide, both directions counted
per OSD ≈ N_osds - 1 plus client connections
| OSDs | Approximate per-OSD peer connections |
|---|---|
| 24 | 23 |
| 100 | 99 |
| 500 | 499 |
| 1000 | 999 |
# what one OSD actually holds
ss -tn | awk '$5 ~ /:68[0-9][0-9]|:69/ {n++} END {print n, "connections"}'
At large scale this drives file descriptor and memory requirements per OSD:
ceph config get osd ms_async_op_threads
cat /proc/$(pidof -s ceph-osd)/limits | grep -i 'open files'
Heartbeats
ceph config get osd osd_heartbeat_interval
ceph config get osd osd_heartbeat_grace
ceph config get osd osd_heartbeat_min_peers
Heartbeats are small unicast messages between OSD peers on both the public and cluster networks. They are frequent and tiny, which makes them sensitive to loss and to latency spikes but negligible in bandwidth.
What the fabric must provide
| Requirement | Why |
|---|---|
| Low, consistent latency | every operation crosses it twice |
| Loss-free under burst | heartbeat loss causes OSD flapping |
| Adequate aggregate bandwidth | recovery and backfill are bulk transfers |
| Full IP reachability between all nodes | the connection mesh is dense |
| Sufficient buffer for incast | many-to-one patterns are inherent |
Notably absent: multicast support, a shared broadcast domain, or any layer 2 adjacency requirement.
Common misconceptions
| Belief | Reality |
|---|---|
| Ceph needs multicast | it does not; TCP unicast only |
| OSDs must share a layer 2 segment | routed layer 3 works fine |
| A cluster network is mandatory | it is optional; a single network is supported |
| Jumbo frames are required | they are optional |
| Ceph uses UDP for heartbeats | heartbeats are TCP like everything else |
Quiz
Knowledge check · 4 questions
Q1. What transport and addressing does Ceph use for all its traffic?
Q2. Ceph OSDs must share a layer 2 broadcast domain.
Q3. Review network requirements for a large cluster.
A 1000-OSD cluster is being planned. The draft network requirements specify multicast support, a single VLAN spanning all racks, and mandatory jumbo frames.
Q4. Why do large clusters need raised file descriptor limits and more per-OSD memory?
Passing score: 75%. Answers are checked in this browser.
Production discipline
Specify full IP reachability rather than a shared VLAN in network requirements — Ceph is TCP unicast throughout and runs correctly across routed layer 3. At large scale, raise per-OSD file descriptor limits and size memory for a peer connection to nearly every other OSD.
Cross-course references
- Kubernetes: overlay networks similarly need only IP reachability, not layer 2 adjacency
- Linux: connection-count scaling drives descriptor limits in any mesh architecture