Aller au contenu
medium

Stockage distribué : comprendre les concepts et choisir sa solution

22 min de lecture

Ce guide vous aide à choisir la bonne solution de stockage distribué pour votre infrastructure. Vous apprendrez à distinguer les trois types de stockage (objet, fichiers, blocs), à comprendre la réplication et l’erasure coding, puis à sélectionner la solution open source adaptée — MinIO, Ceph, Garage, Longhorn, OpenEBS ou autre — en fonction de votre contexte (nombre de nœuds, type d’accès, budget). Ce guide couvre les concepts, pas l’installation : chaque solution a son guide dédié avec un lab complet.

  • Trois types de stockage : objet (S3), fichiers (NFS/POSIX), blocs (iSCSI/RBD)
  • Réplication vs erasure coding : quand utiliser chaque stratégie
  • Cohérence des données : compromis CAP, read-after-write, verrous POSIX
  • Solutions open source : positionnement de chaque outil par type
  • Kubernetes et stockage : PVC, StorageClasses, CSI drivers
  • Guide de décision : choisir en 3 questions

Un serveur de fichiers classique (NFS sur une seule machine, NAS dédié) fonctionne très bien pour de petites équipes. Mais dès que les exigences augmentent, trois problèmes apparaissent :

Un disque dur a une durée de vie moyenne de 3 à 5 ans. Dans un datacenter de 1 000 disques, il est statistiquement certain qu’un disque tombe chaque semaine. Si vos données sont sur une seule machine, chaque panne est un incident. Le stockage distribué maintient plusieurs copies (ou fragments) des données sur des serveurs différents : quand un nœud tombe, les autres continuent de servir les données.

Avec un serveur unique, augmenter la capacité signifie remplacer les disques par de plus gros (scalabilité verticale) — coûteux et limité. Le stockage distribué permet d’ajouter des nœuds au cluster pour augmenter la capacité et les performances (scalabilité horizontale). Pas besoin de tout migrer.

Un seul serveur a un débit réseau et disque fini. En distribuant les données, les clients lisent et écrivent sur plusieurs nœuds en parallèle. C’est le principe derrière les performances de systèmes comme Ceph ou MinIO : le débit agrégé du cluster dépasse largement celui d’un serveur isolé.

Tous les systèmes de stockage distribué ne fonctionnent pas de la même manière. Ils se distinguent par la façon dont les applications accèdent aux données. Trois grandes familles coexistent, chacune optimisée pour un usage différent.

Vue d'ensemble des 3 types de stockage distribué

Stockage objet : API HTTP et données non structurées

Section intitulée « Stockage objet : API HTTP et données non structurées »

Le stockage objet gère les données sous forme d’objets identifiés par une clé unique, accompagnés de métadonnées personnalisées. L’accès se fait via une API HTTP — le plus souvent compatible avec le protocole S3 d’Amazon, devenu le standard de facto.

Analogie : imaginez un vestiaire numéroté. Vous déposez un objet (fichier + métadonnées) et recevez un ticket (identifiant unique). Pour le récupérer, vous présentez le ticket — pas besoin de savoir dans quel casier il est rangé physiquement.

Contrairement au stockage de fichiers, un objet ne peut pas être modifié partiellement : on remplace l’objet entier. Cette contrainte simplifie considérablement la gestion de la cohérence dans un système distribué, ce qui explique l’excellente scalabilité du stockage objet.

Cas d’usage typiques :

  • Backups et archives : sauvegardes Veeam, Restic, Velero vers un bucket S3
  • Médias et contenus statiques : images, vidéos, fichiers téléchargeables
  • Data lakes : données brutes pour le machine learning ou l’analytique
  • Artefacts CI/CD : images Docker, packages, binaires de build

Quand choisir le stockage objet ? Vos applications utilisent une API HTTP/S3, vous stockez des fichiers qu’on lit/écrit en entier (pas de modification partielle), et vous avez besoin d’une scalabilité importante.

Stockage de fichiers : arborescence et compatibilité POSIX

Section intitulée « Stockage de fichiers : arborescence et compatibilité POSIX »

Le stockage de fichiers distribué présente une arborescence classique (répertoires et fichiers), accessible via des protocoles réseau comme NFS, SMB ou FUSE. Les applications existantes fonctionnent sans modification grâce à la compatibilité POSIX : elles voient un répertoire monté comme un disque local.

