Aller au contenu

Mise à niveau de version Ceph

Day 2 · ExploiterNiveau 3 · MaîtriserRunbookRédigé · à valider en lab

Objectif : passer Ceph d'une version majeure à la suivante sans interruption de service, en redémarrant les démons dans l'ordre imposé : MON, puis MGR, puis OSD (un nœud à la fois), puis MDS, sous drapeau noout. Exemple de référence : Reef 18.2 → Squid 19.2 (étape obligatoire sur PVE 8 avant de passer à PVE 9). Le passage Squid 19.2 → Tentacle 20.2 sur PVE 9.1+ suit le même schéma. Une mise à niveau majeure de Ceph est réalisée par le MSP en N2 et N3 ; en N1, le client l'exécute avec le conseil du support. Les mises à jour mineures (19.2.x) suivent RB-08.

Avant de toucher la prod

  • Lire le guide officiel de la version visée : Ceph Reef to Squid ou Ceph Squid to Tentacle, et les notes de version Ceph.
  • Versions minimales atteintes (pveversion -v) : pour Reef → Squid, PVE 8.2+, pve-manager 8.2.8+, Ceph 18.2.4-pve3+ ; pour Squid → Tentacle, PVE 9.1+, pve-manager 9.1.4+, Ceph 19.2.3-pve3+.
  • ceph -s en HEALTH_OK, 100 % active+clean, aucun RECENT_CRASH non expliqué.
  • ceph versions : tous les démons sur la même version mineure de départ.
  • Sauvegardes PBS récentes et vérifiées des VMs critiques ; synchronisation MSP à jour.
  • Fenêtre de maintenance validée ; dépôt cible accessible (abonnement actif pour enterprise).
  • Testé au préalable sur un cluster de lab, ou validé par le MSP.

Étapes

Les commandes ceph … se lancent une seule fois, depuis n'importe quel nœud. Les commandes sed, apt et systemctl se lancent sur chaque nœud.

1. Poser le drapeau noout

Nœud → Ceph → OSD → Manage Global Flags → cocher noout → Apply.

ceph osd set noout

2. Changer le dépôt Ceph et mettre à jour les paquets (chaque nœud)

# Reef → Squid (PVE 8) : fichier ceph.list (format une ligne) ou ceph.sources (deb822)
sed -i 's/reef/squid/' /etc/apt/sources.list.d/ceph.list
# Squid → Tentacle (PVE 9) : format deb822
sed -i 's/squid/tentacle/' /etc/apt/sources.list.d/ceph.sources

apt update
apt full-upgrade

Les démons continuent de tourner avec l'ancienne version tant qu'ils ne sont pas redémarrés. Une erreur 401 sur le dépôt enterprise se corrige par pvesubscription update --force.

3. Redémarrer les moniteurs, un nœud à la fois

Nœud → Ceph → Monitor → sélectionner le MON de pve01 → Restart. Attendre le quorum complet, puis pve02, puis pve03.

systemctl restart ceph-mon.target        # sur pve01, puis pve02, puis pve03
ceph -s                                  # quorum complet avant de passer au suivant
ceph mon dump | grep min_mon_release     # en fin d'étape : 19 (squid) ou 20 (tentacle)

4. Redémarrer les managers

systemctl restart ceph-mgr.target           # sur chaque nœud portant un MGR
ceph -s                                     # mgr: un actif, des standbys

5. Redémarrer les OSD, un nœud à la fois

Nœud → Ceph → OSD → sélectionner chaque OSD du nœud → Restart. Attendre le retour de tous les PG en active+clean (seul noout reste signalé) avant le nœud suivant.

systemctl restart ceph-osd.target       # sur pve01
watch ceph -s                           # attendre active+clean, puis pve02, puis pve03
ceph versions                           # en fin d'étape : tous les osd en 19.2.x (ou 20.2.x)

6. Verrouiller la nouvelle version des OSD

Uniquement quand tous les OSD tournent la nouvelle version. Sur Reef → Squid, le guide le place avant les MDS ; sur Squid → Tentacle, après.

ceph osd require-osd-release squid          # ou tentacle

7. Mettre à niveau les MDS (si CephFS)

ceph fs ls
ceph fs get cephfs | grep -E 'max_mds|allow_standby_replay'   # noter les valeurs
ceph fs set cephfs allow_standby_replay false
ceph fs set cephfs max_mds 1                 # si plusieurs MDS actifs
systemctl stop ceph-mds.target               # sur les nœuds des MDS en attente
systemctl restart ceph-mds.target            # sur le nœud du dernier MDS actif
systemctl start ceph-mds.target              # relancer les MDS en attente
ceph fs set cephfs max_mds <valeur notée>
ceph fs set cephfs allow_standby_replay <valeur notée>

8. Retirer noout

ceph osd unset noout                         # ou GUI : Manage Global Flags

Vérifications

ceph versions          # mon, mgr, osd, mds : une seule version, 19.2.x (ou 20.2.x)
ceph -s                # HEALTH_OK, aucun drapeau noout
ceph osd dump | grep require_osd_release    # require_osd_release squid (ou tentacle)
ceph crash ls-new      # vide

Migrer à chaud une VM de test entre deux nœuds et vérifier ses I/O.

Rollback

Il n'existe pas de retour arrière vers l'ancienne version une fois les MON redémarrés en nouvelle version, et encore moins après require-osd-release. Avant l'étape 3, on peut revenir au dépôt d'origine sans impact (les démons tournent encore l'ancienne version). Après, en cas de problème : laisser noout, ne pas poursuivre sur les autres nœuds, ouvrir un ticket P1/P2. La protection ultime reste la sauvegarde PBS et sa copie au MSP.

Pièges vus en support

  • Redémarrer les OSD avant les MON : ordre interdit, risque de démons incompatibles.
  • Redémarrer les OSD de deux nœuds en même temps : PG inactifs, VMs figées.
  • Lancer require-osd-release alors qu'un OSD tourne encore l'ancienne version : il ne pourra plus rejoindre le cluster.
  • Oublier ceph osd unset noout : les futures pannes de disque ne déclencheront plus de reconstruction.
  • Lancer pve8to9 avec Ceph encore en Reef : PVE 9 exige Squid au minimum, mettre Ceph à niveau d'abord.
  • Squid → Tentacle : sur des OSD créés en Octopus ou avant, la métadonnée (colonne META de ceph osd df) peut gonfler ; consulter la section Known issues du wiki.

Quand ouvrir un ticket iTop

Planification de la mise à niveau (contrat N2/N3, ou conseil en N1) : P4, au moins deux semaines avant la fenêtre. MON qui ne rejoint pas le quorum, OSD qui ne redémarre pas, PG bloqués pendant l'opération : P1. Joindre ceph -s, ceph versions, ceph health detail, pveversion -v, journalctl -u ceph-osd@<id> -n 200.

Ouvrir un ticket iTop

Pour aller plus loin