Accéder au contenuNavigation Accéder à la page : page précédente [raccourci clavier p] / page suivante [raccourci clavier n]
documentation.suse.com / Documentation de SUSE Enterprise Storage 7 / Guide d'opérations et d'administration / Stockage de données dans une grappe / Gestion des réserves de stockage
S'applique à SUSE Enterprise Storage 7

18 Gestion des réserves de stockage

Ceph stocke les données dans des réserves. Les réserves sont des groupes logiques pour le stockage des objets. Lorsque vous déployez une grappe pour la première fois sans créer de réserve, Ceph utilise les réserves par défaut pour stocker les données. Les points importants suivants concernent les réserves Ceph :

  • Résilience : les réserves Ceph garantissent une résilience en répliquant ou en codant les données qu'elles contiennent. Chaque réserve peut être configurée pour être répliquée (« replicated ») ou codée à effacement (« erasure coded »). Pour les réserves répliquées, vous devez également définir le nombre de répliques, ou copies, dont disposera chaque objet de données de la réserve. Le nombre de copies (OSD, compartiments/feuilles CRUSH) pouvant être perdues est inférieur d'une unité au nombre de répliques. Avec le codage à effacement, vous devez définir les valeurs de k et m, k correspondant au nombre de tranches de données et m au nombre de tranches de codage. Pour les réserves utilisant le codage à effacement, c'est le nombre de tranches de codage qui détermine le nombre d'OSD (compartiments/feuilles CRUSH) pouvant être perdus sans perte de données.

  • Groupes de placement : vous pouvez définir le nombre de groupes de placement pour la réserve. Une configuration type utilise environ 100 groupes de placement par OSD pour fournir un équilibrage optimal sans nécessiter trop de ressources informatiques. Lors de la configuration de plusieurs grappes, veillez à définir un nombre raisonnable de groupes de placement pour la réserve et la grappe dans leur ensemble.

  • Règles CRUSH : lorsque vous stockez des données dans une réserve, les objets et leurs répliques (ou tranches en cas de réserves codées à effacement) sont placés selon l'ensemble de règles CRUSH assignées à la réserve. Vous pouvez créer une règle CRUSH personnalisée pour votre réserve.

  • Instantanés : lorsque vous créez des instantanés avec ceph osd pool mksnap, vous prenez effectivement un instantané d'une réserve en particulier.

Pour organiser les données en réserves, vous pouvez répertorier, créer et supprimer des réserves. Vous pouvez également afficher les statistiques d'utilisation pour chaque réserve.

18.1 Création d'une réserve

Une réserve peut être de type replicated (répliquée) pour récupérer des OSD perdus en conservant plusieurs copies des objets, ou de type erasure (à effacement) pour obtenir une sorte de fonctionnalité RAID5/6 généralisée. Les réserves répliquées nécessitent plus de stockage brut, tandis que les réserves codées à effacement en exigent moins. Le paramètre par défaut est replicated. Pour plus d'informations sur les réserves codées à effacement, reportez-vous au Chapitre 19, Réserves codées à effacement.

Pour créer une réserve répliquée, exécutez :

cephuser@adm > ceph osd pool create POOL_NAME
Note
Note

La mise à l'échelle automatique se chargera des arguments facultatifs restants. Pour plus d'informations, reportez-vous à la Section 17.4.12, « Activation de la mise à l'échelle automatique des groupes de placement ».

Pour créer une réserve codée à effacement, exécutez :

cephuser@adm > ceph osd pool create POOL_NAME erasure CRUSH_RULESET_NAME \
EXPECTED_NUM_OBJECTS

La commande ceph osd pool create peut échouer si vous dépassez la limite de groupes de placement par OSD. La limite est définie avec l'option mon_max_pg_per_osd.

POOL_NAME

Nom de la réserve. Il doit être unique. Cette option est obligatoire.

POOL_TYPE

Le type de réserve qui peut être soit répliqué pour récupérer des OSD perdus en conservant plusieurs copies des objets ou à effacement pour obtenir une sorte de fonctionnalité RAID5 généralisée. Les réserves répliquées nécessitent plus de stockage brut mais implémentent toutes les opérations Ceph. Les réserves à effacement nécessitent moins de stockage brut, mais implémentent uniquement un sous-ensemble des opérations disponibles. La valeur par défaut de POOL_TYPE est replicated.

CRUSH_RULESET_NAME