Analogie : c’est un serveur de fichiers classique dont le contenu est réparti sur plusieurs machines. L’utilisateur voit un seul disque partagé (/mnt/data), sans savoir que les fichiers sont dispersés sur le cluster.

La sémantique POSIX implique la gestion de verrous, de permissions et de métadonnées (inodes, timestamps). Cette richesse fonctionnelle a un coût : distribuer un système de fichiers POSIX est plus complexe que distribuer du stockage objet, et les performances se dégradent plus vite à grande échelle.

Cas d’usage typiques :

  • Partage réseau : home directories, espaces de travail partagés entre serveurs
  • Applications legacy : logiciels qui lisent/écrivent des fichiers via le système de fichiers
  • HPC et rendu : calcul haute performance, rendu 3D, simulations scientifiques

Quand choisir le stockage de fichiers ? Vos applications montent un chemin réseau, vous avez besoin de lecture/écriture partielle dans les fichiers, ou vous devez partager des répertoires entre plusieurs serveurs.

Stockage en blocs : performances brutes pour VMs et bases de données

Section intitulée « Stockage en blocs : performances brutes pour VMs et bases de données »

Le stockage en blocs découpe les données en blocs de taille fixe (typiquement 4 Ko à 16 Mo) et les présente au système d’exploitation comme un disque dur virtuel. Le client formate ce disque avec le système de fichiers de son choix (ext4, XFS, NTFS) et l’utilise comme un disque local.

Analogie : c’est comme un SSD distant que votre serveur voit comme un disque local — sauf que les blocs sont répartis sur plusieurs machines du réseau pour la redondance.

Le stockage en blocs offre les meilleures performances en latence et en IOPS (opérations d’entrée/sortie par seconde), car il opère au niveau le plus bas : pas de couche HTTP, pas de gestion de métadonnées complexe. En contrepartie, un volume bloc est généralement attaché à un seul client à la fois.

Cas d’usage typiques :

  • Bases de données : PostgreSQL, MySQL, MongoDB sur disque distribué
  • Machines virtuelles : disques VMs pour Proxmox, OpenStack, KVM
  • Conteneurs avec état : PersistentVolumes Kubernetes (PVC)

Quand choisir le stockage en blocs ? Vous avez besoin d’un volume attaché à un seul nœud avec la latence la plus faible possible (bases de données, VMs).

CritèreObjetFichiersBlocs
Protocole d’accèsHTTP / S3NFS / SMB / POSIXiSCSI / RBD / FC
Granularité de modificationObjet entierOctet (POSIX)Bloc (4 Ko-16 Mo)
ScalabilitéExcellente (pétaoctets)Bonne (dizaines de To)Bonne (dizaines de To)
LatenceMoyenne (HTTP)MoyenneFaible
Partage concurrentNatif (multi-client)Natif (NFS/SMB)Non (1 client/volume)
MétadonnéesRiches et personnalisablesPOSIX (permissions, dates)Aucune (délégué au FS)

Protéger les données : réplication vs erasure coding

Section intitulée « Protéger les données : réplication vs erasure coding »

Distribuer les données sur plusieurs serveurs ne suffit pas : il faut aussi les protéger contre les pannes. Deux stratégies coexistent, chacune avec ses forces et ses limites.

Réplication vs Erasure Coding

La réplication est la stratégie la plus simple : chaque donnée est copiée intégralement sur 2 ou 3 nœuds différents. Si un serveur tombe, une copie identique existe ailleurs et prend le relais immédiatement.

Avantages :

  • Reconstruction instantanée : la copie est prête, pas de calcul nécessaire
  • Bonnes performances en lecture : les lectures se répartissent sur plusieurs nœuds
  • Simplicité opérationnelle : facile à comprendre, à monitorer et à dépanner

Inconvénient principal : le surcoût de stockage est élevé. Avec un facteur de réplication de 3, stocker 100 Go de données utiles nécessite 300 Go d’espace brut — soit 200 % de surcoût.

Utilisé par : la plupart des systèmes en configuration par défaut — Ceph (petits clusters), GlusterFS, NFS (avec DRBD), Garage, Longhorn.

L’erasure coding : économiser l’espace disque

Section intitulée « L’erasure coding : économiser l’espace disque »

L’erasure coding (EC) découpe chaque donnée en fragments de données et génère des fragments de parité supplémentaires grâce à un algorithme mathématique (Reed-Solomon). Les fragments sont répartis sur différents nœuds.

