Règles CRUSH : classes de disques, failure domain host / rack¶
Objectif : placer chaque pool sur la bonne classe de disques (par exemple ceph-vm sur NVMe, un pool d'archives sur HDD) et choisir l'unité de panne que Ceph ne doit jamais charger de deux copies : l'hôte par défaut, le rack si vos nœuds sont répartis dans plusieurs baies ou salles. Modifier la carte ou les règles CRUSH d'un cluster en production déplace des données : c'est une opération à confier au MSP (N2 et N3 ; en N1, sur devis). Cette page vous permet de comprendre et de préparer la demande.
Avant de toucher la prod
-
ceph -senHEALTH_OK, 100 %active+clean, aucun OSD au-delà de 70 % (ceph osd df tree). - Sauvegarde de la carte CRUSH actuelle (commande à l'étape 1).
- Fenêtre de maintenance prévue : un changement de règle peut déplacer la totalité d'un pool.
- Assez d'OSD de la classe cible sur au moins
sizehôtes (ou racks) différents. - Validation MSP obtenue via ticket iTop.
Étapes¶
1. Observer et sauvegarder¶
ceph osd getcrushmap -o /root/crushmap-$(date +%F).bin # sauvegarde binaire
ceph osd crush tree --show-shadow # arbre avec les classes (default~ssd, default~nvme…)
ceph osd crush class ls # classes présentes
ceph osd crush rule ls # règles existantes (replicated_rule par défaut)
ceph osd pool ls detail # règle utilisée par chaque pool (crush_rule N)
2. Corriger une classe de disque mal détectée¶
3. Créer une règle par classe¶
La règle se crée en CLI. Syntaxe : ceph osd crush rule create-replicated <nom> <racine> <failure-domain> <classe>.
ceph osd crush rule create-replicated replicated-nvme default host nvme
ceph osd crush rule create-replicated replicated-hdd default host hdd
4. Affecter la règle aux pools¶
Autoscaler et classes
Proxmox l'indique : avec l'autoscaler de PG, tous les pools doivent utiliser des règles du même type, soit toutes avec une classe, soit aucune. Un pool resté sur replicated_rule (souvent .mgr) chevauche les racines par classe et l'autoscaler cesse de calculer (ceph osd pool autoscale-status vide ou en erreur). Basculez donc aussi .mgr et les pools CephFS.
5. Failure domain rack (nœuds répartis dans plusieurs baies)¶
Le rack devient l'unité de panne : il faut au moins autant de racks que de copies (3 racks pour un réplica 3, 4 pour pouvoir reconstruire).
ceph osd crush add-bucket rack1 rack
ceph osd crush add-bucket rack2 rack
ceph osd crush add-bucket rack3 rack
ceph osd crush move rack1 root=default
ceph osd crush move rack2 root=default
ceph osd crush move rack3 root=default
ceph osd crush move pve01 rack=rack1
ceph osd crush move pve02 rack=rack2
ceph osd crush move pve03 rack=rack3
ceph osd crush rule create-replicated replicated-rack-nvme default rack nvme
ceph osd pool set ceph-vm crush_rule replicated-rack-nvme
6. Tester une règle avant de l'appliquer (recommandé)¶
ceph osd crush rule dump replicated-rack-nvme | grep rule_id
ceph osd getcrushmap -o /tmp/crush.bin
crushtool -i /tmp/crush.bin --test --rule <rule_id> --num-rep 3 --show-bad-mappings
# Aucune ligne "bad mapping" attendue
Vérifications
ceph osd pool get ceph-vm crush_rule # crush_rule: replicated-nvme
ceph osd crush tree # hôtes sous les bons racks
ceph osd pool autoscale-status # tous les pools listés
ceph -s # retour à 100 % active+clean, HEALTH_OK
ceph pg ls-by-pool ceph-vm | head # colonne UP : OSD de la bonne classe, sur 3 hôtes ou racks distincts
Rollback
Remettre l'ancienne règle sur le pool (ceph osd pool set ceph-vm crush_rule replicated_rule) : les données reviennent à leur placement précédent, avec un nouveau déplacement. En dernier recours, réinjecter la carte sauvegardée : ceph osd setcrushmap -i /root/crushmap-<date>.bin, uniquement avec le MSP.
Pièges vus en support
- Règle
rackavec seulement 2 racks pour un réplica 3 : la 3e copie ne trouve pas de place, PGundersizeden permanence. - Changer la règle d'un pool de 20 To en pleine journée : reconstruction massive, latences des VMs multipliées.
- SSD SATA et NVMe dans la même classe
ssd: le pool est tiré vers la performance du plus lent. .mgroublié surreplicated_rule: l'autoscaler ne fonctionne plus.- Déplacer un hôte dans un rack puis réinstaller le nœud : vérifier après redémarrage des OSD que l'hôte est resté sous son rack (
ceph osd crush tree).
Quand ouvrir un ticket iTop
Toute création ou modification de règle CRUSH, ajout de racks, changement de classe en production : demande planifiée P4 avec la sortie de ceph osd crush tree --show-shadow et ceph osd pool ls detail. PG undersized ou remapped qui ne se résorbent pas après un changement : P2.