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.
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' createdLa chaîne
ABCDEFGHI
est écrite dans un objet appeléNYAN
.cephuser@adm >
echo ABCDEFGHI | rados --pool ecpool put NYAN -À des fins de test, les OSD peuvent alors être désactivés, par exemple en les déconnectant du réseau.
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é enk
objets de 5 Ko chacun. La valeur par défaut demin_size
sur les réserves codées à effacement estk + 1
. Cependant, nous recommandons une valeurmin_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 myprofilecephuser@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.
19.3.1 Création d'un profil de code à effacement #
La commande suivante crée un profil de code à effacement :
#
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) :
#
ceph osd erasure-code-profile rm NAME
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) :
#
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 :
#
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 ».