Dawan Proxmox VE — TSSR

Chapitre 4 — Cluster, Ceph et haute disponibilité

4. Ceph : pools, placement des données et résilience

Ceph est installé, ses moniteurs et ses OSD tournent. Il reste à en faire un stockage utilisable par les VM : un pool, et sa déclaration dans Proxmox. Puis à comprendre comment Ceph place et protège les données : l'algorithme CRUSH, le facteur de réplication et ses réseaux.

Nœud → Ceph sur pxe211 : HEALTH_OK, 3 OSD in et up, placement groups active+clean, 3 moniteurs et 3 managers

Le tableau de bord Nœud → Ceph une fois l'installation finie (cluster du lab, Ceph 20.2.4). En haut, HEALTH_OK et « No Warnings/Errors ». Au milieu, les OSD : 3 In, 3 Up, aucun Down ni Out ; et les PG, tous active+clean (l'anneau vert).

En bas, les Monitors et les Managers, un de chaque sur pxe211, pxe212 et pxe213. C'est la même information que ceph -s, présentée pour l'œil.

4.1 Créer un pool Ceph et l'intégrer à Proxmox

Un pool Ceph est un espace de stockage logique avec ses propres règles de réplication. Pour héberger des disques de VMs, on utilise le protocole RBD (Rados Block Device), qui expose des disques virtuels directement à partir du stockage objet Ceph.

Via l'interface graphique :

Nœud → Ceph → Pools → Create

Champ Valeur
Name ceph-vm
Size (réplication) 3
Min. Size 2
PG Autoscale on
Add as Storage ✓

Équivalent CLI :

Dans le Shell du nœud (interface web → votre nœud → Shell) :

# Créer un pool pour les disques de VMs
# --pg_autoscale_mode on : Ceph ajuste automatiquement le nombre de placement groups
# --application rbd : indique que ce pool sera utilisé pour les disques blocs
pveceph pool create ceph-vm --pg_autoscale_mode on --application rbd

# Ajouter ce pool comme stockage dans Proxmox
pvesm add rbd ceph-vm --pool ceph-vm --content images

# Vérifier que le stockage est actif
pvesm status

Résultat attendu :

Name          Type     Status           Total
ceph-vm      rbd      active     150000000

À partir de ce moment, vous pouvez créer des VMs dont les disques sont hébergés dans Ceph. Ces disques sont accessibles depuis tous les nœuds du cluster simultanément, ce qui rend possible la migration à chaud et la haute disponibilité.

Nœud → Ceph → OSD : osd.0, osd.1 et osd.2, un par nœud, bluestore, up et in, 70 Gio chacun

Nœud → Ceph → OSD range les OSD par nœud : osd.0 sur pxe211, osd.1 sur pxe212, osd.2 sur pxe213. Chacun est de type bluestore, marqué up et in, et dispose de 70 Gio — le disque sdb du nœud.

Nœud → Ceph → Pools : le pool interne .mgr et le pool ceph-vm, en 3/2, avec l'autoscaler activé

Nœud → Ceph → Pools : ceph-vm, créé ci-dessus, en 3/2 (trois copies, deux au minimum pour écrire), autoscaler on, règle replicated_rule. La ligne .mgr est un pool interne, créé par Ceph pour ses managers : on n'y touche pas.

Le pool et le stockage : deux objets différents

Créer le pool n'a fait qu'une chose : réserver un espace côté Ceph. Proxmox, lui, ne sait pas encore qu'il a le droit d'y déposer des disques.

Il lui faut pour cela un stockage de type RBD déclaré dans Datacenter → Storage, qui pointe vers ce pool. Sans cette déclaration, le pool existe et reste inutilisable : il n'apparaît nulle part au moment de créer un disque.

La case Add as Storage fait ce travail pour vous — comme l'option --add_storages en ligne de commande. Vérifiez-le :

Dans le Shell du nœud (interface web → votre nœud → Shell) :

pvesm status | grep rbd   # le stockage RBD doit être actif
grep -A 5 "^rbd:" /etc/pve/storage.cfg   # sa déclaration dans la configuration des stockages

Résultat attendu : une section rbd: ceph-vm avec la ligne pool ceph-vm. C'est elle, le stockage ; le pool est ce qu'elle désigne.

Quand faut-il le déclarer à la main ? Trois situations, et vous rencontrerez la dernière en entreprise :

  • la case a été décochée, ou le pool a été créé sans --add_storages ;
  • vous voulez un autre identifiant, d'autres types de contenu, ou restreindre le stockage à certains nœuds ;
  • le cluster Ceph est externe, hébergé ailleurs que sur vos nœuds. Dans ce cas il n'y a aucun pool à créer dans l'interface — on déclare seulement le stockage RBD, avec l'adresse des moniteurs et la clé d'accès.

Dans l'interface : Datacenter → Storage → Add → RBD.

Champ Valeur Ce que ça fait
ID ceph-vm Le nom du stockage dans Proxmox
Pool ceph-vm Le pool Ceph visé
Monitor(s) (laisser vide) Vide = le cluster Ceph local ; à renseigner pour un Ceph externe
User name admin L'utilisateur Ceph, admin en hyperconvergé
Content Disk image, Container Ce qu'on autorise à y ranger
Nodes (tous) Ceph étant partagé, laissez les trois

Dans le Shell du nœud (interface web → votre nœud → Shell) :

# Equivalent en ligne de commande
pvesm add rbd ceph-vm --pool ceph-vm --content images,rootdir
pvesm status   # vérifier qu'il est actif

Résultat attendu :

root@pxe211:~# pvesm add rbd ceph-vm --pool ceph-vm --content images,rootdir
root@pxe211:~# pvesm status
Name             Type     Status           Total            Used       Available        %
ceph-vm           rbd     active       314572800        18874368       295698432    6.00%
local             dir     active        98559220        22417684        71095996   22.75%
local-lvm     lvmthin     active       167772160        39267532       128504628   23.40%

Le stockage RBD apparaît sur tous les nœuds du cluster à la fois, sans qu'il faille répéter la commande ailleurs : la déclaration vit dans /etc/pve/storage.cfg, répliqué par pmxcfs.

La capacité annoncée est l'espace utile, après réplication. Avec le facteur 3 par défaut de Ceph, 300 Gio disponibles correspondent à 900 Gio de disques bruts. C'est le coût de la redondance, et il surprend souvent au premier calcul de dimensionnement.

--content images,rootdir limite ce pool aux disques de VM et de conteneurs. Un pool RBD ne peut pas héberger d'ISO ni de sauvegardes : ce sont des fichiers, et RBD expose des périphériques de bloc. Pour des fichiers sur Ceph, il faut CephFS, déclaré séparément.

Erreur fréquente : Dans un atelier avec du nested virtualization, les performances Ceph seront faibles car les disques sdb sont eux-mêmes des disques virtuels. Les erreurs de latence élevée (slow ops) sont normales dans ce contexte et ne doivent pas alarmer. En production, Ceph s'utilise sur des disques physiques dédiés, idéalement des SSDs NVMe pour les journaux.

4.2 CRUSH, l'algorithme de placement

Ceph n'a pas de serveur de métadonnées central : chaque client calcule lui-même où sont ses données, avec l'algorithme CRUSH (Controlled Replication Under Scalable Hashing). CRUSH s'appuie sur une carte de la topologie physique, la CRUSH map : centre de données, baies, hôtes, OSD.

CRUSH Map Ceph en arbre : la racine contient le datacenter Paris, qui contient rack-01 avec les hotes pxe211 (osd.0 et osd.1) et pxe212 (osd.2), et rack-02 avec l'hote pxe213 (osd.3)

Quand un pool a size=3, CRUSH place les trois répliques sur trois hôtes différents ; une règle de baie les placerait sur des baies différentes. ceph osd tree affiche cette hiérarchie.

4.3 Facteur de réplication et dimensionnement du cluster Ceph

Par défaut, Ceph crée les pools avec size=3 (3 répliques) et min_size=2 (minimum pour accepter les écritures). Chaque objet est stocké en 3 exemplaires, tolérant la perte simultanée d'un OSD.

Impact sur l'espace utile : avec size=3, seul 1/3 de l'espace brut est utilisable. 3 nœuds × 500 Go = 1500 Go bruts → 500 Go utiles. C'est le coût de la résilience.

Dans le Shell du nœud (interface web → votre nœud → Shell) :

# Vérifier le facteur de réplication d'un pool
ceph osd pool get ceph-vm size
# → size: 3

ceph osd pool get ceph-vm min_size
# → min_size: 2

# Voir la capacité totale (RAW vs AVAIL)
ceph df

Résultat attendu de ceph df :

--- RAW STORAGE ---
CLASS  SIZE     AVAIL    USED     RAW USED  %RAW USED
hdd    150 GiB  147 GiB  3.0 GiB   3.0 GiB       2.00
TOTAL  150 GiB  147 GiB  3.0 GiB   3.0 GiB       2.00

Pour calculer l'espace utile : (150 GiB bruts) / 3 (réplication) × 80% (marge opérationnelle) = 40 GiB utilisables. Les 20% de marge absorbent les rééquilibrages lors des opérations de maintenance.

Règle de dimensionnement : ne jamais remplir un cluster Ceph au-delà de 80% de son espace utile. Les seuils de Ceph sont ensuite rapides : à 85 % d'un OSD (nearfull), le cluster passe en HEALTH_WARN ; à 95 % (full), il bloque toutes les écritures pour protéger l'intégrité des données.

Et la marge de 20 % n'est pas du confort : quand un nœud tombe, ses données sont reconstruites sur les OSD restants, qui doivent avoir la place de les recevoir.

4.4 Réseau public et réseau cluster

En production, Ceph sépare deux trafics. Le réseau public relie les clients (VM, Proxmox) et les OSD ; le réseau cluster relie les OSD entre eux, pour la réplication et la recopie après une panne. Les séparer protège les performances des VM pendant une recopie massive.

Les deux se fixent à l'initialisation de Ceph (--network et --cluster-network), et se lisent dans Nœud → Ceph → Configuration.

À retenir : un pool RBD porte les disques de VM et de conteneurs (pas d'ISO ni de sauvegardes). CRUSH calcule l'emplacement des données sans serveur de métadonnées.

size=3 / min_size=2 : trois copies, écritures acceptées tant que deux restent ; un tiers de l'espace brut est utile, et on ne dépasse pas 80 %. Les réseaux Ceph se fixent dès l'initialisation.