23 Système de fichiers en grappe #
Ce chapitre décrit les tâches d'administration normalement effectuées après la configuration de la grappe et l'exportation de CephFS. Pour plus d'informations sur la configuration de CephFS, reportez-vous au Section 5.4.3.3, « Déploiement de serveurs de métadonnées ».
23.1 Montage de CephFS #
Lorsque le système de fichiers est créé et que MDS est actif, vous êtes prêt à monter le système de fichiers à partir d'un hôte client.
23.1.1 Préparation du client #
Si l'hôte client exécute SUSE Linux Enterprise 12 SP2 ou une version ultérieure, le système est prêt à monter CephFS dans sa version « prête à l'emploi ».
Si l'hôte client exécute SUSE Linux Enterprise 12 SP1, vous devez appliquer tous les correctifs les plus récents avant de monter CephFS.
Dans tous les cas, SUSE Linux Enterprise inclut tout ce qui est nécessaire au montage de CephFS. Le produit SUSE Enterprise Storage 7 n'est pas nécessaire.
Pour prendre en charge la syntaxe complète de mount
, il est nécessaire d'installer le paquetage
ceph-common (fourni avec SUSE Linux Enterprise) pour pouvoir monter CephFS.
Sans le paquetage ceph-common (et donc sans le programme auxiliaire mount.ceph
), les adresses IP des moniteurs doivent être utilisées plutôt que leurs noms. Cela est dû au fait que le client de kernel ne pourra pas effectuer la résolution de nom.
La syntaxe de montage de base est la suivante :
root #
mount -t ceph MON1_IP[:PORT],MON2_IP[:PORT],...:CEPHFS_MOUNT_TARGET \
MOUNT_POINT -o name=CEPHX_USER_NAME,secret=SECRET_STRING
23.1.2 Création d'un fichier de secret #
L'authentification est activée par défaut pour la grappe Ceph active. Vous devez créer un fichier qui stocke votre clé secrète (et non pas le trousseau de clés lui-même). Pour obtenir la clé secrète d'un utilisateur particulier et créer ensuite le fichier, procédez comme suit :
Affichez la clé d'un utilisateur particulier dans un fichier de trousseau de clés :
cephuser@adm >
cat /etc/ceph/ceph.client.admin.keyringCopiez la clé de l'utilisateur qui emploiera le système de fichiers Ceph FS monté. La clé ressemble généralement à ceci :
AQCj2YpRiAe6CxAA7/ETt7Hcl9IyxyYciVs47w==
Créez un fichier en indiquant le nom de l'utilisateur dans le nom de fichier, par exemple
/etc/ceph/admin.secret
pour l'utilisateur admin.Collez la valeur de la clé dans le fichier créé à l'étape précédente.
Définissez les droits d'accès appropriés au fichier. L'utilisateur doit être le seul à pouvoir lire le fichier, les autres n'ont aucun droit d'accès.
23.1.3 Montage de CephFS #
La commande mount
permet de monter CephFS. Vous devez indiquer le nom d'hôte ou l'adresse IP du moniteur. Comme l'authentification cephx
est activée par défaut dans SUSE Enterprise Storage, vous devez également spécifier un nom d'utilisateur et le secret qui lui est associé :
root #
mount -t ceph ceph_mon1:6789:/ /mnt/cephfs \
-o name=admin,secret=AQATSKdNGBnwLhAAnNDKnH65FmVKpXZJVasUeQ==
Étant donné que la commande précédente reste dans l'historique du shell, une approche plus sécurisée consiste à lire le secret d'un fichier :
root #
mount -t ceph ceph_mon1:6789:/ /mnt/cephfs \
-o name=admin,secretfile=/etc/ceph/admin.secret
Notez que le fichier de secret ne doit contenir que le secret du trousseau de clés. Dans notre exemple, le fichier contient uniquement la ligne suivante :
AQATSKdNGBnwLhAAnNDKnH65FmVKpXZJVasUeQ==
Il est judicieux d'indiquer plusieurs moniteurs séparés par des virgules sur la ligne de commande mount
dans le cas où un moniteur est arrêté au moment du montage. Chaque adresse de moniteur figure sous la forme hôte[:port]
. Si le port n'est pas indiqué, le port par défaut est le port 6789.
Créez le point de montage sur l'hôte local :
root #
mkdir /mnt/cephfs
Montez le système de fichiers CephFS :
root #
mount -t ceph ceph_mon1:6789:/ /mnt/cephfs \
-o name=admin,secretfile=/etc/ceph/admin.secret
Un sous-répertoire subdir
peut être indiqué si un sous-ensemble du système de fichiers doit être monté :
root #
mount -t ceph ceph_mon1:6789:/subdir /mnt/cephfs \
-o name=admin,secretfile=/etc/ceph/admin.secret
Vous pouvez spécifier plusieurs hôtes de moniteur dans la commande mount
:
root #
mount -t ceph ceph_mon1,ceph_mon2,ceph_mon3:6789:/ /mnt/cephfs \
-o name=admin,secretfile=/etc/ceph/admin.secret
Si des clients avec restriction de chemin d'accès sont utilisés, les fonctionnalités MDS doivent inclure un accès en lecture au répertoire racine. Par exemple, un trousseau de clés peut ressembler à ceci :
client.bar key: supersecretkey caps: [mds] allow rw path=/barjail, allow r path=/ caps: [mon] allow r caps: [osd] allow rwx
La partie allow r path=/
signifie que les clients dont le chemin est restreint peuvent voir le volume racine sans être autorisés à y écrire des données. Cela peut être un problème dans les cas où une isolation complète est requise.
23.2 Démontage de CephFS #
Pour démonter le système de fichiers CephFS, utilisez la commande umount
:
root #
umount /mnt/cephfs
23.3 Montage de CephFS dans /etc/fstab
#
Pour monter automatiquement CephFS au démarrage du client, insérez la ligne correspondante dans sa table des systèmes de fichiers /etc/fstab
:
mon1:6790,mon2:/subdir /mnt/cephfs ceph name=admin,secretfile=/etc/ceph/secret.key,noatime,_netdev 0 2
23.4 Daemons MDS actifs multiples (MDS actif-actif) #
Par défaut, CephFS est configuré pour un seul daemon MDS actif. Pour mettre à l'échelle les performances des métadonnées pour les systèmes vastes, vous pouvez activer plusieurs daemons MDS actifs, qui partageront entre eux la charge de travail des métadonnées.
23.4.1 Utilisation de MDS actif-actif #
Vous pouvez envisager d'utiliser plusieurs daemons MDS actifs lorsque les performances de vos métadonnées sont bloquées sur le MDS unique par défaut.
L'ajout de plusieurs daemons n'améliore pas les performances pour tous les types de charge de travail. Par exemple, une seule application s'exécutant sur un seul client ne bénéficie pas d'un nombre accru de daemons MDS à moins d'effectuer de nombreuses opérations de métadonnées en parallèle.
Les charges de travail qui bénéficient généralement d'un nombre supérieur de daemons MDS actifs sont celles qui possèdent de nombreux clients, travaillant, le cas échéant, sur plusieurs répertoires distincts.
23.4.2 Augmentation de la taille de la grappe active MDS #
Chaque système de fichiers CephFS possède un paramètre max_mds
qui détermine le nombre de rangs à créer. Le nombre réel de rangs dans le système de fichiers n'augmentera que si un daemon supplémentaire est en mesure de prendre le nouveau rang créé. Par exemple, si un seul daemon MDS s'exécute et que la valeur max_mds
est définie sur 2, aucun second rang n'est créé.
Dans l'exemple suivant, nous définissons max_mds
sur 2 pour créer un rang en dehors du rang par défaut. Pour voir les changements, lancez ceph status
avant et après avoir défini max_mds
et reportez-vous à la ligne contenant fsmap
:
cephuser@adm >
ceph
status [...] services: [...] mds: cephfs-1/1/1 up {0=node2=up:active}, 1 up:standby [...]cephuser@adm >
ceph
fs set cephfs max_mds 2cephuser@adm >
ceph
status [...] services: [...] mds: cephfs-2/2/2 up {0=node2=up:active,1=node1=up:active} [...]
Le rang nouvellement créé (1) passe à l'état « creating » (création en cours), puis à l'état« active » (actif).
Même avec plusieurs daemons MDS actifs, un système hautement disponible nécessite toujours des daemons de secours qui prennent le relais si l'un des serveurs exécutant un daemon actif tombe en panne.
Par conséquent, la valeur maximale pratique de max_mds
pour les systèmes hautement disponibles est égale au nombre total de serveurs MDS de votre système moins 1. Pour rester disponible en cas de défaillance de plusieurs serveurs, augmentez le nombre de daemons de secours du système pour qu'ils correspondent au nombre de pannes de serveur que vous devez pouvoir surmonter.
23.4.3 Diminution du nombre de rangs #
Tous les rangs, y compris les rangs à supprimer, doivent d'abord être actifs. Cela signifie que vous devez disposer d'au moins max_mds
daemons MDS disponibles.
Commencez par définir max_mds
sur un nombre inférieur. Par exemple, définissez un seul MDS actif :
cephuser@adm >
ceph
status [...] services: [...] mds: cephfs-2/2/2 up {0=node2=up:active,1=node1=up:active} [...]cephuser@adm >
ceph
fs set cephfs max_mds 1cephuser@adm >
ceph
status [...] services: [...] mds: cephfs-1/1/1 up {0=node2=up:active}, 1 up:standby [...]
23.4.4 Épinglage manuel d'arborescences de répertoires à un rang #
Dans plusieurs configurations de serveur de métadonnées actives, l'équilibreur permet de répartir la charge de métadonnées uniformément dans la grappe. Cela fonctionne généralement assez bien pour la plupart des utilisateurs, mais il est parfois souhaitable de remplacer l'équilibreur dynamique par des assignations explicites de métadonnées à des rangs particuliers. L'administrateur ou les utilisateurs peuvent ainsi répartir uniformément la charge d'applications ou limiter l'impact des demandes de métadonnées des utilisateurs sur l'ensemble de la grappe.
Le mécanisme prévu à cet effet s'appelle une « épingle d'exportation ». Il s'agit d'un attribut étendu des répertoires. Cet attribut étendu s'appelle ceph.dir.pin
. Les utilisateurs peuvent définir cet attribut à l'aide de commandes standard :
root #
setfattr -n ceph.dir.pin -v 2 /path/to/dir
La valeur (-v
) de l'attribut étendu correspond au rang à attribuer à la sous-arborescence de répertoires. La valeur par défaut (-1) indique que le répertoire n'est pas épinglé.
Une épingle d'exportation de répertoire est héritée de son parent le plus proche ayant une épingle d'exportation définie. Par conséquent, la définition de l'épingle d'exportation sur un répertoire affecte tous ses enfants. Cependant, il est possible d'annuler l'épingle du parent en définissant l'épingle d'exportation du répertoire enfant. Par exemple :
root #
mkdir -p a/b # "a" and "a/b" start with no export pin set.
setfattr -n ceph.dir.pin -v 1 a/ # "a" and "b" are now pinned to rank 1.
setfattr -n ceph.dir.pin -v 0 a/b # "a/b" is now pinned to rank 0
# and "a/" and the rest of its children
# are still pinned to rank 1.
23.5 Gestion du basculement #
Si un daemon MDS cesse de communiquer avec le moniteur, le moniteur attend mds_beacon_grace
secondes (par défaut, 15 secondes) avant de marquer le daemon comme laggy (lent à réagir). Vous pouvez configurer un ou plusieurs daemons de secours qui prendront le relais lors du basculement du daemon MDS.
23.5.1 Configuration de daemons de secours avec relecture #
Chaque système de fichiers CephFS peut être configuré pour ajouter des daemons de secours avec relecture. Ces daemons de secours suivent le journal de métadonnées du MDS actif pour réduire le temps de basculement en cas d'indisponibilité du MDS actif. Chaque MDS actif ne peut avoir qu'un seul daemon de secours avec relecture.
Configurez le daemon de secours avec relecture sur un système de fichiers à l'aide de la commande suivante :
cephuser@adm >
ceph fs set FS-NAME allow_standby_replay BOOL
Une fois les daemons de secours avec relecture définis, les moniteurs les assigneront pour suivre les MDS actifs dans ce système de fichiers.
Lorsqu'un MDS passe à l'état de daemon de secours avec relecture, il ne peut être utilisé que comme daemon de secours pour le rang auquel il est associé. En cas d'échec d'un autre rang, ce daemon de secours avec relecture ne peut pas jouer le rôle de remplaçant même si tous les autres daemons de secours sont indisponibles. Pour cette raison, il est conseillé d'utiliser un daemon de secours avec relecture pour chaque MDS actif.
23.6 Définition des quotas CephFS #
Vous pouvez définir des quotas sur n'importe quel sous-répertoire du système de fichiers Ceph. Le quota limite le nombre d'octets ou de fichiers stockés sous le point spécifié dans la hiérarchie de répertoires.
23.6.1 Limites des quotas CephFS #
L'utilisation de quotas avec CephFS présente les limites suivantes :
- Les quotas sont coopératifs et non concurrentiels.
Les quotas Ceph s'appuient sur le client qui monte le système de fichiers pour arrêter d'écrire sur ce dernier lorsqu'une limite est atteinte. La partie serveur ne peut pas empêcher un client malveillant d'écrire autant de données qu'il en a besoin. N'utilisez pas de quotas pour empêcher la saturation du système de fichiers dans des environnements où les clients ne sont pas pleinement approuvés.
- Les quotas sont imprécis.
Les processus qui écrivent sur le système de fichiers seront arrêtés peu de temps après que la limite de quota aura été atteinte. Ils seront inévitablement autorisés à écrire une certaine quantité de données au-delà de la limite configurée. Les systèmes d'écriture clients seront arrêtés quelques dixièmes de seconde après avoir franchi la limite configurée.
- Les quotas sont implémentés dans le client du kernel à partir de la version 4.17.
Les quotas sont pris en charge par le client de l'espace utilisateur (libcephfs, ceph-fuse). Les clients de kernel Linux des versions 4.17 et ultérieures prennent en charge les quotas CephFS sur les grappes SUSE Enterprise Storage 7. Les clients de kernel (y compris les versions récentes) ne sont pas en mesure de gérer les quotas sur des grappes plus anciennes, même s'ils parviennent à définir les attributs étendus des quotas. Les kernels SLE12-SP3 (et versions ultérieures) incluent déjà les rétroports requis pour gérer les quotas.
- Configurez les quotas avec prudence lorsqu'ils sont utilisés avec des restrictions de montage basées sur le chemin.
Le client doit avoir accès à l'inode de répertoire sur lequel les quotas sont configurés afin de les appliquer. Si le client dispose d'un accès restreint à un chemin spécifique (par exemple
/home/user
) sur la base de la fonction MDS et qu'un quota est configuré sur un répertoire ancêtre auquel il n'a pas accès (/home
), le client n'appliquera pas ce quota. Lorsque vous utilisez des restrictions d'accès basées sur les chemins, veillez à configurer le quota sur le répertoire auquel le client peut accéder (par exemple/home/user
ou/home/user/quota_dir
).
23.6.2 Configuration des quotas CephFS #
Vous pouvez configurer les quotas CephFS à l'aide d'attributs étendus virtuels :
ceph.quota.max_files
Configure une limite de fichiers.
ceph.quota.max_bytes
Configure une limite d'octets.
Si les attributs apparaissent sur un inode de répertoire, un quota y est configuré. S'ils ne sont pas présents, aucun quota n'est défini sur ce répertoire (mais il est encore possible d'en configurer un sur un répertoire parent).
Pour définir un quota de 100 Mo, exécutez :
cephuser@mds >
setfattr -n ceph.quota.max_bytes -v 100000000 /SOME/DIRECTORY
Pour définir un quota de 10 000 fichiers, exécutez :
cephuser@mds >
setfattr -n ceph.quota.max_files -v 10000 /SOME/DIRECTORY
Pour afficher la configuration de quota, exécutez :
cephuser@mds >
getfattr -n ceph.quota.max_bytes /SOME/DIRECTORY
cephuser@mds >
getfattr -n ceph.quota.max_files /SOME/DIRECTORY
Si la valeur de l'attribut étendu est « 0 », le quota n'est pas défini.
Pour supprimer un quota, exécutez :
cephuser@mds >
setfattr -n ceph.quota.max_bytes -v 0 /SOME/DIRECTORYcephuser@mds >
setfattr -n ceph.quota.max_files -v 0 /SOME/DIRECTORY
23.7 Gestion des instantanés CephFS #
Les instantanés CephFS créent une vue en lecture seule du système de fichiers au moment où ils sont réalisés. Vous pouvez créer un instantané dans n'importe quel répertoire. L'instantané couvrira toutes les données du système de fichiers sous le répertoire spécifié. Après avoir créé un instantané, les données mises en mémoire tampon sont vidées de façon asynchrone à partir de divers clients. La création d'un instantané est dès lors très rapide.
Si vous avez plusieurs systèmes de fichiers CephFS partageant une réserve unique (via des espaces de noms), leurs instantanés entreront en collision, et la suppression d'un instantané entraînera des données de fichier manquantes pour d'autres instantanés partageant la même réserve.
23.7.1 Création d'instantanés #
La fonction d'instantané CephFS est activée par défaut sur les nouveaux systèmes de fichiers. Pour l'activer sur les systèmes de fichiers existants, exécutez la commande suivante :
cephuser@adm >
ceph fs set CEPHFS_NAME allow_new_snaps true
Une fois que vous activez des instantanés, tous les répertoires de CephFS auront un sous-répertoire spécial .snap
.
Il s'agit d'un sous-répertoire virtuel. Il n'apparaît pas dans la liste des répertoires du répertoire parent, mais le nom .snap
ne peut pas être utilisé comme nom de fichier ou de répertoire. Pour accéder au répertoire .snap
, vous devez y accéder explicitement, par exemple :
tux >
ls -la /CEPHFS_MOUNT/.snap/
Les clients de kernel CephFS ont une limite : ils ne peuvent pas gérer plus de 400 instantanés dans un système de fichiers. Le nombre d'instantanés doit toujours être maintenu en dessous de cette limite, quel que soit le client que vous utilisez. Si vous utilisez des clients CephFS plus anciens, tels que SLE12-SP3, gardez à l'esprit que dépasser la limite de 400 instantanés est préjudiciable pour les opérations, car le client va se bloquer.
Vous pouvez configurer un nom différent pour le sous-répertoire d'instantanés en définissant le paramètre client snapdir
.
Pour créer un instantané, créez un sous-répertoire sous le répertoire .snap
avec un nom personnalisé. Par exemple, pour créer un instantané du répertoire /CEPHFS_MOUNT/2/3/
, exécutez la commande suivante :
tux >
mkdir /CEPHFS_MOUNT/2/3/.snap/CUSTOM_SNAPSHOT_NAME
23.7.2 Suppression d'instantanés #
Pour supprimer un instantané, supprimez son sous-répertoire au sein du répertoire .snap
:
tux >
rmdir /CEPHFS_MOUNT/2/3/.snap/CUSTOM_SNAPSHOT_NAME