Prenons l’exemple d’un profil EC 4+2 : la donnée est découpée en 4 fragments, et 2 fragments de parité sont calculés. Le système tolère la perte de n’importe quels 2 fragments sur 6 et peut reconstruire les données manquantes.

Avantages :

  • Surcoût de stockage réduit : 50 % pour EC 4+2 (100 Go → 150 Go), contre 200 % en réplication ×3
  • Même tolérance aux pannes : EC 4+2 tolère 2 pannes, comme la réplication ×3

Inconvénients :

  • Reconstruction plus lente : recalcul des fragments manquants via l’algorithme
  • CPU plus sollicité : l’encodage/décodage consomme des ressources CPU à chaque écriture
  • Latence d’écriture plus élevée : écrire implique de calculer les fragments de parité puis d’écrire sur N nœuds

Utilisé par : MinIO, Ceph (en option), SeaweedFS, RustFS.

CritèreRéplication ×3EC (4+2)EC (8+3)
Espace brut pour 1 To utile3 To1,5 To1,375 To
Surcoût200 %50 %37,5 %
Tolérance pannes2 nœuds2 nœuds3 nœuds
Nœuds minimum3611
Vitesse de reconstructionRapideMoyenneLente

L’EC n’est pas toujours le bon choix. Préférez la réplication dans ces situations :

  • Moins de 6 nœuds : l’EC nécessite au minimum data + parité nœuds (6 pour EC 4+2). En dessous, il n’y a pas assez de nœuds pour distribuer les fragments
  • Petites écritures fréquentes : l’EC ajoute de la latence à chaque écriture (calcul de parité + écriture sur N nœuds). Pour une base de données avec des écritures de 4 Ko à haute fréquence, la réplication sera plus performante
  • Réseau instable ou < 10 Gbps : la reconstruction d’un fragment mobilise tous les nœuds survivants. Un réseau lent transforme une reconstruction en tempête de trafic qui peut durer des heures
  • Pas de failure domains séparés : l’EC n’a de sens que si les fragments sont répartis sur des domaines de défaillance distincts (racks, serveurs physiques différents). Si tous les nœuds sont dans le même rack, une panne de switch ou de courant perd tout

Cohérence des données dans un système distribué

Section intitulée « Cohérence des données dans un système distribué »

Quand les données sont réparties sur plusieurs nœuds, une question se pose : après une écriture, quand un autre client lit-il la donnée à jour ? La réponse dépend du type de stockage.

La plupart des implémentations S3 offrent une cohérence read-after-write : après un PUT, le GET suivant retourne bien le nouvel objet. En revanche, les listings (LIST) peuvent montrer un léger délai de propagation. Ce n’est pas une cohérence POSIX — il n’y a pas de verrous, pas de fsync, pas de sémantique d’ouverture exclusive.

En pratique, c’est suffisant pour la grande majorité des usages du stockage objet (backups, médias, artefacts). Les cas rares où c’est insuffisant (compteur partagé, file de messages) ne sont pas des cas d’usage du stockage objet.

L’accès POSIX implique des verrous, des métadonnées (inodes, permissions, timestamps) et une sémantique d’écriture séquentielle. Plus le cluster est grand ou distribué géographiquement, plus la gestion des locks et des métadonnées crée de la latence. C’est le type de stockage où la cohérence coûte le plus cher en performance.

Les systèmes comme CephFS gèrent cette complexité avec un serveur de métadonnées (MDS) dédié. Les systèmes comme GlusterFS, sans serveur centralisé, font des compromis sur la cohérence dans certains cas de figure (accès concurrent intensif).

La cohérence est gérée au-dessus : c’est le système de fichiers (ext4, XFS) et la base de données qui assurent la consistance. Le stockage en blocs distribué doit simplement garantir que les écritures sont durables et ordonnées — ce qui est le rôle de la réplication synchrone (DRBD) ou des journaux (Ceph RBD).

Maintenant que les concepts fondamentaux sont posés, voici les principales solutions open source classées par type de stockage.

Le protocole S3 est le standard de facto. Toutes les solutions ci-dessous exposent une API compatible S3, utilisable avec les mêmes outils (AWS CLI, rclone, s3cmd, mc).

Solutions standard :

SolutionArchitectureErasure CodingPositionnement
MinIOPeer-to-peer (Go)Oui (Reed-Solomon)Référence du marché. Performance élevée, compatibilité S3 quasi complète, opérateur Kubernetes officiel
Ceph RGWMON + OSD (C++)Oui (configurable)Le choix si vous avez déjà Ceph ou besoin d’un stockage unifié (objet+fichier+bloc)

