🍺 Buy me a beer
🐙

Ceph

Storage distribuito, software-defined, che sopravvive alla morte di un intero nodo senza fermarsi. La base hyper-converged di Proxmox VE: niente più SAN dedicata, i dischi di ogni nodo diventano un unico pool condiviso.

"Ho tolto due dischi da host diversi nello stesso momento" — la frase che ti insegna cosa significa davvero un dominio di failure a livello host, di solito nel modo più doloroso possibile.

01 / 13

Cos'è davvero Ceph

Non è "un RAID via rete": è un sistema di storage che distribuisce dati su decine di dischi e nodi diversi, senza un punto centrale che decide dove va cosa.

🐙 Storage software-defined, su hardware qualsiasi

Ceph trasforma un gruppo di server con dischi locali "normali" in un unico pool di storage distribuito, senza bisogno di una SAN proprietaria dedicata. È self-healing: se un disco o un intero nodo muore, il cluster si accorge da solo dei dati "sotto-replicati" e li ricopia altrove automaticamente, senza intervento manuale immediato.

Modalità di accessoCos'èUso tipico
RBD (RADOS Block Device)Disco a blocchi distribuitoDischi virtuali delle VM — esattamente quello che usa Proxmox VE (cap. 5-6)
CephFSFilesystem POSIX distribuitoStorage file condiviso tra più nodi/container (cap. 7)
RGW (RADOS Gateway)Object storage compatibile S3/SwiftBackup, archiviazione, applicazioni cloud-native (cap. 8)
💡 Nessun bibliotecario centrale, solo una mappa che tutti conoscono

Un sistema di storage tradizionale spesso ha un "capo" che tiene il registro di dove sta ogni file (un metadata server centrale, un single point of failure e collo di bottiglia). Ceph fa una cosa diversa e più elegante: usa un algoritmo chiamato CRUSH (cap. 3) che permette a qualsiasi client di calcolare da solo, matematicamente, su quali dischi si trova un dato oggetto — senza dover chiedere a nessuno. È come se ogni bibliotecario di una rete di biblioteche sapesse a memoria la stessa formula per trovare qualsiasi libro in qualsiasi biblioteca della rete, senza dover telefonare a un archivio centrale.

🏫 Il motivo per cui questa guida è legata così strettamente a Proxmox VE: Ceph è l'ingrediente che rende possibile un cluster hyper-converged, dove gli stessi nodi fanno sia da hypervisor (calcolo) che da storage condiviso — niente SAN esterna da comprare e gestire separatamente, e la migrazione live delle VM funziona perché il disco non "vive" su un nodo specifico, vive su Ceph.

⚖️ Ceph vs storage hyper-converged proprietario (Nutanix, vSAN)

Il concetto di "hyper-converged" non è esclusivo di Ceph: Nutanix (con il suo stack proprietario AOS/NDFS) e VMware vSAN risolvono lo stesso problema — calcolo e storage sugli stessi nodi, dati replicati automaticamente — ma con software closed-source, sviluppato e mantenuto da una singola azienda.

CephNutanix AOS / VMware vSAN
LicenzaOpen source (LGPL)Proprietario, licenza a pagamento
HardwareQualsiasi server/disco compatibile LinuxSpesso hardware certificato o appliance dedicate
Modalità di accessoRBD, CephFS, RGW (cap. 1)Tipicamente solo block/file per le VM dell'hypervisor supportato
Supporto commercialeCommunity, o tramite Red Hat/IBM e altre terze partiIncluso nel contratto col vendor
FlessibilitàAlta: usabile anche fuori da un solo hypervisorSpesso legato a un ecosistema specifico (AHV/ESXi)
💡 Non è "aperto quindi migliore" in automatico: le soluzioni proprietarie offrono spesso un'esperienza più integrata e un unico numero da chiamare in caso di problemi. Ceph richiede più competenza interna (o un supporto esterno dedicato) per essere gestito bene, ma in cambio elimina il vendor lock-in e i costi di licenza per petabyte che i sistemi proprietari comportano.
02 / 13

RADOS & i demoni core

Ceph è costruito su un motore di base, RADOS, e quattro tipi di demone che si dividono i compiti.

MONMonitor
mantiene la mappa del cluster, quorum via Paxos
numero dispari (3, 5), esattamente il quorum della guida Alta Affidabilità
MGRManager
metriche, dashboard web, plugin
non critico per l'I/O, ma essenziale per monitoraggio (cap. 10)
OSDObject Storage Daemon
uno per ogni disco fisico, gestisce dati e replica
il "muscolo" del cluster: più OSD, più capacità e throughput
MDSsolo per CephFS
gestisce i metadati del filesystem POSIX
non serve se usi solo RBD (il caso Proxmox più comune)
💡 Ogni OSD corrisponde tipicamente a un singolo disco fisico (o partizione): un nodo con 8 dischi farà girare 8 processi OSD separati. Più nodi e più dischi partecipano, più il cluster può parallelizzare I/O e assorbire guasti senza impatto.
vedere i demoni attivi
ceph orch ps
ceph mon stat
ceph osd tree
03 / 13

CRUSH map & Placement Group

Il cuore matematico di Ceph: come decide, senza una tabella centrale, esattamente su quali dischi mettere ogni singolo pezzo di dato.

📊 Dal nome dell'oggetto al disco fisico: due passaggi

Un oggetto (identificato dal suo nome dentro un pool) viene prima assegnato, tramite hash, a un Placement Group (PG) — una specie di "cassetto" logico condiviso da molti oggetti. Poi CRUSH (Controlled Replication Under Scalable Hashing) mappa quel PG su un insieme specifico di OSD reali, tenendo conto della topologia fisica del cluster: quali dischi stanno su quale nodo, quale nodo su quale rack.

🏢 Failure domain: dove Ceph "non mette tutte le uova"

Per default, CRUSH garantisce che le repliche di uno stesso oggetto finiscano su host diversi (il "failure domain" di default è host, configurabile anche a livello rack o datacenter). È il motivo per cui la morte di un intero nodo non fa perdere dati: nessuna delle repliche di un oggetto vive sullo stesso host di un'altra.

🔄 Perché niente tabella centrale

Qualsiasi client (incluso Proxmox stesso) può calcolare da solo, con la stessa formula CRUSH e la stessa mappa del cluster, esattamente dove leggere/scrivere — senza fare una query preventiva a un server "indice". Elimina un collo di bottiglia e un single point of failure che i sistemi di storage più vecchi avevano.

ispezionare la topologia e i placement group
ceph osd tree                    # la mappa fisica: host, dischi, pesi
ceph osd crush rule dump          # le regole di placement attive
ceph pg stat                      # quanti PG, in che stato
⚠️ Il numero di PG per pool (pg_num) va dimensionato in base al numero di OSD: troppo pochi PG limitano il parallelismo, troppi aumentano l'overhead di gestione. Ceph moderno include un PG autoscaler che regola questo valore da solo: lascialo attivo salvo motivi specifici per disabilitarlo.
04 / 13

Pool & repliche

Un pool è una partizione logica di oggetti, con la propria politica di ridondanza: repliche complete o erasure coding.

Replica (default)Erasure coding
Come funzionaCopie identiche complete (tipicamente size=3)Dati divisi in frammenti + parità, ricostruibili come RAID5/6
Efficienza spazioBassa (3x lo spazio dei dati reali)Alta (es. 4+2 usa solo 1,5x lo spazio)
Costo CPU/recoveryBassoPiù alto, specie in fase di recovery
Adatto aRBD per VM (cap. 5-6): serve bassa latenzaRGW/CephFS per dati "freddi" (cap. 7-8)

📋 size & min_size: quanto puoi perdere prima di bloccarti