Nom de l'ensemble de règles CRUSH de cette réserve. Si l'ensemble de règles indiqué n'existe pas, la création de réserves répliquées échoue avec -ENOENT. Pour les réserves répliquées, il s'agit de l'ensemble de règles spécifié par la variable de configuration osd pool default CRUSH replicated ruleset. Cet ensemble de règles doit exister. Pour les réserves à effacement, il s'agit de « erasure-code » si le profil de code à effacement par défaut est utilisé, sinon de NOM_RÉSERVE. Cet ensemble de règles sera créé implicitement s'il n'existe pas déjà.

erasure_code_profile=profile

Pour les réserves codées à effacement uniquement. Utilisez le profil de code d'effacement. Il doit s'agir d'un profil existant tel que défini par osd erasure-code-profile set.

Note
Note

Si, pour une raison quelconque, la mise à l'échelle automatique a été désactivée (pg_autoscale_mode désactivé) sur une réserve, vous pouvez calculer et définir manuellement le nombre de groupes de placement. Reportez-vous à la Section 17.4, « Groupes de placement » pour plus d'informations sur le calcul du nombre de groupes de placement approprié pour votre réserve.

EXPECTED_NUM_OBJECTS

Nombre d'objets attendu pour cette réserve. En définissant cette valeur (avec un seuil filestore merge threshold négatif), le fractionnement du dossier de groupes de placement se produit au moment de la création de la réserve. Cela évite l'impact de latence lié au fractionnement du dossier à l'exécution.

18.2 Liste des réserves

Pour afficher la liste des réserves de la grappe, exécutez :

cephuser@adm > ceph osd pool ls

18.3 Modification du nom d'une réserve

Pour renommer une réserve, exécutez :

cephuser@adm > ceph osd pool rename CURRENT_POOL_NAME NEW_POOL_NAME

Si vous renommez une réserve et que vous disposez de fonctions de réserve pour un utilisateur authentifié, vous devez mettre à jour les fonctions de l'utilisateur avec le nouveau nom de réserve.

18.4 Suppression d'une réserve

Avertissement
Avertissement : la suppression d'une réserve est irréversible

Les réserves peuvent contenir des données importantes. La suppression d'une réserve entraîne la disparition de toutes les données qu'elle contient et l'impossibilité de la récupérer.

Comme la suppression accidentelle d'une réserve constitue un réel danger, Ceph implémente deux mécanismes qui empêchent cette suppression. Ces deux mécanismes doivent être désactivés avant la suppression d'une réserve.

Le premier mécanisme consiste à utiliser l'indicateur NODELETE. Chaque réserve possède cet indicateur dont la valeur par défaut est « false ». Pour connaître la valeur de cet indicateur sur une réserve, exécutez la commande suivante :

cephuser@adm > ceph osd pool get pool_name nodelete

Si elle génère nodelete: true, il n'est pas possible de supprimer la réserve tant que vous ne modifiez pas l'indicateur à l'aide de la commande suivante :

cephuser@adm > ceph osd pool set pool_name nodelete false

Le second mécanisme est le paramètre de configuration de la grappe mon allow pool delete, qui est « false » par défaut. Cela signifie que, par défaut, il n'est pas possible de supprimer une réserve. Le message d'erreur affiché est le suivant :

Error EPERM: pool deletion is disabled; you must first set the
mon_allow_pool_delete config option to true before you can destroy a pool

Pour supprimer la réserve malgré ce paramètre de sécurité, vous pouvez définir temporairement mon allow pool delete sur « true », supprimer la réserve, puis renvoyer le paramètre avec « false » :

cephuser@adm > ceph tell mon.* injectargs --mon-allow-pool-delete=true
cephuser@adm > ceph osd pool delete pool_name pool_name --yes-i-really-really-mean-it
cephuser@adm > ceph tell mon.* injectargs --mon-allow-pool-delete=false

La commande injectargs affiche le message suivant :

injectargs:mon_allow_pool_delete = 'true' (not observed, change may require restart)

Cela confirme simplement que la commande a été exécutée avec succès. Il ne s'agit pas d'une erreur.

Si vous avez défini vos propres ensembles de règles et règles pour une réserve que vous avez créée, vous devez envisager de les supprimer lorsque vous n'avez plus besoin de la réserve.

18.5 Autres opérations

18.5.1 Association de réserves à une application

Pour pouvoir utiliser les réserves, vous devez les associer à une application. Les réserves qui seront utilisées avec CephFS ou les réserves créées automatiquement par Object Gateway sont automatiquement associées.

Pour les autres cas, vous pouvez associer manuellement un nom de l'application de format libre à une réserve :

cephuser@adm > ceph osd pool application enable POOL_NAME APPLICATION_NAME
Astuce
Astuce : noms d'application par défaut

CephFS utilise le nom de l'application cephfs, le périphérique de bloc RADOS emploie rbd et la passerelle Object Gateway fait appel à rgw.

Une réserve peut être associée à plusieurs applications et chaque application peut avoir ses propres métadonnées. Pour lister l'application (ou les applications) associée(s) à une réserve, exécutez la commande suivante :

cephuser@adm > ceph osd pool application get pool_name

18.5.2 Définition de quotas de réserve

Vous pouvez définir des quotas de réserve pour le nombre maximal d'octets et/ou le nombre maximal d'objets par réserve.

cephuser@adm > ceph osd pool set-quota POOL_NAME MAX_OBJECTS OBJ_COUNT MAX_BYTES BYTES

Par exemple :

cephuser@adm > ceph osd pool set-quota data max_objects 10000

Pour supprimer un quota, définissez sa valeur sur 0.

18.5.3 Affichage des statistiques d'une réserve

Pour afficher les statistiques d'utilisation d'une réserve, exécutez :

cephuser@adm > rados df
 POOL_NAME                    USED OBJECTS CLONES COPIES MISSING_ON_PRIMARY UNFOUND DEGRADED  RD_OPS      RD  WR_OPS      WR USED COMPR UNDER COMPR
 .rgw.root                 768 KiB       4      0     12                  0       0        0      44  44 KiB       4   4 KiB        0 B         0 B
 cephfs_data               960 KiB       5      0     15                  0       0        0    5502 2.1 MiB      14  11 KiB        0 B         0 B
 cephfs_metadata           1.5 MiB      22      0     66                  0       0        0      26  78 KiB     176 147 KiB        0 B         0 B
 default.rgw.buckets.index     0 B       1      0      3                  0       0        0       4   4 KiB       1     0 B        0 B         0 B
 default.rgw.control           0 B       8      0     24                  0       0        0       0     0 B       0     0 B        0 B         0 B
 default.rgw.log               0 B     207      0    621                  0       0        0 5372132 5.1 GiB 3579618     0 B        0 B         0 B
 default.rgw.meta          961 KiB       6      0     18                  0       0        0     155 140 KiB      14   7 KiB        0 B         0 B
 example_rbd_pool          2.1 MiB      18      0     54                  0       0        0 3350841 2.7 GiB     118  98 KiB        0 B         0 B
 iscsi-images              769 KiB       8      0     24                  0       0        0 1559261 1.3 GiB      61  42 KiB        0 B         0 B
 mirrored-pool             1.1 MiB      10      0     30                  0       0        0  475724 395 MiB      54  48 KiB        0 B         0 B
 pool2                         0 B       0      0      0                  0       0        0       0     0 B       0     0 B        0 B         0 B
 pool3                     333 MiB      37      0    111                  0       0        0 3169308 2.5 GiB   14847 118 MiB        0 B         0 B
 pool4                     1.1 MiB      13      0     39                  0       0        0 1379568 1.1 GiB   16840  16 MiB        0 B         0 B

Une description de chaque colonne suit :

USED

Nombre d'octets utilisés par la réserve.

OBJECTS

Nombre d'objets stockés dans la réserve.

CLONES

Nombre de clones stockés dans la réserve. Lorsqu'un instantané est créé et que l'on écrit dans un objet, au lieu de modifier l'objet d'origine, son clone est créé de sorte que le contenu de l'objet instantané d'origine n'est pas modifié.

COPIES

Nombre de répliques d'objets. Par exemple, si une réserve répliquée avec le facteur de réplication 3 a « x » objets, elle aura normalement 3 * x copies.

MISSING_ON_PRIMARY

Nombre d'objets dans l'état altéré (toutes les copies n'existent pas) alors que la copie est manquante sur l'OSD primaire.

UNFOUND

Nombre d'objets introuvables.

DEGRADED

Nombre d'objets altérés.

RD_OPS

Nombre total d'opérations de lecture demandées pour cette réserve.

RD

Nombre total d'octets lus à partir de cette réserve.

WR_OPS

Nombre total d'opérations d'écriture demandées pour cette réserve.

WR

Nombre total d'octets écrits dans la réserve. Notez que cela n'est pas la même chose que l'utilisation de la réserve, car vous pouvez écrire plusieurs fois sur le même objet. Au final, l'utilisation de la réserve restera la même, mais le nombre d'octets qui y sont écrits augmentera.

USED COMPR

Nombre d'octets alloués aux données compressées.

UNDER COMPR

Nombre d'octets occupés par les données compressées lorsqu'elles ne sont pas compressées.

18.5.4 Obtention de valeurs d'une réserve

Pour obtenir une valeur à partir d'une réserve, exécutez la commande get suivante :

cephuser@adm > ceph osd pool get POOL_NAME KEY

Vous pouvez obtenir des valeurs pour les clés répertoriées à la Section 18.5.5, « Définition des valeurs d'une réserve » ainsi que les clés suivantes :

PG_NUM

Nombre de groupes de placement pour la réserve.

PGP_NUM

Nombre effectif de groupes de placement à utiliser lors du calcul du placement des données. La plage valide est inférieure ou égale à PG_NUM.

Astuce
Astuce : toutes les valeurs d'une réserve

Pour répertorier toutes les valeurs associées à une réserve spécifique, exécutez :

 cephuser@adm > ceph osd pool get POOL_NAME all

18.5.5 Définition des valeurs d'une réserve

Pour définir une valeur d'une réserve, exécutez :

cephuser@adm > ceph osd pool set POOL_NAME KEY VALUE

La liste ci-dessous répertorie les valeurs de réserve triées par type de réserve :

Valeurs de réserve commune
crash_replay_interval

Nombre de secondes pendant lesquelles les clients peuvent relire les requêtes acquittées mais non validées.

pg_num

Nombre de groupes de placement pour la réserve. Si vous ajoutez des OSD à la grappe, vérifiez la valeur des groupes de placement sur toutes les réserves ciblées pour les nouveaux OSD.

pgp_num

Nombre effectif de groupes de placement à utiliser lors du calcul du placement des données.

crush_ruleset

Ensemble de règles à utiliser pour l'assignation de placement d'objets dans la grappe.

hashpspool

Définissez (1) ou désélectionnez (0) l'indicateur HASHPSPOOL sur une réserve donnée. L'activation de cet indicateur modifie l'algorithme pour mieux répartir les PG sur les OSD. Après avoir activé ce drapeau sur une réserve dont le drapeau HASHPSPOOL avait été défini par défaut sur 0, la grappe commence à effectuer des renvois afin de rétablir le placement correct de tous les groupes de placement. Cette activation pouvant créer une charge d'E/S assez importante sur une grappe, ne passez pas le drapeau de 0 à 1 sur les grappes de production très chargées.

nodelete

Empêche la suppression de la réserve.

nopgchange

Empêche la modification des options pg_num et pgp_num de la réserve.

noscrub, nodeep-scrub

Désactive le nettoyage (en profondeur) des données pour la réserve en particulier afin de résoudre une charge d'E/S élevée temporaire.

write_fadvise_dontneed

Sélectionnez ou désélectionnez l'indicateur WRITE_FADVISE_DONTNEED sur les requêtes de lecture/d'écriture d'une réserve donnée afin de contourner la mise en cache des données. La valeur par défaut est false. S'applique aux réserves répliquées et EC.

scrub_min_interval

Intervalle minimal en secondes pour le nettoyage des réserves lorsque la charge de la grappe est faible. La valeur par défaut 0 signifie que la valeur de osd_scrub_min_interval du fichier de configuration Ceph est utilisée.

scrub_max_interval

Intervalle maximal en secondes pour le nettoyage des réserves, quelle que soit la charge de la grappe. La valeur par défaut 0 signifie que la valeur de osd_scrub_max_interval du fichier de configuration Ceph est utilisée.

deep_scrub_interval

Intervalle en secondes pour le nettoyage en profondeur de la grappe. La valeur par défaut 0 signifie que la valeur de osd_deep_scrub du fichier de configuration Ceph est utilisée.

Valeurs de réserve répliquée
size

Définit le nombre de répliques d'objets dans la réserve. Pour plus d'informations, reportez-vous à la Section 18.5.6, « Définition du nombre de répliques d'objets ». Réserves répliquées uniquement.

min_size

Définit le nombre minimum de répliques requises pour les E/S. Reportez-vous à la Section 18.5.6, « Définition du nombre de répliques d'objets » pour plus de détails. Réserves répliquées uniquement.

nosizechange

Empêche la modification de la taille de la réserve. Lorsqu'une réserve est créée, la valeur par défaut est tirée de la valeur du paramètre osd_pool_default_flag_nosizechange, lequel est défini par défaut sur false. S'applique uniquement aux réserves répliquées, car la taille des réserves EC ne peut pas être modifiée.

hit_set_type

Active le suivi des jeux d'accès pour les réserves de cache. Reportez-vous à l'article Filtre de Bloom pour obtenir des informations complémentaires. Cette option accepte l'une des valeurs suivantes : bloom, explicit_hash, explicit_object. La valeur par défaut est bloom, les autres valeurs sont utilisées à des fins de test uniquement.

hit_set_count

Nombre de jeux d'accès à stocker dans les réserves de cache. Plus le nombre est élevé, plus le daemon ceph-osd consomme une quantité importante de mémoire vive. La valeur par défaut est 0.

hit_set_period

Durée d'une période de jeu d'accès définie en secondes pour les réserves de cache. Plus le nombre est élevé, plus le daemon ceph-osd consomme une quantité importante de mémoire vive. Lorsqu'une réserve est créée, la valeur par défaut est tirée de la valeur du paramètre osd_tier_default_cache_hit_set_period, lequel est défini par défaut sur 1200. S'applique uniquement aux réserves répliquées, car les réserves EC ne peuvent pas être utilisées en tant que niveau de cache.

hit_set_fpp

Probabilité de faux positifs pour le type de jeu d'accès de filtre de Bloom. Reportez-vous à l'article Filtre de Bloom pour obtenir des informations complémentaires. La plage valide est comprise entre 0.0 et 1.0. La valeur par défaut est 0.05.

use_gmt_hitset

Forcez les OSD à utiliser les horodatages GMT (Greenwich Mean Time) lors de la création d'un jeu d'accès pour la hiérarchisation du cache. Cela garantit que les noeuds situés dans des fuseaux horaires différents retournent le même résultat. La valeur par défaut est 1. Cette valeur ne doit pas être modifiée.

cache_target_dirty_ratio

Pourcentage de la réserve de cache contenant des objets modifiés (altérés) avant que l'agent de hiérarchisation du cache les transfère à la réserve de stockage de sauvegarde. La valeur par défaut est 0.4.

cache_target_dirty_high_ratio

Vous pouvez indiquer l'âge minimal d'un objet récemment modifié (altéré) avant que l'agent de hiérarchisation du cache le transfère à la réserve de stockage de sauvegarde à une vitesse supérieure. La valeur par défaut est 0.6.

cache_target_full_ratio

Pourcentage de la réserve de cache contenant des objets non modifiés (propres) avant que l'agent de hiérarchisation du cache les élimine de la réserve de cache. La valeur par défaut est 0.8.

target_max_bytes

Ceph commence à vider ou à éliminer des objets lorsque le seuil max_bytes est déclenché.

target_max_objects

Ceph commence à vider ou à éliminer des objets lorsque le seuil max_objects est déclenché.

hit_set_grade_decay_rate

Taux de baisse de la température entre deux hit_set successifs. Valeur par défaut : 20.

hit_set_search_last_n

Comptez au plus N apparitions dans les valeurs de hit_set pour le calcul de la température. La valeur par défaut est 1.

cache_min_flush_age

Durée (en secondes) avant que l'agent de hiérarchisation du cache vide un objet de la réserve de cache vers la réserve de stockage.

cache_min_evict_age

Durée (en secondes) avant que l'agent de hiérarchisation du cache élimine un objet de la réserve de cache.

Valeurs de réserve codée à effacement
fast_read

Si cet indicateur est activé sur les réserves de codage à effacement, la demande de lecture émet des sous-lectures sur toutes les partitions et attend de recevoir un nombre suffisant de fragments à décoder afin de servir le client. Dans le cas des plug-ins jerasure et isa, lorsque les premières réponses K sont retournées, la requête du client est servie immédiatement avec les données décodées issues de ces réponses. Cette approche augmente la charge de processeur et diminue la charge de disque/réseau. Pour le moment, cet indicateur est pris en charge uniquement pour les réserves de codage à effacement. La valeur par défaut est 0.

18.5.6 Définition du nombre de répliques d'objets

Pour définir le nombre de répliques d'objets sur un réserve répliquée, exécutez la commande suivante :

cephuser@adm > ceph osd pool set poolname size num-replicas

num-replicas inclut l'objet lui-même. Si vous souhaitez, par exemple, l'objet et deux copies de l'objet pour obtenir au total trois instances de l'objet, indiquez 3.

Avertissement
Avertissement : ne définissez pas moins de 3 répliques

Si vous définissez num-replicas sur 2, une seule copie de vos données est disponible. Si vous perdez une instance d'objet, vous devez être sûr que l'autre copie n'a pas été endommagée, par exemple depuis le dernier nettoyage pendant la récupération (pour plus d'informations, reportez-vous à la Section 17.6, « Nettoyage des groupes de placement »).

La définition d'une réserve à réplique unique implique qu'il existe exactement une instance de l'objet de données dans la réserve. Si l'OSD échoue, vous perdez les données. Une utilisation possible d'une réserve avec une réplique consiste à stocker des données temporaires pendant une courte période.

Astuce
Astuce : définition de plus de 3 répliques

La définition de 4 répliques pour une réserve augmente la fiabilité de 25 %.

Dans le cas de deux centres de données, vous devez définir au moins 4 répliques pour une réserve de sorte à avoir deux copies dans chaque centre de données. De cette façon, en cas de perte d'un centre de données, il existe toujours deux copies et vous pouvez perdre un disque sans perdre de données.

Note
Note

Un objet peut accepter des E/S en mode dégradé avec moins de pool size répliques. Pour définir un nombre minimum de répliques requis pour les E/S, vous devez utiliser le paramètre min_size. Par exemple :

cephuser@adm > ceph osd pool set data min_size 2

Cela garantit qu'aucun objet de la réserve de données ne recevra d'E/S avec moins de min_size répliques.

Astuce
Astuce : obtention du nombre de répliques d'objets

Pour obtenir le nombre de répliques d'objet, exécutez la commande suivante :

cephuser@adm > ceph osd dump | grep 'replicated size'

Ceph dresse la liste des réserves en mettant en surbrillance l'attribut replicated size. Par défaut, Ceph crée deux répliques d'un objet (soit un total de trois copies ou une taille de 3).