Alternatives ciblées :

SolutionPositionnement
GarageGéo-distribution native sur matériel hétérogène (Raspberry Pi, VPS, edge). Réplication par CRDT/convergence (pas d’erasure coding). Licence AGPL-3.0
SeaweedFSOptimisé pour les petits fichiers (images, thumbnails). Architecture Master-Volume (Go), supporte FUSE et WebDAV en plus du S3

À surveiller :

SolutionPositionnement
RustFSAlternative écrite en Rust. Le projet annonce des performances supérieures à MinIO sur les petits objets (source : rustfs/rustfs GitHub). En alpha (v1.0.0-alpha) — à évaluer, pas adapté à la production critique

Solutions standard :

SolutionArchitectureRedondancePositionnement
NFSClient-serveur (kernel)DRBD / actif-passifLe plus simple pour un partage réseau entre quelques serveurs. HA avec Pacemaker + Corosync
CephFSMON + OSD + MDS (C++)Réplication ou ECSystème de fichiers distribué de Ceph. Le choix naturel si vous avez déjà un cluster Ceph

Alternatives ciblées :

SolutionPositionnement
BeeGFSRéférence pour le HPC (calcul haute performance). Sépare métadonnées et données pour maximiser les I/O parallèles
JuiceFSApproche hybride : métadonnées dans Redis/MySQL, données dans un backend S3/cloud. Adapté à Kubernetes et au cloud hybride

Legacy / à évaluer :

SolutionPositionnement
GlusterFSArchitecture peer-to-peer sans serveur de métadonnées centralisé. Contexte : Red Hat Gluster Storage (le produit commercial) est EOL depuis fin 2024 (source : Red Hat EOL policy). Le projet upstream continue, mais les performances dégradent au-delà de quelques dizaines de nœuds. Pour les nouveaux déploiements, évaluez CephFS ou NFS + DRBD

Solutions standard :

SolutionArchitectureRedondancePositionnement
Ceph RBDMON + OSD (C++)Réplication ou ECSolution la plus mature. Backend par défaut pour les disques VMs dans OpenStack et Proxmox, CSI driver Kubernetes
LonghornKubernetes-native (Go)Réplication (2-3)Développé par SUSE/Rancher. Snapshots, backups S3, UI web. Déploiement simple via Helm

Alternatives ciblées :

SolutionPositionnement
DRBDModule kernel Linux, réplication synchrone entre exactement 2 nœuds. Le plus simple pour une HA actif/passif, mais ne scale pas au-delà
OpenEBSCNCF Sandbox, Kubernetes-native. Plusieurs moteurs (Jiva, cStor, Mayastor/NVMe-oF). Pour les architectures microservices

Ceph est la seule solution véritablement unifiée : un même cluster physique peut servir du stockage objet (RGW), fichier (CephFS) et bloc (RBD) simultanément. C’est un avantage considérable pour les infrastructures qui ont besoin des trois types. SeaweedFS offre une couverture partielle (S3 + FUSE/WebDAV, mais pas de blocs).

CapacitéCephSeaweedFS
Objet (S3)RGWS3
Fichiers (POSIX)CephFSFUSE/WebDAV
BlocsRBD
ComplexitéÉlevée (MON, OSD, MGR, MDS, RGW)Moyenne (Master, Volume, Filer)

Cette polyvalence a un prix : la complexité opérationnelle est bien réelle. Un cluster Ceph implique 5+ types de composants à superviser et une courbe d’apprentissage significative. Consultez notre guide Ceph pour un déploiement pas à pas.

Dans Kubernetes, le stockage est consommé via des PersistentVolumeClaims (PVC) et fourni par des CSI drivers. Voici le mapping direct besoin → solution :

Besoin K8sOption simpleOption robuste
PVC RWO (un pod à la fois)LonghornRook-Ceph (RBD)
PVC RWX (plusieurs pods)NFS CSIRook-Ceph (CephFS)
Backups S3 interneMinIO (opérateur)Rook-Ceph (RGW)
Stockage éphémère rapideLocal PVOpenEBS (Mayastor)

RWO (ReadWriteOnce) signifie qu’un seul pod peut monter le volume en écriture. RWX (ReadWriteMany) permet à plusieurs pods de partager le même volume — indispensable pour les applications qui partagent des fichiers (WordPress, registres partagés).

Pour aller plus loin sur les concepts de stockage dans Kubernetes (StorageClasses, CSI, provisioning dynamique), consultez notre guide Kubernetes Storage.

