Lo stesso OSD va down e torna up
In ceph health detail compaiono messaggi come osd.4 marked down after no beacon ripetuti nel tempo, e il numero di OSD coinvolti è sempre lo stesso o sempre sullo stesso nodo.
Emergenze Ceph
Un OSD che entra ed esce dal cluster raramente ha un disco rotto. Nei cluster su cui veniamo chiamati la causa è quasi sempre la rete, e sostituire il disco per primo fa perdere tempo mentre il cluster resta scoperto.
Il cluster segnala OSD che cambiano stato da soli, senza che nessuno li abbia toccati.
down e torna upIn ceph health detail compaiono messaggi come osd.4 marked down after no beacon ripetuti nel tempo, e il numero di OSD coinvolti è sempre lo stesso o sempre sullo stesso nodo.
A ogni giro il cluster ricomincia a spostare dati. In ceph -s il recovery non arriva mai alla fine: riparte da capo prima di completarsi.
SMART è pulito, dmesg non riporta errori di I/O, e il disco risponde normalmente quando lo si interroga. È il segnale che il problema sta altrove.
In ordine di frequenza, su cluster in produzione che non abbiamo installato noi.
Un nodo configurato a 9000 e gli altri a 1500, o uno switch che non passa i jumbo frame. I pacchetti piccoli passano, quelli grandi no: il cluster sembra funzionare finché il traffico non supera la soglia, poi gli heartbeat si perdono e l’OSD viene dichiarato morto.
Un cavo, un transceiver o una porta che degrada solo quando il traffico sale. A riposo il collegamento è perfetto, e proprio il riequilibrio innescato dal flapping porta il carico al punto in cui il link cede: il problema si alimenta da solo.
Quando il traffico di replica e quello dei client condividono il collegamento, basta un backup o una macchina virtuale che scrive molto per far ritardare gli heartbeat oltre la soglia. Ceph interpreta il ritardo come un OSD morto.
Tre verifiche che si fanno in pochi minuti e che escludono o confermano la rete prima di toccare i dischi.
Un ping con pacchetto grande e frammentazione vietata: ping -M do -s 8972 <altro-nodo>. Se passa a 1472 ma non a 8972, l’MTU non è coerente lungo il percorso. Va provato fra tutte le coppie di nodi, non solo da uno.
ip -s link su ogni nodo: contatori di dropped o errors che crescono indicano il collegamento, non il disco. Vanno letti due volte a distanza di qualche minuto, perché quello che conta è se aumentano.
ceph osd tree dice se gli OSD che fanno flapping stanno tutti sullo stesso nodo o sullo stesso switch. Se sì, la causa è quasi certamente quel percorso di rete.
Due delle tre cause si sistemano in pochi minuti, a cluster acceso. La terza richiede di decidere, non solo di eseguire.
Si corregge un nodo alla volta, senza fermare nulla: ip link set dev <interfaccia> mtu 9000 per la prova, poi la stessa riga nella configurazione di rete perché sopravviva al riavvio. Lo switch deve passare i jumbo frame su tutte le porte coinvolte, altrimenti il problema si sposta invece di sparire. Dopo ogni nodo si ripete il ping con pacchetto grande: se passa, quel percorso è a posto.
Cavo, transceiver o porta dello switch, in quest’ordine di probabilità. Si mette il nodo in noout, si sostituisce, si toglie noout e si guardano i contatori di ip -s link per qualche ora sotto carico. Se tornano a salire, il pezzo era un altro: si prosegue con il successivo invece di tornare indietro.
La correzione è nota (una rete dedicata per la replica, dichiarata in cluster_network) ma farla su un cluster che sta servendo dati non è un comando: è una sequenza. In che ordine toccare i nodi, se fermare il riequilibrio prima o lasciarlo correre, cosa fare se a metà strada un OSD non rientra. Sbagliare l’ordine su un cluster già scoperto costa più del problema che si stava risolvendo. Se siete a questo punto e il cluster ha già meno copie del previsto, scriveteci prima di iniziare: mezz’ora con chi l’ha già fatto costa meno di un recovery andato storto.
Se la causa è la rete, il disco nuovo farà flapping come il vecchio. Nel frattempo il cluster ha perso una copia in più e il riequilibrio aggiunge carico proprio sul collegamento che sta cedendo.
Allungare i tempi di heartbeat fa sparire il sintomo e lascia il problema. Un cluster che non dichiara morto un OSD davvero irraggiungibile smette di proteggere i dati, che è l’unica cosa per cui esiste.
noout e dimenticarseneImpostare noout è giusto per fermare il riequilibrio mentre si indaga, ed è il primo comando che diamo anche noi. Diventa un problema se resta impostato: il cluster smette di reagire ai guasti veri, e quello successivo non viene assorbito.
Può, ed è il caso meno frequente. Succede con dischi che rispondono con latenze molto alte senza dare errori: l’OSD non muore ma non risponde in tempo agli heartbeat. Si riconosce perché gli OSD coinvolti sono sparsi su nodi diversi invece di concentrarsi su uno, e perché le latenze sono alte anche a cluster fermo.
Dipende da quante copie restano. Con tre repliche e un OSD che fa flapping il dato è ancora protetto, ma ogni giro consuma banda e allunga il recovery. Con due copie, o con un secondo OSD già fuori, è un’emergenza: il margine per il guasto successivo non c’è più.
Quasi sempre sì. Correggere un MTU o spostare la rete cluster su un collegamento dedicato si fa a cluster acceso, un nodo alla volta. Fermare tutto serve raramente, e quando serve è perché il flapping ha già portato dei placement group fuori servizio.
È il caso più frequente. Non serve che ci raccontiate com’è stato messo su né perché: quello lo guardiamo noi.
Un OSD che fa flapping non ferma il cluster, ma lo lascia scoperto finché continua. Se non riuscite a isolare la causa, scriveteci: queste situazioni le abbiamo già viste, anche su cluster che non abbiamo installato noi.


