# Ceph

Ceph est une solution libre de stockage distribué (software-defined storage) qui propose trois protocoles en un avec : Bloc, Fichiers & Objet (S3). Les objectifs principaux de Ceph sont d'être complètement distribués sans point unique de défaillance, extensible jusqu'à l'exaoctet et librement disponible. Les données sont répliquées, permettant au système d'être tolérant aux pannes.
Ceph fonctionne sur du matériel standard (serveurs x86) dit commoditaire et de l'Ethernet IP.
Le système est conçu pour s'autoréparer et automatiser au maximum ses tâches administratives afin de réduire les coûts d'exploitation, et d'être agnostique sur le choix du matériel associé (disques, serveurs commoditaires).
Ceph est souvent utilisé par les centres de données qui ont adopté l'Open source comme leur nouvelle norme pour le stockage blocs à forte croissance, le stockage objet et le Big data (datalakes).

## Stockage objet S3

Ceph met en œuvre le stockage d'objets distribué au moyen de RADOS (Reliable Autonomic Distributed Object Store), un moteur de stockage objet fiable, autonome et distribué.
Côté client, sa bibliothèque logicielle native librados permet aux applications C, C++, Java, Python, Ruby et PHP un accès direct en mode objet. L'API S3 permet aux applications de déborder nativement dans le cloud.
Ce sont souvent des disques de grandes capacités qui sont associés au stockage objet S3 de Ceph pour des cas d'usages : Big Data (datalake), Data science, Container registry, Backup & Archives (GED, mails, WORM...), IOT, média & vidéosurveillance...
Différentes bibliothèques additionnelles permettent d'obtenir les abstractions nécessaires pour :
* L'accès en mode bloc grâce à RADOS Block Device (RBD) ou iSCSI
* L'accès en mode fichier grâce à CephFS
* L'accès en mode HTTP REST via les interfaces Amazon S3 ou OpenStack Swift grâce à la passerelle RADOS (RADOS Gateway ou RADOSGW)

## Stockage en mode bloc

Le système de stockage en mode bloc de Ceph autorise les utilisateurs à monter Ceph comme un périphérique de type bloc. Quand une application écrit des données sur Ceph en utilisant un périphérique de bloc, Ceph parallélise et réplique les écritures de données à travers le cluster automatiquement. Ceph-RBD s'intègre aussi avec les machines virtuelles basées sur le noyau Linux.
* Ceph-RBD s'interface avec le même système d'objet de stockage que l'API librados et le système de fichiers CephFS, et il stocke les images de périphérique de bloc comme des objets. Depuis que RBD est construit au-dessus de librados, RBD a hérité des capacités de librados, incluant les instantanés (snapshots) en lecture seule et le retour aux snapshots. En parallelisant les écritures des images sur le cluster, Ceph améliore les performances d'accès en lecture sur les grosses images de périphérique de bloc.
* Ceph-iSCSI est une passerelle qui permet d'accéder à un stockage en bloc distribué hautement disponible à partir de n'importe quel serveur ou client Microsoft Windows ou VMware VSphere capable d'utiliser le protocole iSCSI. En utilisant Ceph-iSCSI sur un ou plusieurs hôtes de passerelle iSCSI, les images Ceph-RBD deviennent disponibles en tant qu'unités logiques (LU) associées à des cibles iSCSI, auxquelles il est possible d'accéder de manière hautement disponible et à charge équilibrée.
Ce sont souvent des disques rapides (NVMe, SSD) qui sont associés au stockage bloc de Ceph pour des cas d'usages : bases de données, machine virtuelle (VM), conteneur, Data analytics, AI/ML...

### Intégration

L'accès en mode bloc est notamment intégré à certaines plateformes de virtualisation, comme :
* OpenStack ;
* OpenShift ;
* Kubernetes (k8s) et Rook ;
* Apache CloudStack ;
* OpenNebula ;
* Ganeti ;
* Proxmox Virtual Environment.
Cette intégration permet à une machine virtuelle d'utiliser directement un périphérique RBD en guise de disque dur virtuel.

## Stockage en mode fichier

Le système de fichiers de Ceph (CephFS) fonctionne au-dessus du système de stockage d'objet qui fournit le stockage d'objets et les interfaces de périphérique de bloc. Les métadonnées du cluster de serveurs de ceph fournissent un service qui mappe les répertoires et les noms des fichiers du système de fichiers des objets stockés dans les grappes de serveurs RADOS (cluster). Les métadonnées peuvent se développer ou se contracter, ils peuvent rééquilibrer le système de fichiers de manière dynamique pour distribuer les données uniformément parmi les hôtes du cluster. Cela assure de hautes performances et prévient contre de lourdes charges sur un hôte spécifique du cluster.
Les clients montent le système de fichiers compatible POSIX en utilisant le noyau Linux d'un client. Le 19 mars 2010, Linus Torvalds a fusionné le client Ceph dans le noyau Linux 2.6.34 qui est sorti le 16 mai 2010. Un vieux client basé sur FUSE est disponible. Les serveurs fonctionnent comme des démons Unix ordinaires.
Le stockage fichier de Ceph est souvent associé aux cas d'usages : captures de journaux, messages, conteneurs CI/CD, filestore (sharing)…

## Systèmes de fichiers sous-jacent

Un système de fichiers sous-jacent sur les OSD est utilisé pour stocker la donnée sous la forme de fichiers dans une arborescence. (Un OSD est généralement un disque rotatif)
* En test
** Btrfs
** ZFS (sous Linux)
* Production
** Bluestore (qui n'est pas un système de fichiers à proprement parler, mais une utilisation du disque en raw device)
** Ext4 (à petite échelle)
** XFS (déploiement en entreprise)

## Historique

Ceph a été initialement créé par Sage Weil (en) (développeur du concept de Webring et cofondateur de DreamHost) pour sa thèse de doctorat supervisée par le professeur Scott A. Brandt qui travaillait à la Jaskin Baskin School of Engineering de l'université de Californie à Santa Cruz, fondée par le DOE/NNSA (Department of Energy/National Nuclear Security Administration) en collaboration avec le laboratoire national de Lawrence Livermore, le laboratoire national de Los Alamos et le laboratoire national de Sandia.
Après sa remise de diplôme (Ph.D) à l'été 2007, Weil a continué à travailler sur Ceph à temps plein. L'équipe du développement du noyau s'est agrandie en incluant Yehuda Sadeh Weinraub et Gregory Farnum. En 2012, Weil créa Inktank Storage pour fournir des services et du support professionnel à Ceph.
En avril 2014, Red Hat a acheté Inktank prenant la plupart des développements de Ceph en interne pour en faire une version de production pour les entreprises avec du support (hotline) et de la maintenance (nouvelles versions). S. Weil poursuit le développement de Ceph comme architecte principal chez Red Hat.
Ceph continue de dominer le marché en tant que solution de stockage open source grâce aux efforts continus de développement de la communauté en délivrant de nouvelles fonctionnalités pour servir les besoins des entreprises et s'adapter à de nouveaux cas d'usage émergents tels que le stockage persistant pour les containers, l'Open Data Sciences, AI/ML, Kafka, Data analytics...

### Argonaut (v0.48)

Le 3 juillet 2012, l'équipe de développement a proposé la version Argonaut, la première version « stable » de Ceph. Cette version recevra seulement des patchs de stabilité et de performances et les nouvelles fonctionnalités seront prévues pour les prochaines versions.

### Bobtail (v0.56)

Le 1er janvier 2013, l'équipe de Ceph propose Bobtail, la 2e version majeure de Ceph. Cette version se concentre principalement sur la stabilité. les performances et l'évolutivité de la version stable précédente.

### Cuttlefish (v0.61)

Le 7 mai 2013, l'équipe de Ceph propose CuttleFish, la 3e version majeure de Ceph. Cette version inclut un nombre important d'améliorations de performance et est la première version stable à proposer la fonctionnalité d'outil de déploiement « ceph-deploy » à la place de la méthode précédente « mkcephfs ».

### Dumpling (v0.67)

Le 14 août 2013, l'équipe de développement sort Dumpling, la quatrième version majeure de Ceph. Cette version inclut un premier passage à l'espace de nom global et aux supports des régions, une API REST est aussi disponible pour des fonctions de management et de monitoring et un support amélioré pour les plateformes basé sur RHEL.

### Emperor (v0.72)

Le 9 novembre 2013, L'équipe de développement sort Emperor, la cinquième version majeure de Ceph. Cette version apporte un lot de nouvelles fonctionnalités, incluant la réplication multi-datacenter pour le radosgw, améliore la facilité d'utilisation et un grand nombre de performances incrémentielles et du travail interne de refactorisation pour les fonctionnalités à venir dans Firefly.

### Firefly (v0.80)

Le 7 mai 2014, L'équipe de développement de Ceph sort Firefly, la 6e version majeure de Ceph. Cette version apporte des nouvelles fonctionnalités incluant un code correcteur, la cascade de cache, l'affinité primaire, clé/valeur OSD backend (Expérimental), radosgw autonome (Expérimental).

### Giant (v0.87)

Le 29 octobre 2014, l'équipe de développement de Ceph a sorti Giant, la 7e version majeure de Ceph.

### Hammer (v0.94)

Le 7 avril 2015, l'équipe de développement de Ceph a sorti Hammer, la 8e version majeure de Ceph.

### Infernalis (v9.2.0)

Le 6 novembre 2015, l'équipe de développement de Ceph a sorti Infernalis, la 9e version majeure de Ceph. Cette dernière version supporte notamment Systemd pour la gestion des démons qui sont lancés avec l'utilisateur ceph au lieu de root.

### Jewel (v10.2.0)

Le 21 avril 2016, l'équipe de développement de Ceph a sorti Jewel, la 10e version majeure de Ceph, et 1re version de Ceph dans laquelle CephFS est considéré comme stable.

### Kraken (v11.2.0)

Le 20 janvier 2017, l'équipe de développement de Ceph a sorti Kraken, la 11e version majeure de Ceph. Cette nouvelle version apporte des améliorations au système de fichiers CephFS, à RADOS, le moteur de Ceph, à RGW et RBD.

### Luminous (v12.2.0)

Le 29 août 2017, l'équipe de développement de Ceph a sorti Luminous, la 12e version majeure de Ceph. Parmi les nombreux apports, le format de stockage BlueStore (utilisant un disque dur au lieu d'un système de fichier) est maintenant considéré comme stable et recommandé à utiliser.

