Ceph Distributed File System¶
On Dezember 12, 2021 by adminCeph ist ein verteiltes Netzwerk-Dateisystem, das für gute Leistung, Zuverlässigkeit und Skalierbarkeit entwickelt wurde.
Grundlegende Merkmale sind:
- POSIX-Semantik
- Nahtlose Skalierung von 1 bis zu vielen tausend Knoten
- Hohe Verfügbarkeit und Zuverlässigkeit. Kein Single Point of Failure.
- N-Wege-Replikation von Daten über Speicherknoten hinweg
- Schnelle Wiederherstellung nach Knotenausfällen
- Automatische Neuverteilung von Daten bei Hinzufügen/Entfernen von Knoten
- Einfache Bereitstellung: Die meisten FS-Komponenten sind Userspace-Daemons
Auch,
- Flexible Snapshots (auf jedes Verzeichnis)
- Rekursive Abrechnung (verschachtelte Dateien, Verzeichnisse, Bytes)
Im Gegensatz zu Cluster-Dateisystemen wie GFS, OCFS2 und GPFS, die sich auf einen symmetrischen Zugriff aller Clients auf gemeinsam genutzte Blockgeräte stützen, trennt Ceph die Verwaltung von Daten und Metadaten in unabhängigen Serverclustern, ähnlich wie Lustre. Im Gegensatz zu Lustre laufen die Metadaten- und Speicherknoten jedoch vollständig als Daemons im Userspace. Die Dateidaten werden in großen Blöcken über die Speicherknoten verteilt, um die Arbeitslast zu verteilen und hohe Durchsätze zu ermöglichen. Wenn Speicherknoten ausfallen, werden die Daten von den Speicherknoten selbst (mit minimaler Koordination durch einen Cluster-Monitor) neu repliziert, was das System extrem effizient und skalierbar macht.
Metadatenserver bilden effektiv einen großen, konsistenten, verteilten In-Memory-Cache über dem Dateinamensraum, der extrem skalierbar ist, Metadaten als Reaktion auf Änderungen der Arbeitslast dynamisch neu verteilt und beliebige (nun ja, nicht-byzantinische) Knotenausfälle toleriert. Der Metadatenserver verfolgt einen etwas unkonventionellen Ansatz für die Metadatenspeicherung, um die Leistung für gängige Arbeitslasten deutlich zu verbessern. Insbesondere Inodes mit nur einem Link sind eingebettete indirekte Verzeichnisse, so dass ganze Verzeichnisse mit Einträgen und Inodes mit einem einzigen E/A-Vorgang in den Cache geladen werden können. Der Inhalt extrem großer Verzeichnisse kann fragmentiert und von unabhängigen Metadatenservern verwaltet werden, was einen skalierbaren gleichzeitigen Zugriff ermöglicht.
Das System bietet automatischen Datenausgleich/Migration bei der Skalierung von einem kleinen Cluster mit nur wenigen Knoten auf viele Hunderte, ohne dass ein Administrator den Datenbestand in statische Volumes aufteilen oder den mühsamen Prozess der Datenmigration zwischen Servern durchlaufen muss.Wenn das Dateisystem voll ist, können einfach neue Knoten hinzugefügt werden, und alles wird „einfach funktionieren“
Ceph umfasst einen flexiblen Snapshot-Mechanismus, der es dem Benutzer ermöglicht, einen Snapshot für jedes Unterverzeichnis (und dessen verschachtelten Inhalt) im System zu erstellen. Das Erstellen und Löschen von Snapshots ist so einfach wie „mkdir.snap/foo“ und „rmdir .snap/foo“.
Ceph bietet auch einige rekursive Abfragen auf Verzeichnisse für verschachtelte Dateien und Bytes. Das heißt, ein „getfattr -d foo“ auf ein beliebiges Verzeichnis im System zeigt die Gesamtzahl der verschachtelten regulären Dateien und Unterverzeichnisse sowie eine Summierung aller verschachtelten Dateigrößen an. Dies macht die Identifizierung großer Speicherplatzverbraucher relativ schnell, da kein „du“ oder ähnlicher rekursiver Scan des Dateisystems erforderlich ist.
Schließlich erlaubt Ceph auch die Festlegung von Quoten für jedes Verzeichnis im System.Die Quote kann die Anzahl der Bytes oder die Anzahl der Dateien begrenzen, die unter diesem Punkt in der Verzeichnishierarchie gespeichert sind. Quoten können mit den erweiterten Attributen „ceph.quota.max_files“ und „ceph.quota.max_bytes“ festgelegt werden, z. B.:
setfattr -n ceph.quota.max_bytes -v 100000000 /some/dirgetfattr -n ceph.quota.max_bytes /some/dir
Eine Einschränkung der aktuellen Quoten-Implementierung besteht darin, dass sie auf die Kooperation des Clients angewiesen ist, der das Dateisystem mounten will, um die Schreibvorgänge zu stoppen, wenn ein Limit erreicht ist. Ein modifizierter oder feindlicher Client kann nicht daran gehindert werden, so viele Daten zu schreiben, wie er benötigt.
Mount Options¶
ip=A.B.C.D Geben Sie die IP und/oder den Port an, an den sich der Client lokal binden soll.Normalerweise gibt es keinen Grund, dies zu tun. Wird die IP nicht angegeben, wird die IP-Adresse des Clients anhand der Adresse ermittelt, von der die Verbindung zum Monitor ausgeht. wsize=X Geben Sie die maximale Schreibgröße in Byte an. Standardwert: 64 MB. rsize=X Geben Sie die maximale Lesegröße in Bytes an. Voreinstellung: 64 MB. rasize=X Geben Sie die maximale Größe des Lesevorlaufs in Bytes an. Standard: 8 MB. mount_timeout=X Geben Sie den Timeout-Wert für das Einhängen (in Sekunden) an, falls das Ceph-Dateisystem nicht reagiert. Der Standardwert ist 60 Sekunden. caps_max=X Geben Sie die maximale Anzahl der zu haltenden Caps an. Ungenutzte Caps werden freigegeben, wenn die Anzahl der Caps das Limit überschreitet. Die Vorgabe ist 0 (keine Begrenzung) rbytes Wenn stat() für ein Verzeichnis aufgerufen wird, setzen Sie st_size auf ‚rbytes‘, die Summe der Dateigrößen aller Dateien, die sich unter diesem Verzeichnis befinden. Dies ist die Standardeinstellung. norbytes Wenn stat() für ein Verzeichnis aufgerufen wird, setzen Sie st_size auf die Anzahl der Einträge in diesem Verzeichnis. nocrc Deaktivieren Sie die CRC32C-Berechnung für Datenschreibvorgänge. Wenn diese Option gesetzt ist, muss sich der Speicherknoten auf die Fehlerkorrektur von TCP verlassen, um Datenverfälschungen in den Nutzdaten zu erkennen. dcache Verwenden Sie den Inhalt des dcache, um negative Lookups und readdir durchzuführen, wenn der Client den gesamten Verzeichnisinhalt in seinem Cache hat. (Dies ändert nichts an der Korrektheit; der Client verwendet zwischengespeicherte Metadaten nur, wenn ein Lease oder eine Fähigkeit sicherstellt, dass sie gültig sind.) nodcache Verwenden Sie den dcache nicht wie oben beschrieben. Dies vermeidet eine beträchtliche Menge an komplexem Code, was zu Leistungseinbußen führt, ohne die Korrektheit zu beeinträchtigen, und ist nützlich, um Fehler aufzuspüren. noasyncreaddir Verwendet nicht den dcache wie oben für readdir. noquotadf Meldet die Gesamtnutzung des Dateisystems in statfs, anstatt die Quota des Stammverzeichnisses zu verwenden. nocopyfrom Verwendet nicht die RADOS-Operation „copy-from“, um entfernte Objektkopien durchzuführen. Derzeit wird sie nur in copy_file_range verwendet, das auf die Standard-VFS-Implementierung zurückgreift, wenn diese Option verwendet wird. recover_session=<no|clean>Setzen Sie den Modus für die automatische Wiederherstellung der Verbindung für den Fall, dass der Client auf einer Blockliste steht. Die verfügbaren Modi sind „no“ und „clean“. Die Voreinstellung ist „no“.
- no: Versucht nie, eine neue Verbindung herzustellen, wenn der Client feststellt, dass er auf einer Blockliste steht. Operationen schlagen in der Regel fehl, wenn er auf die Blockliste gesetzt wurde.
- clean: Der Client stellt die Verbindung zum Ceph-Cluster automatisch wieder her, wenn er feststellt, dass er auf die Blockliste gesetzt wurde. Während der erneuten Verbindung lässt der Client verschmutzte Daten/Metadaten fallen, macht Seiten-Caches und beschreibbare Datei-Handles ungültig.Nach der erneuten Verbindung werden Dateisperren ungültig, weil der MDS sie nicht mehr verfolgt. Wenn ein Inode veraltete Dateisperren enthält, ist das Lesen/Schreiben auf dem Inode nicht erlaubt, bis Anwendungen alle veralteten Dateisperren freigeben.
Schreibe einen Kommentar