18.6 Migration d'une réserve

Lors de la création d'une réserve (voir Section 18.1, « Création d'une réserve »), vous devez indiquer ses paramètres initiaux, tels que le type de réserve ou le nombre de groupes de placement. Si vous décidez ultérieurement de modifier l'un de ces paramètres, par exemple lors de la conversion d'une réserve répliquée en réserve codée à effacement ou de la diminution du nombre de groupes de placement, vous devez migrer les données de réserve vers une autre réserve dont les paramètres conviennent à votre déploiement.

Cette section décrit deux méthodes de migration : une méthode de niveau de cache pour la migration générale des données d'une réserve, et une méthode utilisant des sous-commandes rbd migrate pour migrer des images RBD vers une nouvelle réserve. Chaque méthode a ses spécificités et ses limites.

18.6.1 Limites

  • Vous pouvez utiliser la méthode de niveau de cache pour migrer une réserve répliquée vers une réserve EC ou vers une autre réserve répliquée. La migration à partir d'une réserve EC n'est pas prise en charge.

  • Vous ne pouvez pas migrer des images RBD et des exportations CephFS depuis une réserve répliquée vers une réserve codée à effacement (EC), car les réserves EC ne prennent pas en charge omap, alors que RBD et CephFS utilisent omap pour stocker leurs métadonnées. Par exemple, l'objet d'en-tête de RBD ne sera pas vidé. En revanche, vous pouvez migrer des données vers une réserve EC, en laissant les métadonnées dans la réserve répliquée.

  • La méthode rbd migration permet de migrer des images avec un temps hors service minimal du client. Vous ne devez arrêter le client qu'avant l'étape de préparation et pouvez le redémarrer après. Notez que seul un client librbd qui prend en charge cette fonction (Ceph Nautilus ou plus récent) sera en mesure d'ouvrir l'image juste après l'étape de préparation. Les clients librbd plus anciens ou les clients krbd ne pourront pas ouvrir l'image avant l'exécution de l'étape de validation.

18.6.2 Migration à l'aide du niveau de cache

Le principe est simple : incluez la réserve dont vous avez besoin pour migrer dans un niveau de cache dans l'ordre inverse. L'exemple suivant illustre la migration d'une réserve répliquée appelée « testpool » vers une réserve codée à effacement :

