Emergenze Ceph

HEALTH_ERR: cosa guardare prima di toccare qualcosa

HEALTH_ERR non è un guasto: è l’etichetta che Ceph mette sopra una decina di guasti diversi. Il primo passo non è intervenire, è leggere quale dei dieci è, perché la risposta giusta per uno è quella sbagliata per un altro.

Perché è diverso da HEALTH_WARN

La distinzione non è di gravità ma di cosa sta succedendo ai dati.

HEALTH_WARN: il cluster sta lavorando

Qualcosa non è ottimale ma l’I/O procede e spesso il cluster si riprende da solo: un recovery in corso, un OSD appena rientrato, uno spazio che si sta riequilibrando. Va guardato, non necessariamente toccato.

HEALTH_ERR: qualcosa lo impedisce

Non vuol dire che il cluster è più lento: vuol dire che c’è una condizione che gli impedisce di procedere, e che da sola non si risolve. Da qui il cluster quasi mai torna indietro senza un intervento.

Il costo di aspettare

Più resta in HEALTH_ERR, più si riduce il margine: il prossimo evento, un disco o un nodo, trova meno copie e meno spazio per essere assorbito. Un cluster fermo in questo stato non è stabile, è in attesa del guasto successivo.

Leggere ceph health detail, nell’ordine giusto

Lo stato riassunto non dice niente di utile. Il comando che conta è ceph health detail, e si legge dall’alto.

La prima riga nomina il guasto

Non tutte le righe hanno lo stesso peso: la prima [ERR] è la condizione che tiene il cluster in questo stato, quelle sotto spesso sono conseguenze. Correggere una conseguenza senza la causa lascia tutto com’è.

Distinguere errori dai warning nella stessa lista

ceph health detail elenca insieme [ERR] e [WRN]. I warning sotto un errore si risolvono spesso da soli quando l’errore è risolto: inseguirli prima è il modo più comune di perdere tempo.

Guardare se l’I/O sta passando

ceph -s dice se ci sono operazioni bloccate e da quanto. Un HEALTH_ERR con l’I/O che procede e uno con l’I/O fermo sono due urgenze diverse, anche se la parola è la stessa.

I casi che troviamo più spesso

Lo stesso HEALTH_ERR, cause diverse, risposte opposte.

OSD_FULL: uno o più OSD pieni

Ceph ha bloccato le scritture per non riempire del tutto un OSD. Non si libera spazio cancellando a caso: si alza temporaneamente la soglia di pochissimo per far ripartire l’I/O, si fa spazio davvero, poi si rimette la soglia dov’era. Chi la alza e la dimentica si ritrova allo stesso punto con meno margine.

PG_AVAILABILITY: placement group non serviti

Ci sono dati che nessun OSD sta servendo, di solito perché sono giù più OSD di quanti il pool ne tolleri. Qui conta capire se gli OSD sono recuperabili prima di dichiararli persi: un OSD spento che riaccende è una cosa, uno marcato lost è irreversibile.

MON_DOWN o quorum perso

Senza quorum dei monitor nessuno decide, e l’I/O si ferma anche se tutti gli OSD sono vivi. Le cause tipiche sono due nodi persi su tre, orologi disallineati o una partizione di rete. Si riparte dai monitor, non dagli OSD: finché non c’è quorum, intervenire sugli OSD non produce effetti.

PG_DAMAGED: incoerenze trovate dallo scrub

Lo scrub ha trovato copie che non coincidono. ceph pg repair funziona spesso, ma prima va capito perché sono divergenti: se la causa è un disco che corrompe silenziosamente, la riparazione è temporanea e il problema torna.

Cosa non fare

Riavviare gli OSD per vedere se si sblocca

È il primo istinto e il più costoso. Ogni riavvio toglie altre copie proprio mentre ne mancano, e un cluster che era degradato ma stabile può passare a non servire più dati.

Alzare le soglie di pieno e lasciarle alzate

Serve come respiro per far ripartire l’I/O e liberare spazio davvero. Lasciata alzata, la soglia sposta solo il punto in cui il cluster si fermerà di nuovo, con meno margine di prima.

Marcare un OSD come lost per far ripartire le PG

Funziona, e non si torna indietro: Ceph smette di aspettare quelle copie e accetta quello che resta. Se l’OSD era recuperabile, i dati che aveva solo lui sono persi. È l’ultima mossa, non la prima.

Domande frequenti

Il cluster è in HEALTH_ERR ma le macchine virtuali funzionano. È grave?

È un’urgenza, non un’emergenza, e la differenza sta nel margine. Il dato in questo momento è servito, ma la condizione che ha portato il cluster lì non si risolve da sola: il prossimo guasto trova meno copie di quante ne servano. Va affrontato nelle ore successive, non quando si fermerà anche l’I/O.

Quanto tempo ho prima che diventi un problema vero?

Dipende da cosa l’ha causato. Un OSD_FULL con un riequilibrio in corso può peggiorare in poche ore. Un PG_DAMAGED può restare stabile per giorni. La domanda a cui rispondere non è quanto tempo c’è, ma quante copie restano: con una sola copia buona il tempo non conta più.

Posso togliere HEALTH_ERR silenziando l’allarme?

Si può, e non va fatto. Alcuni controlli si possono silenziare con ceph health mute, ed è utile per non perdere di vista gli altri mentre si lavora su uno. Usarlo per far tornare verde il cruscotto significa togliere l’unico strumento che dice cosa sta succedendo.

Intervenite anche su cluster che non avete installato voi?

È il caso più frequente. Non serve che ci raccontiate com’è stato messo su né perché: quello lo guardiamo noi.

Se il cluster è in HEALTH_ERR adesso

Contattaci

Se avete letto ceph health detail e non è chiaro quale sia la causa, o se l’I/O è già fermo, scriveteci prima di intervenire. L’ordine in cui si fanno le cose, in questo stato, conta più di quali si fanno.

Le nostre competenze

  • Partner ufficiale Proxmox: vedi la scheda sul sito Proxmox
  • Ceph in produzione
  • Partner PetaSAN: vedi la scheda sul sito PetaSAN
  • Red Hat Certified Specialist: Ceph Cloud Storage