Diagnostic

Lire un HEALTH_WARN Ceph

Un rééquilibrage normal et un pool qui va bloquer les écritures produisent le même voyant jaune. Voici comment faire le tri, et quand il vaut mieux attendre.

Niveau intermédiaire  ·  Lecture 12 min  ·  Base Ceph Squid et Tentacle

Un cluster Ceph passe en HEALTH_WARN pour des raisons qui vont du bénin au critique, et rien dans la couleur du voyant ne permet de les distinguer. Un rééquilibrage normal produit le même avertissement qu'un pool qui va bientôt bloquer les écritures. Cette page sert à faire ce tri, et à savoir quand attendre plutôt qu'agir.

Le fonctionnement général de Ceph et son installation sont traités au chapitre stockage du guide cluster. Ici, on part du principe que la plateforme existe et qu'elle vient de passer au jaune.

01Lire l'état correctement

La commande d'état générale résume, elle n'explique pas. C'est le détail qu'il faut demander, et c'est la première chose à faire avant toute hypothèse.

Les deux commandes à lancer dans cet ordre
# le resume : etat, services, donnees, activite en cours
ceph -s

# le detail : un code et une explication par probleme
ceph health detail

Chaque problème porte un code en majuscules, par exemple PG_DEGRADED ou OSD_NEARFULL. Ce code est la clé : il se cherche, il se documente, et il permet de construire une alerte précise plutôt qu'une alerte sur la couleur générale.

Les compléments utiles
ceph osd tree          # topologie, OSD en panne ou sortis
ceph osd df            # remplissage et equilibre par OSD
ceph df                # espace par pool, espace reellement disponible
ceph osd perf          # latences, le signal precoce d'un disque fatigue
ceph pg stat           # etat global des groupes de placement
ceph crash ls          # incidents de demons recemment enregistres
Regarder aussi l'activité en cours

Le résumé indique s'il se passe quelque chose : reconstruction, rééquilibrage, nettoyage. Un avertissement accompagné d'une activité en cours et de compteurs qui progressent est généralement un avertissement transitoire. Un avertissement sans activité, avec des compteurs figés, demande une intervention.

02Les messages courants, traduits

CodeCe que cela veut direGravitéConduite à tenir
OSD_DOWNUn OSD ne répond plusÉlevéeDisque, démon ou noeud, voir paragraphe 07
OSD_HOST_DOWNTous les OSD d'un noeud sont absentsÉlevéeLe noeud est tombé ou isolé
PG_DEGRADEDDes données ont moins de copies que prévuMoyenneNormal pendant une reconstruction
PG_UNDERSIZEDDes groupes tournent avec trop peu d'OSDMoyenneSuite logique d'un OSD absent
PG_AVAILABILITYDes données sont momentanément inaccessiblesÉlevéeLe service est touché, agir
OSDMAP_FLAGSUn drapeau de maintenance est poséMoyenneSouvent un noout oublié
OSD_NEARFULLUn OSD dépasse 85 % de remplissageMoyenneVoir paragraphe 05
OSD_BACKFILLFULLTrop plein pour accueillir un rééquilibrageÉlevéeLa reconstruction est bloquée
OSD_FULLÉcritures bloquéesCritiqueLe service est arrêté
POOL_NEARFULLUn pool approche de sa limiteMoyenneCapacité à planifier
MON_CLOCK_SKEWLes horloges des moniteurs divergentMoyenneSynchronisation du temps
MON_DISK_LOWPeu d'espace sur le disque d'un moniteurMoyenneLibérer la partition système
PG_NOT_DEEP_SCRUBBEDVérification approfondie en retardFaibleFenêtre de nettoyage trop étroite
PG_NOT_SCRUBBEDVérification simple en retardFaibleMême cause
OSD_SCRUB_ERRORSIncohérences détectéesÉlevéeVoir paragraphe 06
SLOW_OPSDes requêtes mettent trop longtempsMoyenneDisque fatigué ou réseau saturé
TOO_FEW_PGSTrop peu de groupes pour la volumétrieFaibleLaisser l'ajustement automatique agir
POOL_NO_REDUNDANCYUn pool sans copie de secoursÉlevéeCorriger la taille du pool
RECENT_CRASHUn démon s'est arrêté anormalementMoyenneLire le rapport avant d'archiver
DAEMON_OLD_VERSIONDes démons en versions différentesMoyenneMontée de version inachevée
BLUEFS_SPILLOVERMétadonnées débordant sur le disque lentMoyenneDimensionnement à revoir