Procédure 18.1 : Migration d'une réserve répliquée vers une réserve codée à effacement
  1. Créez une réserve codée à effacement nommée « newpool ». Pour plus d'informations sur les paramètres de création d'une réserve, reportez-vous à la Section 18.1, « Création d'une réserve ».

     cephuser@adm > ceph osd pool create newpool erasure default

    Vérifiez que le trousseau de clés client utilisé fournit au moins les mêmes fonctionnalités pour « newpool » que pour « testpool ».

    Vous avez maintenant deux réserves : la réserve répliquée initiale « testpool » contenant des données et la nouvelle réserve codée à effacement « newpool » :

    Réserves avant migration
    Figure 18.1 : Réserves avant migration
  2. Configurez le niveau de cache et la réserve répliquée « testpool » en tant que réserve de cache. L'option -force-nonempty permet d'ajouter un niveau de cache même si la réserve a déjà des données :

    cephuser@adm > ceph tell mon.* injectargs \
     '--mon_debug_unsafe_allow_tier_with_nonempty_snaps=1'
    cephuser@adm > ceph osd tier add newpool testpool --force-nonempty
    cephuser@adm > ceph osd tier cache-mode testpool proxy
    Configuration du niveau de cache
    Figure 18.2 : Configuration du niveau de cache
  3. Forcez la réserve de cache à déplacer tous les objets vers la nouvelle réserve :

    cephuser@adm > rados -p testpool cache-flush-evict-all
    Vidage des données
    Figure 18.3 : Vidage des données
  4. Tant que toutes les données n'ont pas été vidées vers la nouvelle réserve codée à effacement, vous devez indiquer une superposition afin que les recherches d'objets s'effectuent dans l'ancienne réserve :

    cephuser@adm > ceph osd tier set-overlay newpool testpool

    Avec la superposition, toutes les opérations sont réacheminées vers l'ancienne réserve « testpool » répliquée :

    Définition de la superposition
    Figure 18.4 : Définition de la superposition

    Vous pouvez maintenant basculer tous les clients pour accéder aux objets de la nouvelle réserve.

  5. Une fois toutes les données migrées vers la réserve codée à effacement « newpool », supprimez la superposition et l'ancienne réserve de cache « testpool » :

    cephuser@adm > ceph osd tier remove-overlay newpool
    cephuser@adm > ceph osd tier remove newpool testpool
    Migration effectuée
    Figure 18.5 : Migration effectuée
  6. Exécutez :

    cephuser@adm > ceph tell mon.* injectargs \
     '--mon_debug_unsafe_allow_tier_with_nonempty_snaps=0'

18.6.3 Migration d'images RBD

Voici la méthode recommandée pour migrer des images RBD d'une réserve répliquée vers une autre réserve répliquée.

  1. Empêchez les clients (une machine virtuelle, par exemple) d'accéder à l'image RBD.

  2. Créez une image dans la réserve cible, avec le parent défini sur l'image source :

    cephuser@adm > rbd migration prepare SRC_POOL/IMAGE TARGET_POOL/IMAGE
    Astuce
    Astuce : migration de données uniquement vers une réserve codée à effacement

    Si vous devez migrer uniquement les données d'image vers une nouvelle réserve EC et laisser les métadonnées dans la réserve répliquée d'origine, exécutez la commande suivante à la place :

    cephuser@adm > rbd migration prepare SRC_POOL/IMAGE \
     --data-pool TARGET_POOL/IMAGE
  3. Laissez les clients accéder à l'image dans la réserve cible.

  4. Migrez les données vers la réserve cible :

    cephuser@adm > rbd migration execute SRC_POOL/IMAGE
  5. Supprimez l'ancienne image :

    cephuser@adm > rbd migration commit SRC_POOL/IMAGE

18.7 Instantanés de réserve

Les instantanés de réserve sont des instantanés de l'état de l'ensemble de la réserve Ceph. Avec les instantanés de réserve, vous pouvez conserver l'historique de l'état de la réserve. La création d'instantanés de réserve consomme un espace de stockage proportionnel à la taille de la réserve. Vérifiez toujours que le stockage associé possède un espace disque suffisant avant de créer un instantané d'une réserve.

18.7.1 Création d'un instantané d'une réserve

Pour créer un instantané d'une réserve, exécutez :

cephuser@adm > ceph osd pool mksnap POOL-NAME SNAP-NAME

Par exemple :

cephuser@adm > ceph osd pool mksnap pool1 snap1
created pool pool1 snap snap1

18.7.2 Liste des instantanés d'une réserve

Pour lister les instantanés existants d'une réserve, exécutez :

cephuser@adm > rados lssnap -p POOL_NAME

Par exemple :

cephuser@adm > rados lssnap -p pool1
1	snap1	2018.12.13 09:36:20
2	snap2	2018.12.13 09:46:03
2 snaps

18.7.3 Suppression d'un instantané d'une réserve

Pour supprimer un instantané d'une réserve, exécutez :

cephuser@adm > ceph osd pool rmsnap POOL-NAME SNAP-NAME

18.8 Compression des données

BlueStore (voir Section 1.4, « BlueStore » pour plus de détails) fournit la compression des données à la volée pour économiser de l'espace disque. Le rapport de compression dépend des données stockées sur le système. Notez que la compression/décompression nécessite davantage de ressources processeur.

Vous pouvez configurer la compression des données globalement (voir Section 18.8.3, « Options de compression globales »), puis remplacer les paramètres de compression spécifiques pour chaque réserve.

Vous pouvez activer ou désactiver la compression des données de réserve, ou modifier l'algorithme et le mode de compression à tout moment, que la réserve contienne des données ou non.

