La performance et la stabilité de Ceph reposent sur des chemins réseau rapides et fiables entre les moniteurs, gestionnaires, OSD, serveurs de métadonnées et clients. Lorsque le réseau faillit, les symptômes vont des opérations lentes et groupes de placement dégradés à la perte de quorum des moniteurs. Ce guide vous donne une méthode sûre et progressive pour diagnostiquer et corriger les problèmes de DNS, ports, routage, pare-feu et MTU avec des commandes concrètes et des résultats prévisibles.
Note sur la portée : Toutes les adresses IP, noms d'hôtes et sous-réseaux dans cet article sont des exemples construits pour l'illustration. Remplacez-les par les valeurs de votre environnement.
Introduction
Vous allez :
- Établir un inventaire propre des versions et de la topologie réseau.
- Valider le DNS et la résolution de noms sans risquer de mouvement de données.
- Confirmer que les ports requis sont ouverts et en écoute.
- Tester la connectivité et le MTU de bout en bout sur les réseaux public et cluster.
- Identifier les problèmes de routage et de pare-feu et les corriger proprement avec possibilités de retour arrière.
- Vérifier le succès avec des contrôles observables de santé Ceph et réseau.
Public visé : développeurs, consultants DevOps et équipes de startups qui exploitent ou soutiennent des clusters Ceph sur Linux (y compris sur des plateformes comme Proxmox) et qui ont besoin d'un flux de dépannage pratique et à faible risque.
Inventaire des versions et de l'environnement
Avant de modifier quoi que ce soit, capturez l'état actuel. Cela permet de comparer avant/après et de récupérer rapidement si nécessaire.
Prérequis :
- Accès shell à au moins un nœud moniteur et un nœud OSD avec sudo.
- Familiarité de base avec le CLI Ceph et les commandes réseau Linux.
- Une fenêtre de maintenance si vous prévoyez de modifier pare-feu, MTU ou routage.
Enregistrez ces éléments sur chaque nœud :
- Versions Ceph et santé
ceph -s
ceph health detail
ceph versions
ceph mon dump -f json-pretty | jq '.mons[] | {name, public_addrs}'
Attendu :
- HEALTH_OK ou des messages WARN clairs que vous pouvez trier.
- Adresses des moniteurs qui correspondent à votre réseau public prévu.
- Identité d'hôte et DNS
hostname -f
hostname -I
getent hosts $(hostname -f)
getent ahosts $(hostname -f)
Attendu :
- Le FQDN se résout vers l'IPv4/IPv6 correcte utilisée par Ceph.
- Interfaces, IPs et MTU
ip -br a
ip -br link
ethtool -k eth0 | grep -E 'tso|gso|gro'
Attendu :
- Adresses correctes sur les réseaux public et (si utilisé) cluster.
- Valeurs MTU cohérentes entre nœuds pairs.
- Routage
ip route
ip rule
sysctl net.ipv4.conf.all.rp_filter
sysctl net.ipv4.ip_forward
Attendu :
- Routes déterministes vers les sous-réseaux pairs ; rp_filter=1 peut supprimer les chemins de retour asymétriques.
Utilisez l'outil géré par votre distribution :
- Pare-feu
# firewalld
sudo firewall-cmd --state || true
sudo firewall-cmd --list-all || true
# ufw
sudo ufw status verbose || true
# nftables
sudo nft list ruleset || true
Attendu :
- Autorisations explicites pour les ports Ceph entre nœuds du cluster.
- Synchronisation horaire (affecte les symptômes réseau comme les timeouts)
timedatectl
chronyc sources -v || true
Attendu :
- Horloges synchronisées sur tous les nœuds.
Ports des services Ceph (référence)
Utilisez ce tableau pour confirmer les sockets en écoute et les autorisations pare-feu. Ajustez selon vos spécificités de déploiement.
| Service | Protocole | Ports par défaut | Notes |
|---|---|---|---|
| MON (msgr v2) | TCP | 3300 | Défaut moderne ; assurez-vous qu'il est ouvert cluster-wide |
| MON (msgr v1) | TCP | 6789 | Hérité ; peut être désactivé ou dual-stack avec v2 |
| OSD | TCP | 6800-7300 | Plage selon nombre d'OSD et liaison |
| MGR | TCP | 6800-7300 | Partage la plage avec OSD/MDS sur l'hôte |
| MDS | TCP | 6800-7300 | Serveurs de métadonnées CephFS |
| RGW (radosgw) | TCP | 7480 ou 80/443 | Frontend peut varier selon proxy/ingress |
Chemin de configuration sûr
Gardez la première itération étroite, mesurable et facile à inspecter localement avant déploiement. L'objectif est d'isoler les couches réseau sans déclencher de mouvements de données inutiles.
Si vous attendez de brefs flaps d'OSD pendant les tests, posez une garde et rappelez-vous de la retirer :
- Geler les mouvements de données indésirables (temporaire)
ceph osd set noout
# Optionnel si vous attendez de gros changements de lien ; utilisez avec parcimonie
# ceph osd set norecover
# ceph osd set nobackfill
Vérification :
ceph osd dump | grep flags
Retour arrière :
ceph osd unset noout
# ceph osd unset norecover
# ceph osd unset nobackfill
- Sauvegarder les configs localement
sudo cp -a /etc/ceph/ceph.conf /etc/ceph/ceph.conf.bak-$(date -Iseconds)
sudo cp -a /etc/sysctl.conf /etc/sysctl.conf.bak-$(date -Iseconds) || true
- Limiter les changements
- Testez la reachabilité DNS et ports d'abord. Aucun redémarrage de service requis.
- Changez une variable à la fois (ex. MTU), vérifiez, puis continuez.
- Préférez les autorisations pare-feu additives aux basculements de politique larges.
- Planifier un retour arrière rapide
- Gardez des notes terminal de chaque commande exécutée.
- Pour les réglages réseau, connaissez le MTU/passerelle précédent et comment revenir.
- Testez sur un seul nœud OSD non critique avant changements cluster-wide.
Vérification et diagnostics
Cette section fournit des contrôles concrets, sorties attendues et interprétation des échecs.
DNS et résolution de noms
Une résolution d'hôtes cohérente évite les mauvaises routes subtiles, surtout sur clusters dual-stack.
- Résoudre le FQDN vers enregistrements A/AAAA
dig +short A mon1.ceph.example.com
dig +short AAAA mon1.ceph.example.com
Attendu :
- IPs correspondant à ce que
ceph mon dumpmontre pour le moniteur.
- DNS inverse (optionnel mais utile)
dig +short -x 10.10.10.11
Attendu :
- Retourne le FQDN que vous utilisez de façon cohérente dans les configs.
- Chemin systemd-resolved ou nswitch
resolvectl dns
resolvectl query mon1.ceph.example.com
getent hosts mon1.ceph.example.com
Attendu :
- Même chemin de réponse sur tous les nœuds. Si les nœuds divergent, alignez résolveurs ou ordre
/etc/nsswitch.conf.
Corrections :
- Standardisez
/etc/hostsuniquement pour tests d'urgence ; ne laissez pas d'entrées host-only permanentes divergent du DNS. - Assurez-vous que les domaines de recherche ne causent pas de collisions accidentelles de noms courts.
Écoute des ports et reachabilité
- Confirmer les listeners sur chaque nœud
ss -ltnp | grep -E ':(3300|6789|68[0-9]{2,3}|7480)'
Attendu :
- MONs en écoute sur 3300 (et éventuellement 6789).
- OSD/MGR/MDS en écoute dans la plage 6800-7300.
- Tester depuis les nœuds pairs
# Depuis mon2 vers mon1
nc -vz mon1.ceph.example.com 3300
nc -vz mon1.ceph.example.com 6789 || true
# Depuis osd3 vers osd5 (port exemple construit)
nc -vz osd5.ceph.example.com 6802
Attendu :
- Messages "Connection succeeded\). Timeouts ou refus indiquent problèmes pare-feu ou listener.
- Validation pare-feu
- Exemple firewalld (autoriser sur zone trusted) :
sudo firewall-cmd --zone=trusted --add-port=3300/tcp --permanent
sudo firewall-cmd --zone=trusted --add-port=6789/tcp --permanent
sudo firewall-cmd --zone=trusted --add-port=6800-7300/tcp --permanent
sudo firewall-cmd --reload
- Exemple ufw :
sudo ufw allow 3300/tcp comment 'Ceph MON v2'
sudo ufw allow 6789/tcp comment 'Ceph MON v1'
sudo ufw allow 6800:7300/tcp comment 'Ceph OSD/MGR/MDS'
Vérification :
sudo nft list ruleset | grep -E '3300|6789|6800'
Routage et chemins asymétriques
- Tracer le chemin
# IPv4
mtr -wrc 10 mon1.ceph.example.com
# IPv6
mtr -wrc 10 -6 mon1.ceph.example.com
Attendu :
- Chemin stable avec faible perte. Chemins aller/retour très différents peuvent déclencher des drops rp_filter.
- Vérifier le filtrage de chemin inverse
sysctl net.ipv4.conf.all.rp_filter
sysctl net.ipv4.conf.default.rp_filter
Interprétation :
- Valeur 1 (strict) peut supprimer les réponses routées asymétriquement. Si vous routez intentionnellement en asymétrique sur réseaux de stockage, envisagez 2 (lâche) pour l'interface spécifique :
echo 'net.ipv4.conf.eth1.rp_filter=2' | sudo tee /etc/sysctl.d/60-ceph-rpfilter.conf
sudo sysctl --system
Retour arrière :
sudo rm /etc/sysctl.d/60-ceph-rpfilter.conf
sudo sysctl -w net.ipv4.conf.eth1.rp_filter=1
MTU et fragmentation
Un désaccord MTU peut bloquer les heartbeats OSD et opérations clients.
- Vérifier le MTU sur les pairs
ip -br link | awk '{print $1, $3}'
- Sonner le MTU de chemin (exemple IPv4 pour MTU 9000)
ping -c 3 -M do -s 8972 osd5.ceph.example.com
Attendu :
Note : 8972 = 9000 MTU moins 28 octets pour en-têtes IP/ICMP.
- Pas de fragmentation requise. Si échec, alignez MTU sur tout le chemin ou utilisez 1500 standard.
Symptômes de santé Ceph indiquant le réseau
Exécutez sur un nœud moniteur :
ceph -s
ceph health detail
ceph osd tree
Messages couramment liés au réseau :
OSD_DOWNouOSD_TIMEOUT: souvent lien, MTU, pare-feu ou route.MON_DOWNou tempêtes d'élection : reachabilité port moniteur, sync horaire, DNS.SLOW_OPSou PGs dégradés avec beaucoup de remappés : perte de paquets intermittente.
Inspection au niveau paquet (dernier recours pendant une fenêtre)
Utilisez uniquement quand vous ne pouvez isoler le problème avec les étapes précédentes.
sudo tcpdump -ni eth1 tcp port 3300 or tcp port 6789 or portrange 6800-7300
Attendu :
- SYN/SYN-ACK complet. SYN répétés sans SYN-ACK indiquent filtrage ou pas de listener.
Modes de défaillance et récupération
Utilisez ce mapping pour aller du symptôme à la correction rapidement.
| Symptôme | Cause probable | Vérif rapide | Correction sûre |
|---|---|---|---|
| OSDs flap in/out | MTU mismatch ou perte paquets | ping -M do -s 8972 pair | Aligner MTU bout en bout ou fixer 1500 uniformément |
| Impossible former quorum MON | Port bloqué ou DNS erroné | nc -vz monX 3300 et dig A/AAAA monX | Ouvrir 3300/tcp et corriger enregistrements DNS |
| Ops lentes avec pics | Routage asymétrique, rp_filter | mtr les deux sens ; rp_filter | Mettre rp_filter=2 sur iface stockage ou corriger routes |
| Certains nœuds IPv6 seulement | Config dual-stack incomplète | ceph mon dump vs ip -6 a | Aligner cluster sur IPv4 ou dual-stack complet |
| Auth client bloque | Pare-feu en bordure | nc -vz rgwX 7480 | Autoriser ports RGW ou proxy correctement |
| Timeouts intermittents | Déséquilibre hachage LACP | cat /proc/net/bonding/bond0 | Utiliser hash couche 3+4 ou NIC unique pour trafic Ceph |
| NAT dans le chemin | Pairs Ceph derrière NAT | traceroute montre NAT | Retirer NAT entre nœuds cluster |
| Rôles réseau erronés | public_network/cluster_network mélangés | Inspecter ceph.conf et routes | Corriger réseaux et redémarrer daemons affectés |
Recettes de récupération
- Corriger le DNS proprement
- Corrigez enregistrements A/AAAA ou entrées host sur un nœud de test isolé d'abord.
- Vérifiez avec
digetresolvectlsur tous les nœuds. - Aucun redémarrage daemon n'est nécessaire si le monmap utilise des IPs. Si vous avez changé noms ou adresses moniteurs dans clusters configuration-only, planifiez un redémarrage contrôlé des moniteurs un par un.
- Rouvrir les ports
- Appliquez règles pare-feu ciblées comme montré plus haut.
- Vérifiez avec
nc -vzdepuis tous les pairs. - Persistez règles et documentez.
- Aligner le MTU
- Si jumbo MTU, assurez-vous que switches et NICs correspondent. Sinon, mettez toutes interfaces stockage à 1500 pour cohérence de base :
sudo ip link set dev eth1 mtu 1500
- Rendez persistant via votre outil config réseau de distribution.
- Vérifiez avec
ping -M do -s 1472.
- Corriger le routage
- Ajoutez route explicite pour sous-réseau cluster si trafic prenait passerelle par défaut :
sudo ip route add 10.20.0.0/24 dev eth1 proto static
- Pour routage par politique avec interfaces multiples, assurez chemins retour symétriques avec
ip ruleet tables par interface. - Si rp_filter bloquait trafic, mettez mode lâche sur interface stockage seulement et documentez.
- Plan de retour arrière
- Si un changement dégrade la santé, revenez immédiatement sur la dernière étape : restaurez MTU/passerelle précédent, retirez dernière règle pare-feu, ou supprimez le drop-in sysctl de test et rechargez.
- Confirmez avec
ceph -set tests de reachabilité ciblés.
Liste de contrôle opérations
Utilisez pendant incidents ou validation post-changement.
- Ligne de base
- [ ]
ceph -saccessible et rapporte messages santé. - [ ]
ceph mon dumpmontre adresses attendues. - [ ] Temps synchronisé (
timedatectl).
- DNS
- [ ]
dig A/AAAA hôteretourne IPs intentionnées. - [ ]
getent hostscohérent sur tous nœuds. - [ ] Aucune entrée
/etc/hostsobsolète laissée derrière.
- Ports et listeners
- [ ]
ss -ltnpmontre MON sur 3300 (et optionnellement 6789). - [ ] OSD/MGR/MDS écoutent dans 6800-7300.
- [ ]
nc -vzréussit entre pairs sur ports requis.
- Pare-feu
- [ ] Règles autorisent 3300, 6789, 6800-7300 entre nœuds cluster.
- [ ] Règles persistées et documentées.
- Routage et MTU
- [ ]
mtrmontre chemins stables, symétriques. - [ ] rp_filter approprié pour votre routage.
- [ ] MTU aligné bout en bout ;
ping -M dopasse.
- Vérification Ceph
- [ ] Aucun nouveau flap OSD pendant et après changements.
- [ ]
ceph health detaillibre d'avertissements réseau. - [ ] Si utilisées, retirez garde-fous :
ceph osd unset noout(et autres).
Exemples pratiques
Ces exemples bout en bout montrent comment appliquer les étapes. Toutes valeurs sont des exemples construits.
Exemple 1 : Quorum MON perdu après changement DNS
Symptômes : ceph -s depuis nœud survivant montre 1/3 mons dans quorum ; autres oscillent.
Étapes :
- Vérifier résolution :
dig +short A mon2.ceph.example.com
getent hosts mon2.ceph.example.com
Observé : mon2 résout maintenant vers 10.10.20.15, mais monmap montre 10.10.10.15.
- Corriger enregistrement DNS vers 10.10.10.15. Purger caches (
resolvectl flush-cachessi applicable).
- Vérifier reachabilité :
nc -vz mon2.ceph.example.com 3300
- Confirmer récupération quorum :
ceph -s
Attendu : Tous moniteurs rejoignent quorum ; santé s'améliore.
Retour arrière : Si propagation DNS retardée, utilisez entrée /etc/hosts temporaire sur nœuds affectés, puis retirez-la une fois DNS corrigé.
Exemple 2 : Flaps OSD dus à mismatch MTU
Symptômes : Événements répétés OSD_DOWN/UP et ops lentes ; switches ont récemment activé jumbo frames.
Étapes :
- Vérifier MTU sur pairs :
ip -br link | grep eth1
Observé : Certains nœuds à 9000, autres à 1500.
- Choisir base sûre (1500) pour restaurer stabilité :
sudo ip link set dev eth1 mtu 1500
- Vérifier bout en bout avec
ping -M do -s 1472 osdX.
- Confirmer stabilité :
ceph -s
ceph health detail
Attendu : OSD arrêtent de flapper ; santé se stabilise.
Retour arrière : Si performance régresse plus tard, réintroduisez jumbo MTU seulement après validation que chaque saut le supporte et mise à jour cohérente de tous nœuds.
Exemple 3 : Routage asymétrique casse heartbeats OSD
Symptômes : OSD sur sous-réseau 10.20.0.0/24 timeout intermittent ; trafic retour prend passerelle par défaut sur certains nœuds.
Étapes :
- Confirmer asymétrie chemin :
mtr -wrc 10 osd8.ceph.example.com
mtr -wrc 10 osd3.ceph.example.com
- Ajouter route explicite sur nœuds affectés :
sudo ip route add 10.20.0.0/24 dev eth1 proto static
- Si encore drops, mettre rp_filter lâche interface-spécifique :
echo 'net.ipv4.conf.eth1.rp_filter=2' | sudo tee /etc/sysctl.d/60-ceph-rpfilter.conf
sudo sysctl --system
- Vérifier avec
mtrà nouveau et surveiller santé Ceph.
Retour arrière : Retirez la route ou le drop-in sysctl s'il introduit flux inattendus.
Conclusion
Un réseau Ceph fiable vient d'un inventaire discipliné, de tests ciblés et de petits changements réversibles. Commencez par confirmer DNS et ports requis, puis vérifiez symétrie routage et alignement MTU. Utilisez règles pare-feu ciblées et changements sysctl par interface plutôt que basculements de politique larges. Après chaque changement, validez avec nc -vz, mtr, ping -M do et ceph -s. Si une étape dégrade la santé, annulez-la immédiatement et réévaluez la dernière variable changée.
En suivant l'inventaire, diagnostics et étapes de récupération ici, vous pouvez restaurer le quorum moniteur, arrêter le flapping OSD et éliminer les ops lentes causées par le réseau avec confiance. Gardez la liste de contrôle opérations à portée de main, et standardisez ces vérifications dans votre maintenance de routine pour que les futurs incidents se résolvent plus vite et plus sûrement.