03Comprendre les états de groupes de placement

Un groupe de placement est un lot de données que Ceph déplace et répare comme un tout. Son état se lit comme une addition de qualificatifs : active+clean est l'état nominal, et tout le reste décrit ce qui manque ou ce qui est en cours.

ÉtatSignificationFaut-il s'inquiéter
active+cleanToutes les copies présentes et à jourNon, c'est la cible
degradedIl manque au moins une copieNon si le compteur baisse
undersizedMoins d'OSD que la taille demandéeNon si une reconstruction tourne
peeringLes OSD se mettent d'accord sur l'étatNon, transitoire et bref
backfillingRecopie massive en coursNon, c'est le travail normal
recoveringRattrapage des écritures manquéesNon
remappedLes données changent d'emplacementNon
inconsistentLes copies ne concordent pasOui, voir paragraphe 06
incompleteHistorique insuffisant pour déciderOui, risque de perte
stalePlus de nouvelles de l'OSD responsableOui, un OSD est muet
downDonnées indisponiblesOui, service touché
Isoler les groupes qui posent problème
# repartition par etat
ceph pg stat
ceph pg dump pgs_brief | awk '{print $2}' | sort | uniq -c | sort -rn

# les groupes reellement bloques
ceph pg dump_stuck inactive
ceph pg dump_stuck stale
ceph pg dump_stuck undersized

04Ce qui se règle tout seul

La majorité des avertissements disparaissent sans intervention. Les reconnaître évite de déclencher une manoeuvre inutile qui, elle, peut faire des dégâts.

  • Un rééquilibrage après ajout ou retrait d'un disque. Les compteurs de groupes dégradés baissent régulièrement : il n'y a rien à faire qu'attendre.
  • Un redémarrage de noeud planifié, drapeau noout posé. L'état jaune est attendu, et il revient au vert au retour du noeud.
  • Un retard de vérification après plusieurs jours d'activité intense : la fenêtre de nettoyage n'a pas suffi, elle rattrapera.
  • Un ajustement du nombre de groupes de placement déclenché par la croissance du pool.
Vérifier que ça progresse plutôt que de supposer
# le nombre d'objets degrades doit diminuer de minute en minute
watch -n 30 'ceph -s | grep -E "degraded|misplaced|recovery"'
Quand la patience cesse d'être une vertu

Si les compteurs ne bougent plus pendant une demi-heure, ce n'est plus une reconstruction en cours mais une reconstruction bloquée. Les causes habituelles sont un OSD trop plein pour accueillir les données, un second OSD tombé dans le même domaine de défaillance, ou un réseau saturé. Passez alors au paragraphe 07.

05Remplissage et seuils

Ceph protège les données en refusant d'écrire plutôt qu'en risquant une perte. Les seuils de remplissage ne sont donc pas des alertes de confort : ce sont les paliers qui conduisent à l'arrêt du service.

SeuilValeur par défautEffet
nearfull85 %Avertissement, rien n'est bloqué
backfillfull90 %Les rééquilibrages s'arrêtent
full95 %Les écritures sont refusées
La vraie limite est bien plus basse

Ces seuils sont des filets de sécurité, pas des objectifs. La limite utile est la capacité à reconstruire après la perte d'un noeud : les données du noeud perdu se répartissent sur les survivants. Au-delà de 70 à 75 % d'occupation sur un cluster de trois noeuds, cette reconstruction peut remplir les OSD restants et bloquer les écritures, ce qui transforme un incident ordinaire en panne complète.

Mesurer, et repérer un déséquilibre
# espace par pool et espace reellement disponible
ceph df

# ecart de remplissage entre OSD : au-dela de 15 points, CRUSH est desequilibre
ceph osd df | sort -k17 -n

# reequilibrage automatique, souvent la bonne reponse
ceph balancer status
ceph balancer mode upmap
ceph balancer on