creare e configurare un pool
ceph osd pool create vm-storage 128
ceph osd pool set vm-storage size 3       # 3 copie totali (default consigliato)
ceph osd pool set vm-storage min_size 2   # sotto 2 copie disponibili, le scritture si bloccano
ceph osd pool application enable vm-storage rbd
💥 min_size troppo basso è un rischio silenzioso di corruzione Con size=3 e min_size=1, il cluster continuerebbe a scrivere anche con una sola copia disponibile: se quell'unico OSD muore prima che il rebalance ricrei le altre copie, i dati sono persi. min_size=2 è il compromesso standard: blocca le scritture (disponibilità ridotta temporaneamente) piuttosto che rischiare di scrivere dati che poi non potranno essere recuperati.
05 / 13

RBD: il block storage che usa Proxmox

Quello che ti interessa davvero se il tuo obiettivo è storage per macchine virtuali: dischi virtuali distribuiti, con snapshot copy-on-write native.

💾 Un'immagine RBD è un disco virtuale, distribuito su tutto il cluster

Un'immagine RBD non vive su un singolo disco: è suddivisa in tanti piccoli oggetti (di default 4MB ciascuno) sparsi su decine di OSD diversi secondo CRUSH (cap. 3). È thin-provisioned (occupa spazio reale solo per i blocchi effettivamente scritti) e supporta snapshot copy-on-write istantanee, lo stesso principio visto per APFS/Btrfs/ZFS nelle altre guide di questo sito.

gestione base di un'immagine
rbd create vm-storage/disco-vm-101 --size 32768   # 32 GiB
rbd ls vm-storage
rbd info vm-storage/disco-vm-101
rbd resize vm-storage/disco-vm-101 --size 65536  # ridimensiona a caldo

# Snapshot copy-on-write, istantanea
rbd snap create vm-storage/disco-vm-101@pre-update
rbd snap ls vm-storage/disco-vm-101
rbd snap rollback vm-storage/disco-vm-101@pre-update
💡 QEMU (il motore di virtualizzazione dietro Proxmox VE) parla con RBD tramite librbd direttamente in user space, senza bisogno di montare un device a blocchi sul filesystem dell'host (a differenza del comando rbd map, utile invece se vuoi usare un'immagine RBD come un normale device Linux, es. /dev/rbd0, fuori dal contesto di una VM).
06 / 13

Proxmox VE + Ceph: il cluster hyper-converged

Come questi due mondi si incontrano davvero: stessi nodi, calcolo e storage insieme, niente SAN da comprare a parte.

🏫 Requisiti minimi ragionevoli

  • Almeno 3 nodi Proxmox VE (per il quorum dei MON, cap. 2 e la guida Alta Affidabilità)
  • Una rete dedicata per il traffico Ceph, separata da quella di gestione/VM (cap. 9)
  • Dischi SSD/NVMe consigliati per gli OSD: Ceph è sensibile alla latenza, non solo al throughput
  • RAM sufficiente: ogni OSD consuma memoria propria, non solo lo spazio disco
installazione via CLI (o l'equivalente dalla GUI: Datacenter → Ceph)
# Su ogni nodo del cluster Proxmox:
pveceph install
pveceph init --network 10.10.10.0/24   # la rete dedicata Ceph (cap. 9)

# Il primo nodo crea il monitor iniziale, poi si aggiungono gli altri
pveceph mon create

# Per ogni disco fisico da dedicare a Ceph, su ogni nodo
pveceph osd create /dev/sdb

# Crea il pool che useranno le VM
pveceph pool create vm-storage --size 3 --min_size 2

💾 Aggiungere Ceph come storage del datacenter

Da Datacenter → Storage → Add → RBD, colleghi il pool Ceph appena creato come storage disponibile per tutti i nodi del cluster: da questo momento, ogni nodo può creare dischi VM su quello storage condiviso.

🔄 Perché la migrazione live e l'HA funzionano

Con storage locale, migrare una VM viva tra nodi richiede copiare l'intero disco. Con Ceph, il disco è già visibile e accessibile da ogni nodo del cluster: la migrazione sposta solo lo stato di RAM/CPU della VM, ed è esattamente il motivo per cui l'HA Manager di Proxmox può riavviare una VM su un altro nodo dopo un guasto — il suo disco non è mai stato legato a un host specifico.

07 / 13

CephFS: quando serve un vero filesystem condiviso

RBD basta per i dischi delle VM. CephFS entra in gioco quando serve una cartella condivisa POSIX tra più nodi o container.

📁 Un filesystem, non un disco

A differenza di RBD (un blocco che appartiene tipicamente a una sola VM alla volta), CephFS è un filesystem POSIX montabile contemporaneamente da più client, come un NFS distribuito ma senza il single point of failure di un server NFS singolo. Richiede almeno un demone MDS attivo (cap. 2) per gestire i metadati (nomi file, permessi, struttura directory).

creare e montare
ceph fs volume create datashare
ceph fs status

# Montaggio via kernel client (piu' performante)
mount -t ceph mon1,mon2,mon3:/ /mnt/datashare -o name=admin,secret=AQ...
💡 Nel contesto Proxmox VE più comune, CephFS è utile per storage condiviso di template, ISO o backup accessibile da tutti i nodi — le VM stesse continuano a usare RBD (cap. 5) per i propri dischi, che non ha bisogno delle garanzie POSIX di CephFS.
08 / 13

RGW: object storage compatibile S3

Il terzo modo di accedere a Ceph, meno legato all'uso tipico di Proxmox ma utile per completare il quadro.

🌐 Un'API S3/Swift sopra RADOS

Il RADOS Gateway espone un'interfaccia compatibile con le API Amazon S3 e OpenStack Swift, permettendo ad applicazioni scritte per il cloud pubblico di usare storage a oggetti on-premise senza modifiche al codice. Tipico per backup applicativi, archiviazione a lungo termine, o come backend per strumenti che già parlano S3 nativamente.

avviare un gateway RGW
ceph orch apply rgw mio-gateway --placement="nodo1"
radosgw-admin user create --uid=app1 --display-name="App 1"
💡 Se il tuo unico obiettivo è storage per VM Proxmox, RGW non è strettamente necessario: RBD (cap. 5) copre già quel caso d'uso. RGW diventa rilevante quando il cluster Ceph serve anche applicazioni che si aspettano un'interfaccia S3, o come target di backup per strumenti compatibili.
09 / 13

Rete: il vero collo di bottiglia di Ceph

Ceph replica ogni scrittura in modo sincrono su più nodi prima di confermarla: la rete non è un dettaglio, è il fattore che decide le performance percepite.

🌐 Public network vs cluster network

Ceph distingue (opzionalmente, ma consigliato) la public network (client verso il cluster, es. Proxmox verso Ceph) dalla cluster network (traffico di replica tra gli OSD stessi). Separarle su interfacce fisiche diverse evita che il traffico di replica interno "rubi" banda a quello dei client in produzione.

Perché la latenza conta più del throughput

Una scrittura con size=3 deve arrivare e essere confermata da tutte e 3 le repliche prima che il client riceva l'ack. Ogni millisecondo di latenza di rete si somma direttamente alla latenza percepita da ogni singola scrittura: per carichi random-write intensi (tipici delle VM), la latenza della rete conta spesso più della sua larghezza di banda nominale.

⚠️ La regola pratica: 10Gbps è il minimo, non l'ideale Un cluster Ceph su rete da 1Gbps "funziona" solo in laboratorio: in produzione, con più VM che generano I/O contemporaneamente, diventa rapidamente il collo di bottiglia dell'intero cluster. 10Gbps è considerato il minimo accettabile per iniziare, 25Gbps o superiore è consigliato per cluster con carichi seri. Vale la pena rivedere la guida Networking e la guida VLAN per isolare correttamente questo traffico.
10 / 13

Monitoraggio & salute del cluster

Il primo comando che lanci ogni volta che qualcosa sembra strano, e cosa significano davvero i suoi tre possibili stati.

ceph -s: lo stato in un colpo d'occhio
ceph -s
ceph health detail
watch ceph -s   # aggiornamento live durante un rebalance (cap. 11)
StatoSignificato
HEALTH_OKTutto normale, nessuna azione richiesta
HEALTH_WARNQualcosa richiede attenzione ma non è ancora critico (es. un OSD quasi pieno, clock non sincronizzato tra nodi)
HEALTH_ERRProblema serio: dati a rischio o già inaccessibili (PG incomplete/down)

📈 Dashboard

Ceph include una dashboard web nativa (abilitata dal demone MGR) con grafici su capacità, I/O, stato degli OSD. Proxmox VE integra il proprio pannello Ceph riassuntivo direttamente nella sua interfaccia, comodo per non dover aprire due console separate.

🔍 Scrub & deep-scrub

Ceph verifica periodicamente in background l'integrità dei dati: lo scrub confronta metadati, il deep-scrub (più pesante, meno frequente) rilegge e verifica il checksum di ogni byte. Sono pianificati automaticamente in finestre di bassa attività, ma su cluster già sotto stress possono essere una causa di rallentamento visibile.

11 / 13

Manutenzione: OSD, guasti, rebalance

Aggiungere capacità e sostituire un disco guasto sono operazioni di routine. Farle nel modo sbagliato, con più guasti insieme, non lo è.

Aggiungere un OSD

via Proxmox o Ceph diretto
pveceph osd create /dev/sdc
-- oppure, Ceph nativo:
ceph-volume lvm create --data /dev/sdc

Rimuovere/sostituire un OSD guasto

la sequenza corretta
ceph osd out osd.7
-- attendi che il rebalance ricrei le copie mancanti --
ceph osd crush remove osd.7
ceph auth del osd.7
ceph osd rm osd.7
⚠️ Il rebalance ha un costo di performance reale, temporaneo Quando un OSD entra o esce, CRUSH ricalcola dove devono stare i dati e li sposta fisicamente tra i dischi: questo traffico "di fondo" compete con l'I/O reale delle VM. I parametri osd_max_backfills e osd_recovery_max_active permettono di limitare quanta banda dedicare al rebalance, sacrificando velocità di recovery per non degradare troppo le performance in produzione durante l'operazione.
💥 Mai rimuovere più dischi dallo stesso failure domain contemporaneamente Con size=3 e failure domain a livello host (cap. 3), rimuovere OSD da due host diversi nello stesso momento può lasciare alcuni oggetti con una sola copia rimasta, o addirittura zero se il timing è sfortunato. Le manutenzioni pianificate vanno fatte un host alla volta, aspettando che il cluster torni HEALTH_OK prima di procedere al successivo.
12 / 13

Alta affidabilità & disaster recovery con Ceph

Ceph è già di per sé un sistema ad alta affidabilità: qui i punti in cui si collega direttamente ai principi della guida dedicata.

📊 Quorum dei MON: lo stesso principio, un'altra applicazione

I demoni MON (cap. 2) devono raggiungere un quorum (maggioranza) per validare ogni cambiamento alla mappa del cluster — esattamente il concetto spiegato nella guida Alta Affidabilità, cap. 5. Per questo servono sempre un numero dispari di MON (3 o 5), mai un numero pari che potrebbe finire in parità durante una partizione di rete.

🏢 Failure domain come "fencing" implicito

Mentre la guida Alta Affidabilità parla di fencing attivo (spegnere un nodo sospetto), Ceph risolve un problema simile passivamente: distribuendo le repliche su host diversi (cap. 3), la perdita di un intero host (anche senza fencing esplicito) non può mai far perdere più di una copia di ogni oggetto, finché size e failure domain sono configurati correttamente.

💥 Le snapshot RBD non sono un backup Esattamente come gli snapshot APFS/ZFS visti in altre guide di questo sito, una snapshot RBD (cap. 5) vive nello stesso cluster dei dati originali: se il pool o il cluster stesso ha un problema serio (bug, errore umano, disastro fisico del sito), snapshot e dati originali possono sparire insieme. Un vero backup (Proxmox Backup Server, o l'export di immagini RBD verso un sito/cluster separato) resta indispensabile, non opzionale.
💡 Per disaster recovery multi-sito più avanzato, Ceph offre RBD mirroring: replica asincrona delle immagini verso un cluster Ceph separato, tipicamente in un altro datacenter — concettualmente vicino alla replica database vista nella guida Database, ma a livello di blocco invece che di righe SQL.
13 / 13

Cheat Sheet & Glossario

Tutto quello che serve, su una pagina. Bookmark questa sezione e dimentica il resto.

🔍 Stato del cluster

diagnosi quotidiana
ceph -s
ceph health detail
ceph osd tree
ceph df

💾 RBD

immagini & snapshot
rbd ls pool
rbd info pool/immagine
rbd resize pool/immagine --size N
rbd snap create pool/immagine@nome

🏫 Proxmox VE

pveceph
pveceph install
pveceph osd create /dev/sdX
pveceph pool create nome --size 3

🔧 Manutenzione OSD

rimuovere in sicurezza
ceph osd out osd.N
ceph osd crush remove osd.N
ceph auth del osd.N
ceph osd rm osd.N

✓ Regole d'oro

  • Almeno 3 nodi e numero dispari di MON, sempre
  • Rete dedicata da almeno 10Gbps per il traffico Ceph
  • min_size mai a 1 su pool con dati importanti
  • Manutenzione di un host alla volta, aspettando HEALTH_OK
  • Backup vero (Proxmox Backup Server) oltre alle snapshot RBD
  • ceph -s prima di qualsiasi intervento, sempre

✗ Errori classici

  • Cluster Ceph su rete da 1Gbps in produzione
  • Rimuovere OSD da host diversi contemporaneamente
  • Confondere snapshot RBD con un backup vero
  • Dimensionare pg_num a mano ignorando l'autoscaler senza motivo
  • Ignorare HEALTH_WARN pensando "tanto funziona ancora"

📚 Glossario essenziale

  • RADOS — il motore di storage distribuito alla base di tutto Ceph
  • MON — Monitor, mantiene la mappa del cluster in quorum
  • MGR — Manager, metriche e dashboard
  • OSD — Object Storage Daemon, un processo per disco fisico
  • MDS — Metadata Server, solo per CephFS
  • CRUSH — algoritmo che calcola dove va ogni oggetto, senza tabella centrale
  • PG — Placement Group, raggruppamento logico di oggetti
  • Pool — partizione logica con una propria politica di ridondanza
  • Failure domain — livello (host/rack) su cui CRUSH distribuisce le repliche
  • RBD — RADOS Block Device, i dischi virtuali usati da Proxmox
  • CephFS — filesystem POSIX distribuito sopra RADOS
  • RGW — RADOS Gateway, API compatibile S3/Swift
  • Erasure coding — ridondanza efficiente in spazio, stile RAID5/6
  • Rebalance — ridistribuzione dei dati dopo un cambio di topologia
  • Scrub / deep-scrub — verifica periodica di integrità dei dati
  • Hyper-converged — calcolo e storage sugli stessi nodi fisici

📚 Risorse

  • docs.ceph.com — documentazione ufficiale completa
  • pve.proxmox.com/wiki/Deploy_Hyper-Converged_Ceph_Cluster — guida ufficiale Proxmox
  • ceph.io — sito del progetto, release e community

🔗 Guide collegate

🐙
Regola finale dello svogliato — Ceph funziona bene finché rispetti tre cose: rete dedicata seria, min_size mai troppo basso, e manutenzione un host alla volta aspettando HEALTH_OK. Il resto — CRUSH, erasure coding, RGW — lo approfondisci quando il cluster cresce abbastanza da farlo servire davvero, non prima.