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 ») oucodé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 dek
etm
,k
correspondant au nombre de tranches de données etm
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
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 dePOOL_TYPE
estreplicated
.- 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
.NoteSi, 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 #
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=truecephuser@adm >
ceph osd pool delete pool_name pool_name --yes-i-really-really-mean-itcephuser@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
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
.
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 :
- 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
etpgp_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 estfalse
. 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 deosd_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 deosd_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 deosd_deep_scrub
du fichier de configuration Ceph est utilisé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 surfalse
. 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 estbloom
, 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 est0
.- 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ètreosd_tier_default_cache_hit_set_period
, lequel est défini par défaut sur1200
. 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 dehit_set
pour le calcul de la température. La valeur par défaut est1
.- 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.
- 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 est0
.
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.
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.
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.
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.
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 utilisentomap
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 depréparation
et pouvez le redémarrer après. Notez que seul un clientlibrbd
qui prend en charge cette fonction (Ceph Nautilus ou plus récent) sera en mesure d'ouvrir l'image juste après l'étape depréparation
. Les clientslibrbd
plus anciens ou les clientskrbd
ne pourront pas ouvrir l'image avant l'exécution de l'étape devalidation
.
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 :
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 defaultVé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 » :
Figure 18.1 : Réserves avant migration #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-nonemptycephuser@adm >
ceph osd tier cache-mode testpool proxyFigure 18.2 : Configuration du niveau de cache #Forcez la réserve de cache à déplacer tous les objets vers la nouvelle réserve :
cephuser@adm >
rados -p testpool cache-flush-evict-allFigure 18.3 : Vidage des données #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 testpoolAvec la superposition, toutes les opérations sont réacheminées vers l'ancienne réserve « testpool » répliquée :
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.
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 newpoolcephuser@adm >
ceph osd tier remove newpool testpoolFigure 18.5 : Migration effectuée #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.
Empêchez les clients (une machine virtuelle, par exemple) d'accéder à l'image RBD.
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/IMAGEAstuce : migration de données uniquement vers une réserve codée à effacementSi 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/IMAGELaissez les clients accéder à l'image dans la réserve cible.
Migrez les données vers la réserve cible :
cephuser@adm >
rbd migration execute SRC_POOL/IMAGESupprimez 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_ALGORITHMcephuser@adm >
ceph
osd pool set POOL_NAME compression_mode COMPRESSION_MODE
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 estsnappy
.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
etforce
. La valeur par défaut estnone
.none
: jamais de compressionpassive
: compresser siCOMPRESSIBLE
est suggéréaggressive
: compresser sauf siINCOMPRESSIBLE
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
etbluestore_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
etbluestore_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.