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 / Réserves codées à effacement
S'applique à SUSE Enterprise Storage 7

19 Réserves codées à effacement

Ceph fournit une alternative à la réplication normale des données dans les réserves : elle est appelée réserve à effacement ou réserve codée à effacement. Les réserves à effacement ne fournissent pas toutes les fonctionnalités des réserves répliquées (par exemple, elles ne peuvent pas stocker les métadonnées pour les réserves RBD), mais nécessitent moins de stockage brut. Une réserve à effacement par défaut capable de stocker 1 To de données requiert 1,5 To de stockage brut, ce qui permet une défaillance de disque. C'est un constat favorable par rapport à une réserve répliquée qui nécessite 2 To de stockage brut pour la même finalité.

Pour plus d'informations sur le code à effacement, reportez-vous à la page https://en.wikipedia.org/wiki/Erasure_code.

Pour obtenir la liste des valeurs de réserve associées aux réserves codées à effacement, reportez-vous à la section Valeurs de réserve codée à effacement.

19.1 Conditions préalables pour les réserves codées à effacement

Pour utiliser le codage à effacement, vous devez :

  • définir une règle d'effacement dans la carte CRUSH ;

  • définir un profil de code à effacement qui spécifie l'algorithme de codage à utiliser ;

  • créer une réserve utilisant la règle et le profil susmentionnés.

Gardez à l'esprit que la modification du profil et de ses détails ne sera pas possible une fois que la réserve aura été créée et contiendra des données.

Assurez-vous que les règles CRUSH des réserves à effacement utilisent indep pour step. Pour plus d’informations, reportez-vous à la Section 17.3.2, « firstn et indep ».

19.2 Création d'un exemple de réserve codée à effacement

La réserve codée à effacement la plus simple équivaut à une configuration RAID5 et nécessite au moins trois hôtes. Cette procédure décrit la création d’une réserve à des fins de test.

  1. La commande ceph osd pool create permet de créer une réserve de type effacement (erasure). 12 représente le nombre de groupes de placement. Avec les paramètres par défaut, la réserve est en mesure de gérer l’échec d’un OSD.

    cephuser@adm > ceph osd pool create ecpool 12 12 erasure
    pool 'ecpool' created
  2. La chaîne ABCDEFGHI est écrite dans un objet appelé NYAN.

    cephuser@adm > echo ABCDEFGHI | rados --pool ecpool put NYAN -
  3. À des fins de test, les OSD peuvent alors être désactivés, par exemple en les déconnectant du réseau.

  4. Pour tester si la réserve peut gérer l’échec des périphériques, il est possible d’accéder au contenu du fichier à l’aide de la commande rados.

    cephuser@adm > rados --pool ecpool get NYAN -
    ABCDEFGHI

19.3 Profils de code à effacement

Lorsque la commande ceph osd pool create est appelée pour créer une réserve à effacement, le profil par défaut est utilisé, sauf si un autre profil est indiqué. Les profils définissent la redondance des données, à l’aide de deux paramètres, arbitrairement nommés k et m. k et m définissent en combien de tranches une donnée est divisée et combien de tranches de codage sont créées. Les tranches redondantes sont ensuite stockées sur des OSD différents.

Définitions requises pour les profils de réserves à effacement :

tranche

Lorsqu’elle est appelée, la fonction de codage renvoie des tranches (« chunks ») de même taille : des tranches de données pouvant être concaténées pour reconstruire l’objet d’origine et des tranches de codage pouvant être utilisées pour la reconstruction d’une tranche perdue.

k

Nombre de tranches de données, c’est-à-dire le nombre de tranches divisant l’objet original. Par exemple si k = 2, un objet de 10 Ko sera divisé en k objets de 5 Ko chacun. La valeur par défaut de min_size sur les réserves codées à effacement est k + 1. Cependant, nous recommandons une valeur min_size k + 2 ou plus pour éviter la perte d'écritures et de données.

m

Nombre de tranches de codage, c’est-à-dire le nombre de tranches supplémentaires calculées par les fonctions de codage. S’il existe 2 tranches de codage, cela autorise l’échec de 2 OSD sans perte de données.

crush-failure-domain

Définit les périphériques auxquels les tranches sont distribuées. Un type de compartiment doit être défini en tant que valeur. Pour tous les types de compartiment, reportez-vous à la Section 17.2, « Compartiments ». Si le domaine en échec est de type rack, les tranches seront stockées sur des racks différents afin d’augmenter la résistance en cas de défaillances de racks. Gardez à l'esprit que cela nécessite k+m racks.

Avec le profil de code à effacement par défaut utilisé à la Section 19.2, « Création d'un exemple de réserve codée à effacement », vous ne perdrez pas de données de grappe si un seul OSD ou hôte échoue. Par conséquent, pour stocker 1 To de données, il faut encore 0,5 To de stockage brut. Cela signifie que 1,5 To de stockage brut est nécessaire pour 1 To de données (étant donné que k=2, m=1). Cette configuration équivaut à une configuration RAID 5 courante. À titre de comparaison, une réserve répliquée nécessite 2 To de stockage brut pour stocker 1 To de données.

Les paramètres du profil par défaut peuvent être affichés avec les commandes suivantes :

cephuser@adm > ceph osd erasure-code-profile get default
directory=.libs
k=2
m=1
plugin=jerasure
crush-failure-domain=host
technique=reed_sol_van

Le choix du bon profil est important, car il ne peut pas être modifié après la création de la réserve. Une réserve doit être créée avec un profil différent, et tous les objets de la réserve précédente doivent être déplacés vers la nouvelle (voir Section 18.6, « Migration d'une réserve »).

Les paramètres les plus importants du profil sont k, m et crush-failure-domain, car ils définissent l’overhead de stockage et la durabilité des données. Par exemple, si l'architecture souhaitée doit supporter la perte de deux racks avec un overhead de stockage de 66 %, le profil suivant peut être défini. Notez que cela n'est valable qu'avec une carte CRUSH comportant des compartiments de type « rack » :

cephuser@adm > ceph osd erasure-code-profile set myprofile \
   k=3 \
   m=2 \
   crush-failure-domain=rack

L’exemple de la Section 19.2, « Création d'un exemple de réserve codée à effacement » peut être répété avec ce nouveau profil :

cephuser@adm > ceph osd pool create ecpool 12 12 erasure myprofile
cephuser@adm > echo ABCDEFGHI | rados --pool ecpool put NYAN -
cephuser@adm > rados --pool ecpool get NYAN -
ABCDEFGHI

L’objet NYAN est divisé en trois (k=3) et deux tranches supplémentaires sont créées (m=2). La valeur de m définit le nombre d’OSD pouvant être perdus simultanément sans perte de données. crush-failure-domain=rack crée un ensemble de règles CRUSH qui garantit que deux tranches ne sont pas stockées dans le même rack.

Image

19.3.1 Création d'un profil de code à effacement

La commande suivante crée un profil de code à effacement :

root # ceph osd erasure-code-profile set NAME \
 directory=DIRECTORY \
 plugin=PLUGIN \
 stripe_unit=STRIPE_UNIT \
 KEY=VALUE ... \
 --force
DIRECTORY

Facultatif. Définissez le nom du répertoire à partir duquel le plug-in de code à effacement est chargé. Sa valeur par défaut est /usr/lib/ceph/erasure-code.

PLUGIN

Facultatif. Utilisez le plug-in de code à effacement pour calculer les tranches de codage et récupérer les tranches manquantes. Les plug-ins disponibles sont « jerasure », « jisa », « jlrc » et « jshes ». Le plug-in par défaut est « jerasure ».

STRIPE_UNIT

Facultatif. Quantité de données dans une tranche de données, par segment. Par exemple, un profil avec 2 tranches de données et stripe_unit=4K placerait la plage 0-4K dans la tranche 0, 4K-8K dans la tranche 1, puis 8K-12K de nouveau dans la tranche 0. Il doit s'agit d'un multiple de 4K pour de meilleures performances. La valeur par défaut est prise à partir de l'option de configuration du moniteur osd_pool_erasure_code_stripe_unit lors de la création d'une réserve. La valeur « stripe_width » d'une réserve utilisant ce profil sera le nombre de tranches de données multiplié par ce « stripe_unit ».

KEY=VALUE

Paires clé/valeur des options spécifiques au plug-in de code à effacement sélectionné.

--force

Facultatif. Permet de remplacer un profil existant portant le même nom et de définir une valeur stripe_unit non alignée sur 4K.

19.3.2 Suppression d'un profil de code à effacement

La commande suivante supprime un profil de code à effacement tel qu'identifié par son nom (NAME) :

root # ceph osd erasure-code-profile rm NAME
Important
Important

Si le profil est référencé par une réserve, la suppression échoue.

19.3.3 Affichage des détails d'un profil de code à effacement

La commande suivante affiche les détails d'un profil de code à effacement tel qu'identifié par son nom (NAME) :

root # ceph osd erasure-code-profile get NAME

19.3.4 Liste des profils de code à effacement

La commande suivante répertorie les noms de tous les profils de code à effacement :

root # ceph osd erasure-code-profile ls

19.4 Marquage des réserves codées à effacement avec périphérique de bloc RADOS (RBD)

Pour marquer une réserve EC (« Erasure Coded », codée à effacement) en tant que réserve RBD, étiquetez-la en conséquence :

cephuser@adm > ceph osd pool application enable rbd ec_pool_name

RBD peut stocker des données d’image dans des réserves EC. Cependant, l'en-tête et les métadonnées d'image doivent encore être stockées dans une réserve répliquée. En supposant que vous ayez la réserve nommée « rbd » à cet effet :

cephuser@adm > rbd create rbd/image_name --size 1T --data-pool ec_pool_name

Vous pouvez utiliser l’image normalement comme toute autre image, hormis que toutes les données seront stockées dans la réserve ec_pool_name et non pas dans la réserve « rbd ».