1 SES et Ceph #
SUSE Enterprise Storage (SES) est un système de stockage distribué conçu pour l'évolutivité, la fiabilité et les performances, et basé sur la technologie Ceph. Une grappe Ceph peut être exécutée sur des serveurs courants dans un réseau standard comme Ethernet. La grappe évolue facilement vers des milliers de serveurs (appelés plus tard noeuds) et dans la plage de pétaoctets. Contrairement aux systèmes conventionnels qui possèdent des tables d'allocation pour stocker et récupérer des données, Ceph utilise un algorithme déterministe pour allouer du stockage des données et ne dispose d'aucune structure centralisée des informations. Ceph suppose que, dans les grappes de stockage, l'ajout ou la suppression de matériel est la règle, et non l'exception. La grappe Ceph automatise les tâches de gestion telles que la distribution et la redistribution des données, la réplication des données, la détection des échecs et la récupération. Ceph peut à la fois s'autoréparer et s'autogérer, ce qui se traduit par une réduction des frais administratifs et budgétaires.
Ce chapitre fournit un aperçu global de SUSE Enterprise Storage 7.1 et décrit brièvement les éléments les plus importants.
1.1 Fonctions de Ceph #
L'environnement Ceph possède les fonctions suivantes :
- Évolutivité
Ceph peut s'adapter à des milliers de noeuds et gérer le stockage dans la plage de pétaoctets.
- Matériel courant
Aucun matériel spécial n'est requis pour exécuter une grappe Ceph. Pour plus de détails, reportez-vous au Chapitre 2, Configuration matérielle requise et recommandations
- Autogestion
La grappe Ceph est autogérée. Lorsque des noeuds sont ajoutés ou supprimés ou échouent, la grappe redistribue automatiquement les données. Elle a également connaissance des disques surchargés.
- Aucun point d'échec unique
Aucun noeud d'une grappe ne stocke les informations importantes de manière isolée. Vous pouvez configurer le nombre de redondances.
- Logiciels Open Source
Ceph est une solution logicielle Open Source et indépendante du matériel ou de fournisseurs spécifiques.
1.2 Composants de base de Ceph #
Pour tirer pleinement parti de la puissance de Ceph, il est nécessaire de comprendre certains des composants et concepts de base. Cette section présente certaines parties de Ceph qui sont souvent référencées dans d'autres chapitres.
1.2.1 RADOS #
Le composant de base de Ceph est appelé RADOS (Reliable Autonomic Distributed Object Store) (Zone de stockage des objets distribués autonome fiable). Il est chargé de gérer les données stockées dans la grappe. Les données de Ceph sont généralement stockées en tant qu'objets. Chaque objet se compose d'un identificateur et des données.
RADOS fournit les méthodes d'accès suivantes aux objets stockés qui couvrent de nombreux cas d'utilisation :
- Object Gateway
Object Gateway est une passerelle HTTP REST pour la zone de stockage des objets RADOS. Elle permet un accès direct aux objets stockés dans la grappe Ceph.
- Périphérique de bloc RADOS
Les périphériques de bloc RADOS (RADOS Block Devices, RBD) sont accessibles comme n'importe quel autre périphérique de bloc. Ils peuvent être utilisés, par exemple, en combinaison avec
libvirt
à des fins de virtualisation.- CephFS
Le système de fichiers Ceph est un système de fichiers compatible POSIX.
librados
librados
est une bibliothèque pouvant être utilisée avec de nombreux langages de programmation pour créer une application capable d'interagir directement avec la grappe de stockage.
librados
est utilisé par Object Gateway et les RBD alors que CephFS s'interface directement avec RADOS (Figure 1.1, « Interfaces avec la zone de stockage des objets Ceph »).
1.2.2 CRUSH #
Au coeur d'une grappe Ceph se trouve l'algorithme CRUSH. CRUSH est l'acronyme de Controlled Replication Under Scalable Hashing (Réplication contrôlée sous hachage évolutif). CRUSH est une fonction qui gère l'allocation de stockage et nécessite relativement peu de paramètres. Cela signifie que seule une petite quantité d'informations est nécessaire pour calculer la position de stockage d'un objet. Les paramètres sont une carte actuelle de la grappe, comprenant l'état de santé, certaines règles de placement définies par l'administrateur et le nom de l'objet qui doit être stocké ou récupéré. Avec ces informations, tous les noeuds de la grappe Ceph sont en mesure de calculer l'emplacement auquel un objet et ses répliques sont stockés. Cela rend l'écriture ou la lecture des données très efficace. CRUSH tente de distribuer équitablement les données sur tous les noeuds de la grappe.
La carte CRUSH contient tous les noeuds de stockage et les règles de placement définies par l'administrateur pour le stockage des objets dans la grappe. Elle définit une structure hiérarchique qui correspond généralement à la structure physique de la grappe. Par exemple, les disques contenant des données sont dans des hôtes, les hôtes sont dans des racks, les racks dans des rangées et les rangées dans des centres de données. Cette structure peut être utilisée pour définir des domaines de défaillance. Ceph s'assure ensuite que les réplications sont stockées sur différentes branches d'un domaine de défaillance spécifique.
Si le domaine de défaillance est défini sur le niveau rack, les réplications d'objets sont réparties sur différents racks. Cela peut limiter les interruptions de service provoquées par un commutateur défaillant sur un rack. Si une unité de distribution de l'alimentation dessert une rangée de racks, le domaine de défaillance peut être défini sur rangée. En cas de défaillance de l'unité de distribution de l'alimentation, les données répliquées sont toujours disponibles sur les autres rangées.
1.2.3 Noeuds et daemons Ceph #
Dans Ceph, les noeuds sont des serveurs fonctionnant pour la grappe. Ils peuvent exécuter divers types de daemons. Nous recommandons de n'exécuter qu'un seul type de daemon sur chaque noeud, à l'exception des daemons Ceph Manager qui peuvent se trouver au même emplacement que ceux de Ceph Monitor. Chaque grappe nécessite au moins des daemons Ceph Monitor, Ceph Manager, et Ceph OSD :
- Noeud Admin
Le noeud Admin est un noeud de grappe Ceph à partir duquel vous exécutez des commandes pour gérer la grappe. Le noeud Admin est un point central de la grappe Ceph, car il gère les autres noeuds de la grappe en interrogeant et en instruisant leurs services de Minion Salt.
- Ceph Monitor
Les noeuds Ceph Monitor (souvent abrégés en MON) gèrent des informations sur l'état de santé de la grappe, une carte de tous les noeuds et des règles de distribution des données (reportez-vous à la Section 1.2.2, « CRUSH »).
En cas de défaillance ou de conflit, les noeuds Ceph Monitor de la grappe décident, à la majorité, des informations qui sont correctes. Pour former une majorité admissible, il est recommandé de disposer d'un nombre impair de noeuds Ceph Monitor et au minimum de trois d'entre eux.
Si plusieurs sites sont utilisés, les noeuds Ceph Monitor doivent être distribués sur un nombre impair de sites. Le nombre de noeuds Ceph Monitor par site doit être tel que plus de 50 % des noeuds Ceph Monitor restent fonctionnels en cas de défaillance d'un site.
- Ceph Manager
Ceph Manager collecte les informations d'état de l'ensemble de la grappe. Le daemon Ceph Manager s'exécute parallèlement aux daemons Ceph Monitor. Il fournit une surveillance supplémentaire et assure l'interface avec les systèmes de surveillance et de gestion externes. Il comprend également d'autres services. Par exemple, l'interface utilisateur Web de Ceph Dashboard s'exécute sur le même noeud que Ceph Manager.
Ceph Manager ne requiert aucune configuration supplémentaire : il suffit de s'assurer qu'il s'exécute.
- Ceph OSD
Ceph OSD est un daemon qui gère des périphériques de stockage d'objets (Object Storage Devices, OSD) qui sont des unités de stockage physiques ou logiques (disques durs ou partitions). Les périphériques de stockage d'objets peuvent être des disques/partitions physiques ou des volumes logiques. Le daemon prend également en charge la réplication et le rééquilibrage des données en cas d'ajout ou de suppression de noeuds.
Les daemons Ceph OSD communiquent avec les daemons Ceph Monitor et leur fournissent l'état des autres daemons OSD.
Pour utiliser CephFS, Object Gateway, NFS Ganesha ou la passerelle iSCSI, des noeuds supplémentaires sont requis :
- Serveur de métadonnées (MDS)
Les métadonnées CephFS sont stockées dans sa propre réserve RADOS (voir Section 1.3.1, « Réserves »). Les serveurs de métadonnées agissent comme une couche de mise en cache intelligente pour les métadonnées et sérialisent l'accès en cas de besoin. Cela permet un accès simultané à partir de nombreux clients sans synchronisation explicite.
- Object Gateway
Object Gateway est une passerelle HTTP REST pour la zone de stockage des objets RADOS. Elle est compatible avec OpenStack Swift et Amazon S3, et possède sa propre gestion des utilisateurs.
- NFS Ganesha
NFS Ganesha fournit un accès NFS à Object Gateway ou à CephFS. NFS Ganesha s'exécute dans l'espace utilisateur au lieu de l'espace kernel, et interagit directement avec Object Gateway ou CephFS.
- Passerelle iSCSI
iSCSI est un protocole de réseau de stockage qui permet aux clients d'envoyer des commandes SCSI à des périphériques de stockage SCSI (cibles) sur des serveurs distants.
- Passerelle Samba
La passerelle Samba offre un accès Samba aux données stockées sur CephFS.
1.3 Structure de stockage Ceph #
1.3.1 Réserves #
Les objets qui sont stockés dans une grappe Ceph sont placés dans des réserves. Les réserves représentent les partitions logiques de la grappe vers le monde extérieur. Pour chaque réserve, un ensemble de règles peut être défini, par exemple, combien de réplications de chaque objet doivent exister. La configuration standard des réserves est appelée réserve répliquée.
Les réserves contiennent généralement des objets, mais peuvent également être configurées pour agir de la même manière qu'un RAID 5. Dans cette configuration, les objets sont stockés sous forme de tranches avec d'autres tranches de codage. Les tranches de codage contiennent les informations redondantes. Le nombre de données et les tranches de codage peuvent être définis par l'administrateur. Dans cette configuration, les réserves sont appelées réserves codées à effacement ou réserves EC.
1.3.2 Groupes de placement #
Les groupes de placement (PG) sont utilisés pour la distribution des données au sein d'une réserve. Lorsque vous créez une réserve, un certain nombre de groupes de placement sont définis. Les groupes de placement sont utilisés en interne pour grouper des objets et sont un facteur important en termes de performances d'une grappe Ceph. Le groupe de placement d'un objet est déterminé par le nom de l'objet.
1.3.3 Exemple #
Cette section fournit un exemple simplifié de la façon dont Ceph gère les données (reportez-vous à la Figure 1.2, « Exemple de Ceph à petite échelle »). Cet exemple ne représente pas une configuration recommandée pour une grappe Ceph. La configuration matérielle comprend trois noeuds de stockage ou noeuds Ceph OSD (Hôte 1
, Hôte 2
, Hôte 3
). Chaque noeud comporte trois disques durs qui sont utilisés comme OSD (osd.1
à osd.9
). Les noeuds Ceph Monitor sont ignorés dans cet exemple.
Alors que Ceph OSD ou daemon Ceph OSD fait référence à un daemon exécuté sur un noeud, le terme OSD fait référence au disque logique avec lequel le daemon interagit.
La grappe comporte deux réserves, Réserve A
et Réserve B
. Alors que Réserve A ne réplique les objets que deux fois, la résilience pour Réserve B est plus importante et comporte trois réplications pour chaque objet.
Lorsqu'une application place un objet dans une réserve, par exemple via l'API REST, un groupe de placement (PG1
à PG4
) est sélectionné en fonction de la réserve et du nom de l'objet. L'algorithme CRUSH calcule ensuite les OSD sur lesquels l'objet est stocké, en fonction du groupe de placement qui contient l'objet.
Dans cet exemple, le domaine de défaillance est défini sur le niveau hôte. Cela garantit que les réplications d'objets sont stockées sur des hôtes différents. En fonction du niveau de réplication défini pour une réserve, l'objet est stocké sur deux ou trois OSD utilisés par le groupe de placement.
Une application qui écrit un objet interagit uniquement avec un Ceph OSD, le Ceph OSD primaire. Le Ceph OSD primaire se charge de la réplication et confirme l'achèvement du processus d'écriture une fois que tous les autres OSD ont stocké l'objet.
Si osd.5
échoue, tous les objets du PG1
sont toujours disponibles sur osd.1
. Dès que la grappe identifie un échec d'OSD, un autre OSD prend le relais. Dans cet exemple osd.4
est utilisé en remplacement d'osd.5
. Les objets stockés sur osd.1
sont ensuite répliqués sur osd.4
pour restaurer le niveau de la réplication.
Si un nouveau noeud avec de nouveaux OSD est ajouté à la grappe, la carte de la grappe va changer. La fonction CRUSH renvoie alors des emplacements différents pour les objets. Les objets qui reçoivent de nouveaux emplacements seront déplacés. Ce processus aboutit à une utilisation équilibrée de tous les OSD.
1.4 BlueStore #
BlueStore est une nouvelle interface dorsale de stockage par défaut pour Ceph depuis la version 5 de SES. Il offre de meilleures performances que FileStore, une somme de contrôle de données complète et une compression intégrée.
BlueStore gère un, deux ou trois périphériques de stockage. Dans le cas le plus simple, BlueStore utilise un seul périphérique de stockage primaire. Le périphérique de stockage est normalement partitionné en deux parties :
Une petite partition nommée BlueFS qui met en oeuvre des fonctionnalités de type système de fichiers requises par RocksDB.
Le reste du périphérique est généralement une grande partition occupant le reste du périphérique. Il est géré directement par BlueStore et contient toutes les données réelles. Ce périphérique primaire est normalement identifié par un lien symbolique de bloc dans le répertoire de données.
Il est également possible de déployer BlueStore sur deux périphériques supplémentaires :
Un périphérique WAL peut être utilisé pour le journal interne ou le journal d'écriture anticipée de BlueStore. Il est identifié par le lien symbolique block.wal
dans le répertoire de données. Il n'est utile d'utiliser un périphérique WAL distinct que si le périphérique est plus rapide que le périphérique primaire ou le périphérique DB, par exemple dans les cas suivants :
Le périphérique WAL est une interface NVMe, le périphérique DB est un disque SSD et le périphérique de données est un disque SSD ou un disque HDD.
Les périphériques WAL et DB sont des disques SSD distincts et le périphérique de données est un disque SSD ou un disque HDD.
Un périphérique DB peut être utilisé pour stocker les métadonnées internes de BlueStore. BlueStore (ou plutôt, la base de données RocksDB intégrée) mettra autant de métadonnées que possible sur le périphérique DB pour améliorer les performances. Encore une fois, il n'est utile de déployer un périphérique DB partagé que s'il est plus rapide que le périphérique primaire.
Planifiez minutieusement la taille du périphérique DB pour qu'elle soit suffisante. Si le périphérique DB sature, les métadonnées débordent sur le périphérique primaire, ce qui dégrade considérablement les performances de l'OSD.
Vous pouvez vérifier si une partition WAL/DB est pleine et déborde avec la commande ceph daemon osd.ID perf dump
. La valeur slow_used_bytes
indique la quantité de données qui déborde :
cephuser@adm >
ceph daemon osd.ID perf dump | jq '.bluefs'
"db_total_bytes": 1073741824,
"db_used_bytes": 33554432,
"wal_total_bytes": 0,
"wal_used_bytes": 0,
"slow_total_bytes": 554432,
"slow_used_bytes": 554432,
1.5 Informations supplémentaires #
Ceph, en tant que projet communautaire, dispose de sa propre documentation en ligne. Pour les rubriques non trouvées dans ce manuel, reportez-vous au site https://docs.ceph.com/en/pacific/.
La publication d'origine CRUSH: Controlled, Scalable, Decentralized Placement of Replicated Data (CRUSH : placement contrôlé, évolutif et décentralisé des données répliquées) par S.A. Weil, S.A. Brandt, E.L. Miller, C. Maltzahn fournit des informations utiles sur le fonctionnement interne de Ceph. Il est surtout recommandé de le lire lors du déploiement de grappes à grande échelle. La publication peut être consultée à l'adresse http://www.ssrc.ucsc.edu/papers/weil-sc06.pdf.
SUSE Enterprise Storage peut être utilisé avec des distributions non-SUSE OpenStack. Les clients Ceph doivent être à un niveau compatible avec SUSE Enterprise Storage.
NoteSUSE prend en charge le composant serveur du déploiement Ceph et le client est pris en charge par le fournisseur de la distribution OpenStack.