PiègeConséquencePrévention
Réseau < 10 Gbps entre nœudsGoulot d’étranglement, reconstructions interminables10 Gbps minimum entre nœuds de stockage
Mélanger HDD et SSD dans un poolPerformances imprévisiblesSéparer les tiers par type de média
EC sans failure domains séparésUn rack en panne = données perduesRépartir les fragments sur des racks/serveurs distincts
Pas de monitoringPannes silencieuses, disques pleinsPrometheus + alertes (espace, latence, santé)
Nombre pair de nœudsSplit-brain, risque de corruptionNombre impair de nœuds (3, 5, 7)
Confondre réplication et sauvegardeLa réplication ne protège pas contre une erreur humaine (rm -rf)Backup externalisé, même avec réplication
Pas de test de restaurationBackup inutilisable le jour JTester la restauration mensuellement
  • Réseau : 10 Gbps minimum, latence mesurée entre tous les nœuds
  • Disques : tiers séparés (SSD pour métadonnées/WAL, HDD pour données froides)
  • Failure domains : au minimum 3 domaines distincts (racks, serveurs physiques)
  • Monitoring : Prometheus + Grafana avec alertes sur l’espace, la latence et la santé du cluster
  • Quotas : limites configurées par utilisateur/bucket/volume
  • Sauvegardes : backup externalisé et tests de restauration planifiés
  • Documentation : procédures de remplacement de nœud et de restauration documentées

Maintenant que vous comprenez les types de stockage, les mécanismes de protection et les solutions disponibles, voici un guide de décision rapide.

  1. Comment vos applications accèdent-elles aux données ?

    AccèsType de stockageExemples
    API HTTP / S3 (PUT /bucket/objet)ObjetBackups, médias, data lakes, artefacts CI/CD
    Montage réseau (/mnt/share)FichiersPartage d’équipe, applications legacy, HPC
    Disque virtuel (/dev/rbd0)BlocsBases de données, VMs, PersistentVolumes K8s
  2. Combien de serveurs avez-vous ?

    • 1-2 serveurs → NFS + DRBD (fichiers/blocs) · MinIO standalone (objet)
    • 3-4 serveurs → MinIO distribué (objet) · CephFS (fichiers) · Longhorn (blocs K8s)
    • 5+ serveurs → Ceph unifié · MinIO avec erasure coding · Ceph RBD (blocs)
  3. Quelle est votre priorité ?

    PrioritéObjet (S3)FichiersBlocs
    SimplicitéMinIONFSDRBD
    PerformanceMinIOBeeGFSCeph RBD
    PolyvalenceCeph RGWCephFSCeph RBD
    Budget minimalGarageNFSLonghorn
BesoinSolution recommandéeAlternative
S3 simple et performantMinIOSeaweedFS
S3 géo-distribué / edgeGarageCeph RGW multi-site
S3 pour petits fichiersSeaweedFSMinIO
Partage fichiers haute dispoCephFSNFS + DRBD
Fichiers pour HPCBeeGFSCephFS, Lustre
Disques pour VMs / ProxmoxCeph RBDDRBD
PersistentVolumes K8sLonghornOpenEBS, Ceph RBD
Tout-en-un (objet+fichier+bloc)Ceph
Minimum de ressourcesGarage ou NFS
  1. Le stockage distribué résout 3 problèmes : disponibilité (survie aux pannes), scalabilité (ajouter des nœuds) et performance (accès parallèles)
  2. Trois types de stockage coexistent : objet (S3/HTTP pour les fichiers immutables), fichiers (NFS/POSIX pour les applications legacy) et blocs (disques virtuels pour VMs et bases de données)
  3. Réplication pour les petits clusters (< 6 nœuds) et la simplicité ; erasure coding pour les grands clusters (6+ nœuds, réseau 10 GbE, failure domains séparés)
  4. MinIO est la référence pour le stockage objet S3 auto-hébergé. Ceph est la solution unifiée la plus complète (objet+fichier+bloc)
  5. GlusterFS est à évaluer pour les nouveaux déploiements (produit commercial Red Hat EOL fin 2024) — privilégiez CephFS ou NFS + DRBD
  6. Kubernetes : Longhorn (PVC RWO simple), Rook-Ceph (3 types de stockage), MinIO opérateur (S3 interne)
  7. La réplication ne remplace pas les sauvegardes : protégez-vous contre les erreurs humaines et les corruptions logiques

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn