23 Cluster-Dateisystem #
In diesem Kapitel werden Verwaltungsaufgaben beschrieben, die normalerweise nach der Einrichtung des Clusters und dem Export des CephFS ausgeführt werden. Weitere Informationen zum Einrichten des CephFS finden Sie im Abschnitt 8.3.3, „Bereitstellen von Metadatenservern“.
23.1 Einhängen von CephFS #
Wenn das Dateisystem erstellt und der MDS aktiv ist, sind Sie bereit, das Dateisystem von einem Client-Host aus einzuhängen.
23.1.1 Vorbereiten des Clients #
Wenn auf dem Client-Host SUSE Linux Enterprise 12 SP2 oder höher ausgeführt wird, ist das System bereit, das CephFS ohne weitere Anpassung einzuhängen.
Wenn auf dem Client-Host SUSE Linux Enterprise 12 SP1 ausgeführt wird, müssen Sie alle neuesten Patches anwenden, bevor Sie das CephFS einhängen.
In jedem Fall ist in SUSE Linux Enterprise alles enthalten, was zum Einhängen von CephFS benötigt wird. SUSE Enterprise Storage 7.1 wird nicht benötigt.
Zur Unterstützung der vollständigen mount
-Syntax muss das Paket ceph-common (das im Lieferumfang von SUSE Linux Enterprise enthalten ist) installiert werden, bevor Sie versuchen, CephFS einzuhängen.
Ohne das Paket ceph-common (und somit ohne mount.ceph
-Helper) müssen die IPs der Monitors anstelle ihrer Namen verwendet werden. Dies liegt daran, dass der Kernel-Client keine Namensauflösung durchführen kann.
Die grundlegende Einhängesyntax lautet:
#
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 Erstellen einer geheimen Datei #
Der Ceph-Cluster wird mit standardmäßig eingeschalteter Authentifizierung ausgeführt. Sie sollten eine Datei erstellen, in der Ihr geheimer Schlüssel (nicht der Schlüsselbund selbst) gespeichert wird. Gehen Sie folgendermaßen vor, um den geheimen Schlüssel für einen bestimmten Benutzer abzurufen und dann die Datei zu erstellen:
Sehen Sie sich den Schlüssel für den bestimmten Benutzer in einer Schlüsselbunddatei an:
cephuser@adm >
cat /etc/ceph/ceph.client.admin.keyringKopieren Sie den Schlüssel des Benutzers, der das eingehängte Ceph FS-Dateisystem verwenden wird. Normalerweise sieht der Schlüssel in etwa so aus:
AQCj2YpRiAe6CxAA7/ETt7Hcl9IyxyYciVs47w==
Erstellen Sie eine Datei mit dem Benutzernamen als Teil des Dateinamens, wie zum Beispiel
/etc/ceph/admin.secret
für den Benutzer admin.Fügen Sie den Schlüsselwert in der im vorigen Schritt erstellten Datei ein.
Legen Sie die ordnungsgemäßen Zugriffsrechte für die Datei fest. Ausschließlich der Benutzer sollte die Datei lesen können. Andere dürfen keine Zugriffsrechte dafür erhalten.
23.1.3 Einhängen von CephFS #
CephFS wird mit dem Befehl mount
eingehängt. Sie müssen den Hostnamen oder die IP-Adresse des Monitors angeben. Da in SUSE Enterprise Storage standardmäßig die cephx
-Authentifizierung aktiviert ist, müssen Sie einen Benutzernamen und das entsprechende Geheimnis angeben:
#
mount -t ceph ceph_mon1:6789:/ /mnt/cephfs \
-o name=admin,secret=AQATSKdNGBnwLhAAnNDKnH65FmVKpXZJVasUeQ==
Da das vorige Kommando im Shell-Verlauf bleibt, ist es sicherer, das Geheimnis aus einer Datei zu lesen:
#
mount -t ceph ceph_mon1:6789:/ /mnt/cephfs \
-o name=admin,secretfile=/etc/ceph/admin.secret
Beachten Sie, dass die Geheimnisdatei nur das tatsächliche Schlüsselbundgeheimnis enthalten sollte. In unserem Beispiel enthält die Datei dann nur die folgende Zeile:
AQATSKdNGBnwLhAAnNDKnH65FmVKpXZJVasUeQ==
Es ist sinnvoll, in der mount
-Kommandozeile mehrere Monitors durch Komma getrennt anzugeben, für den Fall, dass zum Zeitpunkt des Einhängens ein Monitor zufällig inaktiv ist. Jede Monitoradresse hat die Form host[:port]
. Wenn der Port nicht angegeben wird, ist es standardmäßig Port 6789.
Erstellen sie den Einhängepunkt am lokalen Host:
#
mkdir /mnt/cephfs
Hängen Sie das CephFS ein:
#
mount -t ceph ceph_mon1:6789:/ /mnt/cephfs \
-o name=admin,secretfile=/etc/ceph/admin.secret
Ein Unterverzeichnis subdir
kann angegeben werden, wenn eine Teilmenge des Dateisystems eingehängt werden soll:
#
mount -t ceph ceph_mon1:6789:/subdir /mnt/cephfs \
-o name=admin,secretfile=/etc/ceph/admin.secret
Sie können mehr als einen Monitor-Host im Kommando mount
angeben:
#
mount -t ceph ceph_mon1,ceph_mon2,ceph_mon3:6789:/ /mnt/cephfs \
-o name=admin,secretfile=/etc/ceph/admin.secret
Wenn Clients mit Pfadbeschränkungen verwendet werden, muss der MDS Lesezugriff auf das Stammverzeichnis enthalten. Ein Schlüsselbund sieht beispielsweise in etwa wie folgt aus:
client.bar key: supersecretkey caps: [mds] allow rw path=/barjail, allow r path=/ caps: [mon] allow r caps: [osd] allow rwx
Der Abschnitt allow r path=/
bedeutet, dass pfadbeschränkte Clients das Root-Volume sehen können, jedoch nicht darauf schreiben dürfen. In Anwendungsfällen, in denen die vollständige Isolierung vorausgesetzt wird, könnte dies ein Problem darstellen.
23.2 Aushängen von CephFS #
CephFS wird mit dem Kommando umount
ausgehängt:
#
umount /mnt/cephfs
23.3 Einhängen von CephFS in /etc/fstab
#
Fügen Sie zum automatischen Einhängen von CephFS bei Client-Start die entsprechende Zeile in die Tabelle /etc/fstab
seines Dateisystems ein:
mon1:6790,mon2:/subdir /mnt/cephfs ceph name=admin,secretfile=/etc/ceph/secret.key,noatime,_netdev 0 2
23.4 Mehrere aktive MDS-Daemons (Aktiv/Aktiv-MDS) #
CephFS wird standardmäßig für einen einzelnen aktiven MDS-Daemon konfiguriert. Zum Skalieren der Metadatenleistung für große Systeme können Sie mehrere aktive MDS-Daemons aktivieren. Dadurch wird der Metadaten-Workload untereinander aufgeteilt.
23.4.1 Verwenden von Aktiv/Aktiv-MDS #
Erwägen Sie, mehrere aktive MDS-Daemons zu verwenden, falls Ihre Metadatenleistung bei einem standardmäßigen einzelnen MDS einen Engpass erfahren würde.
Das Hinzufügen weiterer Daemons erhöht nicht die Leistung bei allen Workload-Typen. Beispielsweise profitiert eine Einzelanwendung, die auf einem einzelnen Client ausgeführt wird, nicht von einer höheren Anzahl von MDS-Daemons, es sei denn, die Anwendung führt sehr viele Metadaten-Operationen gleichzeitig aus.
Workloads, die normalerweise von einer höheren Anzahl aktiver MDS-Daemons profitieren, sind Workloads mit vielen Clients, die eventuell in vielen verschiedenen Verzeichnissen arbeiten.
23.4.2 Vergrößern des aktiven MDS-Clusters #
Jedes CephFS-Dateisystem verfügt über eine max_mds
-Einstellung, die steuert, wie viele Rangstufen erstellt werden. Die tatsächliche Anzahl der Rangstufen im Dateisystem wird nur dann erhöht, wenn ein Ersatz-Daemon verfügbar ist, der die neue Rangstufe übernehmen kann. Wenn beispielsweise nur ein MDS-Daemon ausgeführt wird und max_mds
auf „2“ festgelegt ist, wird keine zweite Rangstufe erstellt.
Im folgenden Beispiel legen wir die Option max_mds
auf „2“ fest, um eine neue Rangstufe abgesehen von der standardmäßigen Rangstufe zu erstellen. Führen Sie zum Anzeigen der Änderungen ceph status
aus bevor und nachdem Sie max_mds
festlegen und beobachten Sie die Zeile, die fsmap
enthält:
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} [...]
Die neu erstellte Rangstufe (1) durchläuft den Zustand „wird erstellt“ und wird dann in den Zustand „aktiv“ versetzt.
Auch bei mehreren aktiven Daemons benötigt ein hochverfügbares System weiterhin Standby-Daemons, die übernehmen, wenn einer der Server, auf dem ein aktiver Daemon ausgeführt wird, ausfällt.
Folglich ist die praktische maximale Anzahl von max_mds
bei hochverfügbaren Systemen ein Server weniger als die Gesamtanzahl der MDS-Server in Ihrem System. Um im Fall mehrerer Serverausfälle verfügbar zu bleiben, müssen Sie die Anzahl der Standby-Daemons im System entsprechend der Anzahl der Serverausfälle anpassen, die sie kompensieren müssen.
23.4.3 Reduzieren der Anzahl von Rangstufen #
Alle Rangstufen, einschließlich der zu entfernenden Rangstufen, müssen zunächst aktiv sein. Dies bedeutet, dass mindestens max_mds
MDS-Daemons verfügbar sein müssen.
Legen Sie zunächst max_mds
auf eine kleinere Anzahl fest. Gehen Sie beispielsweise zu einem einzelnen aktiven MDS zurück:
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 Manuelles Anheften von Verzeichnisbäumen an eine Rangstufe #
Bei Konfigurationen mit mehreren aktiven Metadaten-Servern wird ein Ausgleichsprogramm ausgeführt, das die Metadatenlast gleichmäßig im Cluster verteilt. Dies funktioniert normalerweise bei den meisten Benutzern ganz gut, doch manchmal ist es wünschenswert, das dynamische Ausgleichsprogramm durch explizite Zuordnungen von Metadaten zu bestimmten Rangstufen außer Kraft zu setzen. Dadurch erhalten der Administrator oder die Benutzer die Möglichkeit, die Anwendungslast gleichmäßig zu verteilen oder die Auswirkungen auf die Metadatenanforderungen der Benutzer auf den gesamten Cluster einzuschränken.
Der zu diesem Zweck bereitgestellte Mechanismus wird „Export-Pin“ genannt. Es handelt sich um ein erweitertes Attribut von Verzeichnissen. Der Name dieses erweiterten Attributs ist ceph.dir.pin
. Benutzer können dieses Attribut mit Standardkommandos festlegen:
#
setfattr -n ceph.dir.pin -v 2 /path/to/dir
Der Wert (-v
) des erweiterten Attributs ist die Rangstufe, zu dem der Verzeichnisunterbaum zugewiesen wird. Ein Standardwert von -1 gibt an, dass das Verzeichnis nicht angeheftet wird.
Ein Verzeichnisexport-Pin wird vom nächstgelegenen übergeordneten Verzeichnis mit einem festgelegten Export-Pin übernommen. Daher betrifft die Festlegung eines Export-Pins auch alle untergeordneten Verzeichnisse. Der Pin des übergeordneten Verzeichnisses kann jedoch durch Festlegen des Verzeichnisexport-Pins des untergeordneten Verzeichnisses außer Kraft gesetzt werden. Beispiel:
#
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 Failover-Verwaltung #
Wenn ein MDS-Daemon die Kommunikation mit dem Monitor stoppt, dann wartet der Monitor mds_beacon_grace
Sekunden (standardmäßig 15 Sekunden), bevor er den Daemon als laggy (langsam) kennzeichnet. Sie können einen oder mehrere „standby“-Daemons konfigurieren, die bei einem MDS-Daemon-Failover übernehmen.
23.5.1 Konfigurieren von Standby-Replay #
Jedes CephFS-Dateisystem kann so konfiguriert werden, dass es Standby-Replay-Daemons hinzufügt. Diese Standby-Daemons folgen dem Metadatenjournal des aktiven MDS, um die Failover-Zeit zu reduzieren, falls der aktive MDS nicht mehr verfügbar ist. Jeder aktive MDS darf nur einen Standby-Replay-Daemon haben, der ihm folgt.
Konfigurieren Sie Standby-Replay auf einem Dateisystem mit folgendem Kommando:
cephuser@adm >
ceph fs set FS-NAME allow_standby_replay BOOL
Wenn diese Option aktiviert ist, weisen die Monitore verfügbare Standby-Daemons zu, die den aktiven MDS in diesem Dateisystem folgen.
Wenn ein Daemon den Status „Standby-Replay“ aufweist, wird er nur als Standby für die Rangstufe verwendet, der er folgt. Wenn eine andere Rangstufe ausfällt, wird dieser Standby-Replay-Daemon nicht als Ersatz verwendet, auch wenn keine anderen Standbys verfügbar sind. Aus diesem Grund ist es ratsam, dass jeder aktive MDS über einen Standby-Replay-Daemon verfügt, wenn Standby-Replay verwendet wird.
23.6 Festlegen von CephFS-Kontingenten #
Sie können Kontingente für beliebige Unterverzeichnisse des Ceph-Dateisystems anlegen. Das Kontingent beschränkt entweder die Anzahl der Byte oder die Anzahl der Dateien, die unterhalb des angegebenen Punkts in der Verzeichnishierarchie gespeichert werden können.
23.6.1 Einschränkungen von CephFS-Kontingenten #
Kontingente in CephFS unterliegen folgenden Einschränkungen:
- Kontingente sind kooperativ und konkurrieren nicht untereinander.
Ceph-Kontingente sind darauf angewiesen, dass der Client, der das Dateisystem einhängt, nicht mehr darin schreibt, sobald ein bestimmter Grenzwert erreicht ist. Der Server-Teil kann nicht verhindern, dass ein böswilliger Client beliebig viele Daten schreibt. Es ist nicht zulässig, das Füllen des Dateisystems in Umgebungen, in denen die Clients als überhaupt nicht verbürgt gelten, mithilfe von Kontingenten zu verhindern.
- Kontingente sind nicht absolut genau.
Prozesse, die in das Dateisystem schreiben, werden kurz nach Erreichen des Kontingentgrenzwerts angehalten. Es ist nicht zu verhindern, dass eine gewisse Datenmenge geschrieben wird, die den konfigurierten Grenzwert übersteigt. Client-Schreibvorgänge werden innerhalb weniger Zehntelsekunden nach dem Überschreiten des konfigurierten Grenzwerts angehalten.
- Kontingente werden ab Version 4.17 im Kernel-Client implementiert.
Kontingente werden durch den Benutzerbereichs-Client (libcephfs, ceph-fuse) unterstützt. Die Linux-Kernel-Clients 4.17 und höher unterstützen CephFS-Kontingente auf Clustern mit SUSE Enterprise Storage 7.1. Kernel-Clients (selbst die neueren Versionen) können Kontingente nicht auf älteren Clustern verarbeiten, auch wenn sie die erweiterten Attribute der Kontingente festlegen können. Kernel ab SLE12-SP3 enthalten bereits die erforderlichen Backports zur Verarbeitung von Kontingenten.
- Konfigurieren Sie die Kontingente nur mit Vorsicht, wenn pfadbasierte Einhängeeinschränkungen gelten.
Der Client kann die Kontingente nur dann durchsetzen, wenn er den Zugriff auf den Verzeichnis-Inode besitzt, auf dem die Kontingente konfiguriert sind. Wenn der Zugriff des Clients auf einen bestimmten Pfad (z. B.
/home/user
) gemäß der MDS-Capability eingeschränkt ist und Sie ein Kontingent für ein übergeordnetes Verzeichnis konfigurieren, auf das der Client nicht zugreifen kann (/home
), kann der Client das Kontingent nicht erzwingen. Wenn Sie pfadbasierte Zugriffsbeschränkungen verwenden, stellen Sie sicher, dass Sie die Kontingente für das Verzeichnis konfigurieren, auf das der Client zugreifen kann (z. B./home/user
oder/home/user/quota_dir
).
23.6.2 Konfigurieren von CephFS-Kontingenten #
CephFS-Kontingente werden mit virtuellen erweiterten Attributen konfiguriert:
ceph.quota.max_files
Konfiguriert einen Grenzwert für die Anzahl der Dateien.
ceph.quota.max_bytes
Konfiguriert einen Grenzwert für die Anzahl der Bytes.
Wenn Attribute für einen Verzeichnis-Inode angezeigt werden, ist dort ein Kontingent konfiguriert. Fehlen die Attribute, wurde kein Kontingent für das Verzeichnis festgelegt (eventuell jedoch für ein übergeordnetes Verzeichnis).
Mit folgendem Kommando legen Sie ein Kontingent von 100 MB fest:
cephuser@mds >
setfattr -n ceph.quota.max_bytes -v 100000000 /SOME/DIRECTORY
Mit folgendem Kommando legen Sie ein Kontingent von 10.000 Dateien fest:
cephuser@mds >
setfattr -n ceph.quota.max_files -v 10000 /SOME/DIRECTORY
Mit folgendem Kommando rufen Sie die Kontingenteinstellung ab:
cephuser@mds >
getfattr -n ceph.quota.max_bytes /SOME/DIRECTORY
cephuser@mds >
getfattr -n ceph.quota.max_files /SOME/DIRECTORY
Wenn das erweiterte Attribut den Wert „0“ aufweist, ist kein Kontingent festgelegt.
Mit folgendem Kommando entfernen Sie ein Kontingent:
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 Verwalten von CephFS-Snapshots #
Ein CephFS-Snapshot ist eine schreibgeschützte Ansicht des Dateisystems zu dem Zeitpunkt, zu dem der Snapshot erstellt wurde. Sie können Snapshots in beliebigen Verzeichnissen erstellen. Der Snapshot deckt alle Daten im Dateisystem unter dem angegebenen Verzeichnis ab. Nach dem Erstellen des Snapshots werden die zwischengespeicherten Daten asynchron von verschiedenen Clients verschoben. Die Snapshot-Erstellung ist daher sehr schnell.
Greifen mehrere CephFS-Dateisysteme auf einen einzelnen Pool zu (über Namespaces), prallen ihre Snapshots aufeinander. Wenn Sie dann einen einzelnen Snapshot löschen, fehlen die entsprechenden Daten in anderen Snapshots, die denselben Pool nutzen.
23.7.1 Erstellen von Snapshots #
Die CephFS-Snapshot-Funktion ist auf neuen Dateisystemen standardmäßig aktiviert. Mit folgendem Kommando aktivieren Sie die Funktion auf vorhandenen Dateisystemen:
cephuser@adm >
ceph fs set CEPHFS_NAME allow_new_snaps true
Sobald Sie die Snapshots aktiviert haben, enthalten alle Verzeichnisse im CephFS das besondere Unterverzeichnis .snap
.
Dies ist ein virtuelles Unterverzeichnis. Es erscheint nicht in der Verzeichnisliste des übergeordneten Verzeichnisses, aber der Name .snap
kann nicht als Datei- oder Verzeichnisname verwendet werden. Der Zugriff auf das Verzeichnis .snap
muss explizit erfolgen. Beispiel:
>
ls -la /CEPHFS_MOUNT/.snap/
Für CephFS-Kernel-Clients gilt eine Einschränkung: Sie können maximal 400 Snapshots in einem Dateisystem verarbeiten. Halten Sie die Anzahl der Snapshots stets unter diesem Grenzwert, unabhängig vom tatsächlichen Client. Wenn Sie mit älteren CephFS-Clients arbeiten (z. B. mit SLE12-SP3), bedenken Sie, dass eine Anzahl von mehr als 400 Snapshots zum Absturz des Clients führt und damit die Abläufe erheblich beeinträchtigt.
Mit der Einstellung client snapdir
können Sie einen anderen Namen für das Snapshot-Unterverzeichnis konfigurieren.
Zum Erstellen eines Snapshots legen Sie ein Unterverzeichnis mit einem benutzerdefinierten Namen unter dem Verzeichnis .snap
an. Mit folgendem Kommando erstellen Sie beispielsweise einen Snapshot des Verzeichnisses /CEPHFS_MOUNT/2/3/
:
>
mkdir /CEPHFS_MOUNT/2/3/.snap/CUSTOM_SNAPSHOT_NAME
23.7.2 Löschen von Snapshots #
Soll ein Snapshot gelöscht werden, entfernen Sie das zugehörige Unterverzeichnis aus dem Verzeichnis .snap
:
>
rmdir /CEPHFS_MOUNT/2/3/.snap/CUSTOM_SNAPSHOT_NAME