### Mimic (v13.0.0)

Mimic est la 13e version majeure de Ceph.

### Nautilus (v14.2.0)

Nautilus est la 14e version majeure de Ceph. Parmi les nombreux apports, le format de stockage BlueStore (utilisant un disque dur au lieu d'un système de fichier) est maintenant considéré comme stable et recommandé à utiliser.

### Octopus (v15.2.0)

Octopus est la 15e version majeure de Ceph.

### Pacific (v16.2.0)

Pacific est la 16e version majeure de Ceph. Au menu, des améliorations sur l'utilitaire d'administration cephadm ainsi que sur le dashboard, le stockage RBD, le stockage objet RGW et CephFS.

### Quincy

Quincy est la 17e version majeure . Dans cette version, FileStore disparaît complètement au profit de BlueStore. Intégration de snmp dans cephadm.

### Reef

Reef est la dernière version stable (v18.2.0) de Ceph sortie le 4 août 2023.

## Conception

Ceph utilise quatre démons distincts :
* Supervision du cluster (ceph-mon), virtualisable, qui effectue un suivi des nœuds des clusters actif et en échec.
* Serveurs de métadonnées (ceph-mds), virtualisable, qui stocke les métadonnées des inodes et des répertoires.
* Périphérique de stockage d’objets (ceph-osd) qui stocke le contenu des fichiers. Idéalement, les OSDs stockent leurs données sur un système de fichiers local en Btrfs pour tirer parti des capacités de copies sur écritures intégrées, bien que d'autres systèmes de fichiers locaux puissent être utilisés à la place.
* Transfert d'état représentationnel (RESTful) passerelle (ceph-rgw), virtualisable, qui expose les couches de stockage d'objets comme une interface compatible avec Amazon S3 et les API d'OpenStack Swift.
Tous ces démons fonctionnent de manière complètement distribuée et peuvent s'exécuter sur le même ensemble de serveurs. Les clients interagissent directement avec tous.
Ceph fait de l'entrelacement de fichiers individuels sur des fichiers à travers de multiples nœuds pour fournir un débit plus élevé, de façon similaire au RAID 0 qui entrelace les partitions sur de multiples disques durs. L'équilibrage de charge adaptatif est supporté. Ainsi, les objets fréquemment consultés sont répliqués sur plus de nœuds.

## Étymologie

Le nom « Ceph » est un nom souvent donné aux poulpes et aux céphalopodes, une famille de mollusques, et en fin de compte de l'ancien Grec κεφαλή (ke-pha-lee), qui veut dire « tête » et πόδι (po-dhi), qui veut dire « jambes ». Le nom (souligné par le logo) suggère le comportement fortement parallèle d'un poulpe et a été choisi pour connecter le système de fichiers avec la mascotte de l'UCSC (Université de Californie), une limace appelée « Sammy ». La limace est un gastéropode, qui est aussi une classe de mollusque.

## Kubernetes

Le projet ceph-helm permet de déployer Ceph dans un environnement Kubernetes pour fournir un stockage persistant.
Les conteneurs Kubernetes sont sans état en tant que principe de base, mais les données doivent toujours être gérées, protégées et rendues accessibles à d'autres services. Stateless signifie que le conteneur s'exécute de manière isolée sans aucune connaissance des transactions passées, ce qui facilite le remplacement, la suppression ou la distribution du conteneur. Cependant, cela signifie également que sans stockage persistant, les données seront perdues pour certains événements du cycle de vie comme le redémarrage ou la suppression du conteneur. Ceph est utilisé pour éviter cette contrainte et provisionner de façon dynamique des volumes persistants (PV) aux conteneurs.
* Rook est un outil d'orchestration du stockage qui fournit une solution open source cloud native pour un ensemble diversifié de fournisseurs de stockage. Rook utilise la puissance de Kubernetes (K8S) pour transformer un système de stockage en services autogérés qui offrent une expérience transparente pour la sauvegarde des données d'application ou de déploiement Kubernetes.
* Ceph est une solution de stockage distribué hautement évolutive offrant un stockage d'objets, de blocs et de fichiers. Les clusters Ceph sont conçus pour s'exécuter sur n'importe quel matériel à l'aide de l'algorithme dit CRUSH (réplication contrôlée sous hachage évolutif, Crush gère la déconnexion sauvage de nœuds, par accident ou pour remplacement) et fournir un stockage persistant pour les conteneurs kubernetes. L'un des principaux avantages de ce déploiement est d’obtenir une solution de stockage hautement évolutive sans avoir à la configurer manuellement à l'aide de la ligne de commande Ceph, car Rook la gère automatiquement. Les applications Kubernetes peuvent ensuite monter des périphériques blocs, des systèmes de fichiers et objet S3 à partir de Rook pour préserver et surveiller leurs données d'application.