Si l'espace manque réellement, les seules sorties sont d'ajouter des OSD, de supprimer des données, ou de réduire la rétention des sauvegardes hébergées sur le pool. Relever les seuils ne fait que repousser le mur de quelques jours, et c'est une très mauvaise idée.

06Erreurs de cohérence et réparation

Une erreur de cohérence signifie que les copies d'un même groupe ne concordent pas. Ceph l'a détectée pendant une vérification approfondie, ce qui est précisément à quoi sert cette vérification.

Identifier avant de réparer
# quels groupes sont concernes
ceph health detail | grep -i inconsistent
rados list-inconsistent-pg vm-data

# le detail des objets en cause
rados list-inconsistent-obj 2.1a --format=json-pretty
Chercher la cause avant de lancer la réparation

La commande de réparation fait reprendre aux copies divergentes le contenu de la copie principale. C'est le bon geste quand une seule copie est fautive sur un disque identifié. Mais une erreur de cohérence est presque toujours le symptôme d'un disque qui se dégrade : regardez les compteurs SMART et les journaux du noeud concerné avant de réparer, sous peine de réparer en boucle un disque qu'il faut remplacer.

Réparer, une fois la cause comprise
ceph pg repair 2.1a
ceph -w

# verifier l'etat du disque suspect, sur le noeud concerne
smartctl -a /dev/nvme2n1
dmesg -T | grep -iE 'error|medium|reset'

Si les erreurs reviennent sur le même OSD, le disque est à remplacer : la procédure est détaillée dans la page remplacer un disque défaillant.

07Ce qui exige une action immédiate

SituationPourquoi c'est urgentPremier geste
Deux OSD absents dans le même domaine de défaillanceIl ne reste qu'une copieNe rien redémarrer, stabiliser
Écritures refusées pour cause de remplissageLe service est arrêtéLibérer de l'espace, voir 05
Groupes inactifs ou indisponiblesDes données sont inaccessiblesIdentifier les OSD responsables
Groupes incompletsRisque de perte définitiveNe pas détruire d'OSD, chercher de l'aide
Reconstruction figéeLa redondance ne revient pasChercher le blocage, voir 04
Erreurs de cohérence répétéesUn disque se dégradeSMART, puis remplacement
Le réflexe à ne pas avoir

Redémarrer les démons ou les noeuds pour voir si ça s'arrange. Sur un cluster déjà dégradé, chaque redémarrage retire temporairement une copie supplémentaire, et peut faire passer un groupe de données sous le seuil de sécurité. Diagnostiquez d'abord, agissez ensuite, et ne détruisez jamais un OSD sans que Ceph ait confirmé que c'est sans danger.

08Liste de contrôle

ÉtapeActionCommande
LireObtenir le code précis, pas la couleurceph health detail
LireVérifier s'il se passe quelque choseceph -s
TrierTransitoire ou bloqué : les compteurs bougent-ilswatch ceph -s
TrierUn OSD ou un noeud manque-t-ilceph osd tree
CapacitéRemplissage et équilibre entre OSDceph df, ceph osd df
CapacitéMarge de reconstruction suffisanteMoins de 75 % d'occupation
MatérielLatences anormales sur un OSDceph osd perf
MatérielÉtat SMART du disque suspectsmartctl -a
DrapeauxAucun drapeau de maintenance oubliéceph osd stat
IncidentsRapports de plantage lus avant archivageceph crash ls
AprèsRetour à HEALTH_OK confirméceph -s
AprèsCause consignée dans le dossierDocument d'exploitation
Ce qu'il faut retenir

Le jaune n'est pas une alarme, c'est une information. La question utile n'est pas de savoir si le cluster est en avertissement, mais si l'avertissement progresse vers le vert ou s'il est figé. Un avertissement qui dure plus d'une heure sans activité visible mérite qu'on l'ouvre ; un avertissement accompagné d'une reconstruction qui avance mérite surtout qu'on le laisse travailler.

Une plateforme Proxmox a exploiter sereinement

Nous exploitons des clusters Proxmox VE et Ceph en production pour des PME, des structures reglementees et des collectivites. Remplacement de noeud, montee de version, reprise d'une plateforme existante : nous intervenons au forfait comme en astreinte.