Aucune compression ne sera appliquée aux données existantes après avoir activé la compression de la réserve.

Après avoir désactivé la compression d'une réserve, toutes ses données seront décompressées.

18.8.1 Activation de la compression

Pour activer la compression des données pour une réserve nommée POOL_NAME, exécutez la commande suivante :

cephuser@adm > ceph osd pool set POOL_NAME compression_algorithm COMPRESSION_ALGORITHM
cephuser@adm > ceph osd pool set POOL_NAME compression_mode COMPRESSION_MODE
Astuce
Astuce : désactivation de la compression d'une réserve

Pour désactiver la compression des données pour une réserve, utilisez « none » comme algorithme de compression :

cephuser@adm > ceph osd pool set POOL_NAME compression_algorithm none

18.8.2 Options de compression de réserve

Liste complète de paramètres de compression :

compression_algorithm

Les valeurs possibles sont none, zstd, snappy. La valeur par défaut est snappy.

L'algorithme de compression à utiliser dépend du cas d'utilisation particulier. Voici quelques recommandations :

  • Utilisez la valeur par défaut snappy tant que vous n'avez pas une raison valable d'en changer.

  • zstd offre un bon rapport de compression, mais provoque un overhead important du processeur lors de la compression de petites quantités de données.

  • Effectuez un banc d'essai de ces algorithmes sur un échantillon de vos données réelles tout en gardant un oeil sur l'utilisation du processeur et de la mémoire de votre grappe.

compression_mode

Les valeurs possibles sont none, aggressive, passive et force. La valeur par défaut est none.

  • none : jamais de compression

  • passive : compresser si COMPRESSIBLE est suggéré

  • aggressive : compresser sauf si INCOMPRESSIBLE est suggéré

  • force : compresser toujours

compression_required_ratio

Valeur : Double, Ratio = SIZE_COMPRESSED / SIZE_ORIGINAL. La valeur par défaut est 0,875, ce qui signifie que si la compression ne réduit pas l'espace occupé d'au moins 12,5 %, l'objet ne sera pas compressé.

Les objets au-dessus de ce ratio ne seront pas stockés dans un format compressé en raison du faible gain net.

compression_max_blob_size

Valeur : entier non signé, taille en octets. Valeur par défaut : 0

Taille maximale des objets compressés.

compression_min_blob_size

Valeur : entier non signé, taille en octets. Valeur par défaut : 0

Taille minimale des objets compressés.

18.8.3 Options de compression globales

Les options de configuration suivantes peuvent être définies dans la configuration Ceph et s'appliquent à tous les OSD et non pas seulement à une réserve. La configuration spécifique de la réserve répertoriée à la Section 18.8.2, « Options de compression de réserve » prévaut.

bluestore_compression_algorithm

Reportez-vous à la section compression_algorithm

bluestore_compression_mode

Reportez-vous à la section compression_mode

bluestore_compression_required_ratio

Reportez-vous à la section compression_required_ratio

bluestore_compression_min_blob_size

Valeur : entier non signé, taille en octets. Valeur par défaut : 0

Taille minimale des objets compressés. Le paramètre est ignoré par défaut en faveur de bluestore_compression_min_blob_size_hdd et bluestore_compression_min_blob_size_ssd. Il est prioritaire lorsqu'il est défini sur une valeur différente de zéro.

bluestore_compression_max_blob_size

Valeur : entier non signé, taille en octets. Valeur par défaut : 0

Taille maximale des objets qui sont compressés avant d'être divisés en petites tranches. Le paramètre est ignoré par défaut en faveur de bluestore_compression_max_blob_size_hdd et bluestore_compression_max_blob_size_ssd. Il est prioritaire lorsqu'il est défini sur une valeur différente de zéro.

bluestore_compression_min_blob_size_ssd

Valeur : entier non signé, taille en octets. Valeur par défaut : 8 000

Taille minimale des objets compressés et stockés sur une unité SSD.

bluestore_compression_max_blob_size_ssd

Valeur : entier non signé, taille en octets. Valeur par défaut : 64 000

Taille maximale des objets qui sont compressés et stockés sur disque SSD (Solid-State Drive) avant qu'ils ne soient divisés en plus petites tranches.

bluestore_compression_min_blob_size_hdd

Valeur : entier non signé, taille en octets. Valeur par défaut : 128 000

Taille minimale des objets compressés et stockés sur disques durs.

bluestore_compression_max_blob_size_hdd

Valeur : entier non signé, taille en octets. Valeur par défaut : 512 000

Taille maximale des objets qui sont compressés et stockés sur des disques durs avant qu'ils ne soient divisés en plus petites tranches.