GlusterFS-Clustermodus für verteilte Dateisysteme

1.GlusterFS-Übersicht

GlusterFS ist der Kern von Gluster, der Scale-Out-Speicherlösung. Es handelt sich um ein verteiltes Open-Source-Dateisystem mit starker horizontaler Skalierbarkeit, das Speicherkapazitäten von mehreren PB unterstützen und durch Erweiterung Tausende von Clients verarbeiten kann. GlusterFS nutzt TCP/IP- oder InfiniBand-RDMA-Netzwerke, um physisch verteilte Speicherressourcen zusammenzuführen und einen einzigen globalen Namespace zur Datenverwaltung zu verwenden. GlusterFS basiert auf einem stapelbaren User-Space-Design, das eine hervorragende Leistung für eine Vielzahl unterschiedlicher Datenlasten bietet.
GlusterFS unterstützt Standard-Clients, die Standardanwendungen in jedem Standard-IP-Netzwerk ausführen. Wie in Abbildung 2 dargestellt, können Benutzer Standardprotokolle wie NFS/CIFS verwenden, um auf Anwendungsdaten in einem global einheitlichen Namespace zuzugreifen. Mit GlusterFS können Benutzer auf das ursprüngliche unabhängige, kostspielige geschlossene Speichersystem verzichten und normale und kostengünstige Speichergeräte verwenden, um eine zentrale Verwaltung, horizontale Erweiterung und virtualisierte Speicherpools bereitzustellen. Die Speicherkapazität kann auf TB/PB-Ebene erweitert werden. Die Hauptfunktionen von GlusterFS sind wie folgt:

l? Skalierbarkeit und hohe Leistung

GlusterFS nutzt zwei Funktionen, um hoch skalierbare Speicherlösungen von Terabyte bis Petabyte bereitzustellen. Die Scale-Out-Architektur ermöglicht eine Verbesserung der Speicherkapazität und Leistung durch einfaches Hinzufügen von Ressourcen. Festplatten-, Rechen- und I/O-Ressourcen können unabhängig voneinander hinzugefügt werden und unterstützen Hochgeschwindigkeits-Netzwerkverbindungen wie 10GbE und InfiniBand. Gluster Elastic Hash entlastet GlusterFS von der Notwendigkeit von Metadatenservern, eliminiert Single Points of Failure und Leistungsengpässe und realisiert tatsächlich einen parallelen Datenzugriff.

l Hohe Verfügbarkeit

GlusterFS kann Dateien automatisch replizieren, z. B. durch Spiegelung oder mehrfache Kopien, und so sicherstellen, dass die Daten auch bei einem Hardwareausfall immer verfügbar sind. Durch die Selbstheilung werden die Daten in ihrem korrekten Zustand wiederhergestellt und Reparaturen werden inkrementell im Hintergrund praktisch ohne Leistungsbelastung durchgeführt. GlusterFS entwirft kein eigenes privates Datendateiformat, sondern verwendet gängige Standard-Festplattendateisysteme in Betriebssystemen (wie EXT3, ZFS) zum Speichern von Dateien, sodass Daten mit verschiedenen Standardtools kopiert und darauf zugegriffen werden können.

l Globaler einheitlicher Namespace

Der globale, einheitliche Namespace fasst Festplatten- und Speicherressourcen in einem einzigen virtuellen Speicherpool zusammen und schützt so die zugrunde liegende physische Hardware vor Benutzern und Anwendungen der oberen Schicht. Speicherressourcen können in einem virtuellen Speicherpool je nach Bedarf flexibel erweitert, beispielsweise vergrößert oder verkleinert werden. Beim Speichern von Abbildern virtueller Maschinen gibt es keine Begrenzung für die Anzahl der speicherbaren virtuellen Abbilddateien, und Tausende virtuelle Maschinen teilen Daten über einen einzigen Bereitstellungspunkt. Die E/A virtueller Maschinen kann automatisch auf alle Server im Namespace verteilt werden, wodurch Zugriffs-Hotspots und Leistungsengpässe vermieden werden, die in SAN-Umgebungen häufig auftreten.

l Elastischer Hash-Algorithmus

GlusterFS verwendet elastische Hashing-Algorithmen, um Daten in Speicherpools zu lokalisieren, statt zentralisierte oder verteilte Metadatenserverindizes. In anderen Scale-out-Speichersystemen verursachen Metadatenserver häufig Engpässe bei der E/A-Leistung und Single Points of Failure. In GlusterFS können alle Speichersysteme in Scale-Out-Speicherkonfigurationen jeden Daten-Shard intelligent lokalisieren, ohne auf den Index zu achten oder andere Server abzufragen. Dieser Entwurfsmechanismus parallelisiert den Datenzugriff vollständig und erreicht so eine echte lineare Leistungsskalierung.

l Elastisches Volumenmanagement

Daten werden in logischen Volumes gespeichert, die unabhängig von einem virtualisierten physischen Speicherpool logisch partitioniert werden können. Speicherserver können online hinzugefügt und entfernt werden, ohne dass es zu Anwendungsunterbrechungen kommt. Logische Volumes können auf allen konfigurierten Servern vergrößert und verkleinert, zum Kapazitätsausgleich zwischen Servern verschoben oder Systeme hinzugefügt und entfernt werden – alles online. Änderungen an der Dateisystemkonfiguration können auch online in Echtzeit vorgenommen und angewendet werden, was eine Anpassung an sich ändernde Arbeitslastbedingungen oder eine Online-Leistungsoptimierung ermöglicht.

l Basierend auf Standardprotokollen

Der Gluster-Speicherdienst unterstützt die nativen Protokolle NFS, CIFS, HTTP, FTP und Gluster und ist vollständig kompatibel mit den POSIX-Standards. Bestehende Anwendungen können auf Daten in Gluster zugreifen, ohne Änderungen vorzunehmen oder dedizierte APIs zu verwenden. Dies ist sehr nützlich, wenn Gluster in einer öffentlichen Cloud-Umgebung bereitgestellt wird. Gluster abstrahiert die spezifische API des Cloud-Dienstanbieters und stellt dann eine Standard-POSIX-Schnittstelle bereit.

2. Designziele

Die Designphilosophie von GlusterFS unterscheidet sich erheblich von bestehenden parallelen/Cluster-/verteilten Dateisystemen. Wenn GlusterFS keinen wesentlichen Durchbruch im Design erzielt, wird es schwierig sein, sich im Wettbewerb mit Lustre, PVFS2, Ceph usw. einen Vorteil zu verschaffen, geschweige denn mit GPFS, StorNext, ISILON, IBRIX und anderen kommerziellen Dateisystemen mit vielen zu konkurrieren Jahre der Technologieakkumulation und Marktakkumulation. Zu seinen zentralen Designzielen gehören die folgenden drei:

lElastisches Aufbewahrungssystem (Elastizität)

Die Elastizität des Speichersystems bedeutet, dass Unternehmen den Datenspeicher flexibel erhöhen oder verringern und Ressourcen im Speicherpool entsprechend den Geschäftsanforderungen hinzufügen oder löschen können, ohne den Systembetrieb zu unterbrechen. Eines der Designziele von GlusterFS ist die Elastizität, die das dynamische Hinzufügen und Löschen von Datenmengen, die Erweiterung oder Reduzierung von Datenmengen, das Hinzufügen und Löschen von Speicherservern usw. ermöglicht, ohne den normalen Betrieb des Systems und der Geschäftsdienste zu beeinträchtigen. Früheren Versionen von GlusterFS mangelte es an Flexibilität und einige Verwaltungsarbeiten erforderten Dienstunterbrechungen. Die neueste Version 3.1. GlusterFS erreicht dieses Designziel hauptsächlich durch Speichervirtualisierungstechnologie und logisches Volume-Management.

lLineares Scale-Out

Eine lineare Erweiterung ist für Speichersysteme sehr schwer zu erreichen. Normalerweise ist die Beziehung zwischen Systemerweiterung und Leistungsverbesserung eine logarithmische LOG-Kurve, da entsprechende Lasten gleichzeitig erzeugt werden und ein Teil der Leistungsverbesserung verbraucht wird. Viele aktuelle parallele/Cluster/verteilte Dateisysteme verfügen über eine hohe Skalierbarkeit. Lustre-Speicherknoten können mehr als 1.000 erreichen, und die Anzahl der Clients kann mehr als 25.000 erreichen. Diese Skalierbarkeit ist sehr leistungsstark, aber Lustre erweitert sich nicht linear.

Die vertikale Erweiterung (Scale-Up) zielt darauf ab, die Speicherkapazität oder Leistung eines einzelnen Knotens zu erhöhen. Es gibt jedoch häufig verschiedene theoretische oder physische Einschränkungen, die den Speicherbedarf nicht decken können. Die horizontale Erweiterung (Scale-Out) verbessert die Kapazität oder Leistung des gesamten Systems durch das Hinzufügen von Speicherknoten. Dieser Erweiterungsmechanismus ist ein aktueller Hotspot in der Speichertechnologie und kann effektiv auf Speicheranforderungen wie Kapazität und Leistung reagieren. Die meisten aktuellen parallelen/Cluster-/verteilten Dateisysteme verfügen über horizontale Erweiterungsmöglichkeiten.

GlusterFS ist eine lineare Scale-Out-Architektur, die durch Scale-Out von Speicherknoten lineare Speicherkapazitäts- und Leistungsverbesserungen erzielen kann. In Kombination mit der vertikalen Erweiterung von GlusterFS können daher mehrdimensionale Erweiterungsmöglichkeiten erzielt werden. Durch Erhöhen der Festplatte jedes Knotens kann die Speicherkapazität erhöht werden. Durch das Hinzufügen von Speicherknoten kann die Leistung verbessert werden, wodurch mehr Festplatten-, Speicher- und E/A-Ressourcen gesammelt werden in größere Kapazität und höhere Leistung. Leistung virtueller Speicherpools. GlusterFS nutzt drei grundlegende Technologien, um lineare Scale-Out-Funktionen zu erreichen:

1)??? Metadatendienste eliminieren

2)??? Effiziente Datenverteilung zur Erzielung von Skalierbarkeit und Zuverlässigkeit

3)??? Maximieren Sie die Leistung durch Parallelisierung einer vollständig verteilten Architektur

l?Hohe Zuverlässigkeit (Zuverlässigkeit)

Ähnlich wie GFS (Google File System) kann GlusterFS auf gewöhnlichen Servern und Speichergeräten aufgebaut werden, daher ist Zuverlässigkeit besonders wichtig. GlusterFS hat Zuverlässigkeit von Anfang an in sein Kerndesign integriert und nutzt eine Vielzahl von Technologien, um dieses Designziel zu erreichen. Erstens wird davon ausgegangen, dass Ausfälle normale Ereignisse sind, einschließlich Hardware-, Festplatten- und Netzwerkausfällen sowie Datenbeschädigungen, die durch Fehlbedienungen des Administrators verursacht werden. GlusterFS ist so konzipiert, dass es automatische Replikations- und automatische Reparaturfunktionen unterstützt, um die Datenzuverlässigkeit ohne Eingriff des Administrators sicherzustellen. Zweitens nutzt GlusterFS die Protokollfunktion zugrunde liegender Festplattendateisysteme wie EXT3/ZFS, um ein gewisses Maß an Datenzuverlässigkeit zu gewährleisten, ohne das Rad neu erfinden zu müssen. Drittens ist GlusterFS ein metadatenfreies Serverdesign, das keine Metadatensynchronisierung oder Konsistenzwartung erfordert, was die Systemkomplexität erheblich reduziert und nicht nur die Leistung, sondern auch die Systemzuverlässigkeit erheblich verbessert.

3.???Technische Merkmale

Die technische Implementierung von GlusterFS unterscheidet sich erheblich von herkömmlichen Speichersystemen oder anderen vorhandenen verteilten Dateisystemen, was sich hauptsächlich in den folgenden Aspekten widerspiegelt.

l? Vollständige Softwareimplementierung (nur Software)

GlusterFS betrachtet Speicher als ein Softwareproblem, das nicht dadurch gelöst werden kann, dass Benutzer auf einen bestimmten Anbieter oder eine bestimmte Hardwarekonfiguration beschränkt werden. GlusterFS verfügt über ein offenes Design und unterstützt weitgehend branchenübliche Speicher-, Netzwerk- und Computerausrüstung, anstatt mit maßgeschneiderter Spezialhardware gebündelt zu werden. Für gewerbliche Kunden kann GlusterFS als virtuelle Appliance, verpackt mit einem virtuellen Maschinencontainer oder als Image in der öffentlichen Cloud bereitgestellt werden. In der Open-Source-Community wird GlusterFS weit verbreitet auf verschiedenen Betriebssystemen basierend auf billiger, ungenutzter Hardware eingesetzt und bildet einen zentralen und einheitlichen virtuellen Speicherressourcenpool. Kurz gesagt ist GlusterFS eine offene, rein softwarebasierte Implementierung, die völlig unabhängig von Hardware und Betriebssystemen ist.

l? Vollständiger Storage-Betriebssystem-Stack

GlusterFS bietet nicht nur ein verteiltes Dateisystem, sondern auch viele andere wichtige verteilte Funktionen, wie z. B. verteilte Speicherverwaltung, E/A-Planung, Soft-RAID und Selbstheilung. GlusterFS nutzt die Erfahrungen und Lehren der Mikrokernel-Architektur und die Designideen des GNU/Hurd-Betriebssystems, um einen vollständigen Speicher-Betriebssystem-Stack im Benutzerbereich zu implementieren.

l? User Space-Implementierung (User Space)

Im Gegensatz zu herkömmlichen Dateisystemen ist GlusterFS im Benutzerbereich implementiert, was die Installation und Aktualisierung besonders einfach macht. Darüber hinaus wird dadurch auch die Schwelle für normale Benutzer, GlusterFS basierend auf dem Quellcode zu ändern, erheblich reduziert. Es sind nur allgemeine C-Programmierkenntnisse erforderlich und keine besonderen Erfahrungen in der Kernel-Programmierung erforderlich.

l? Modulare stapelbare Architektur

GlusterFS verwendet eine modulare und gestapelte Architektur und kann durch flexible Konfiguration hochgradig angepasste Anwendungsumgebungen unterstützen, z. B. großen Dateispeicher, massiven kleinen Dateispeicher, Cloud-Speicher, Anwendungen mit mehreren Übertragungsprotokollen usw. Jede Funktion wird in Form von Modulen implementiert, und dann können einfache Kombinationen in Form von Bausteinen komplexe Funktionen realisieren. Beispielsweise kann das Replicate-Modul RAID1 implementieren, das Stripe-Modul kann RAID0 implementieren und durch die Kombination der beiden können RAID10 und RAID01 erreicht werden, wodurch gleichzeitig eine hohe Leistung und hohe Zuverlässigkeit erreicht werden.

l? In nativen Formaten gespeicherte Daten

GlusterFS speichert Daten in Originaldatenformaten (wie EXT3, EXT4, XFS, ZFS) und implementiert eine Vielzahl automatischer Datenreparaturmechanismen. Dadurch ist das System äußerst belastbar und der Zugriff auf Dateien ist über andere Standardtools auch offline möglich. Wenn Benutzer Daten von GlusterFS migrieren müssen, können sie die Daten weiterhin vollständig nutzen, ohne Änderungen vorzunehmen.

Keine Metadaten mit dem Elastic Hash-Algorithmus

Bei Scale-Out-Speichersystemen besteht eine der größten Herausforderungen darin, die Zuordnungsbeziehung zwischen Datenlogik und physischem Standort, also Datenmetadaten, aufzuzeichnen, die auch Informationen wie Attribute und Zugriffsberechtigungen umfassen können. Herkömmliche verteilte Speichersysteme verwenden zentralisierte oder verteilte Metadatendienste, um Metadaten zu verwalten. Zentralisierte Metadatendienste können zu Single Points of Failure und Leistungsengpässen führen, während verteilte Metadatendienste Probleme mit der Leistungslast und der Konsistenz der Metadatensynchronisierung haben. Insbesondere bei Anwendungen mit sehr kleinen Dateien stellt das Metadatenproblem eine sehr große Herausforderung dar.

GlusterFS übernimmt in einzigartiger Weise das Design eines metadatenfreien Dienstes und verwendet stattdessen Algorithmen zum Auffinden von Dateien. Metadaten und Daten werden nicht getrennt, sondern zusammen gespeichert. Alle Speichersystemserver im Cluster können Dateidaten-Shards einfach durch die Anwendung von Algorithmen basierend auf Dateinamen und Pfaden intelligent lokalisieren, ohne dass Indizes oder andere Server abgefragt werden müssen. Dies ermöglicht eine vollständige Parallelisierung des Datenzugriffs, was zu einer echten linearen Leistungsskalierung führt. Der metadatenfreie Server verbessert die Leistung, Zuverlässigkeit und Stabilität von GlusterFS erheblich.

4.??? Gesamtarchitektur und Design

Die Gesamtarchitektur und die Komponenten von GlusterFS sind in Abbildung 2 dargestellt. Es besteht hauptsächlich aus einem Speicherserver (Brick Server), einem Client und einem NFS/Samba-Speicher-Gateway. Es ist nicht schwer festzustellen, dass es in der GlusterFS-Architektur keine Metadatenserverkomponente gibt. Dies ist ihr größtes Designmerkmal und hat entscheidende Bedeutung für die Verbesserung der Leistung, Zuverlässigkeit und Stabilität des gesamten Systems. GlusterFS unterstützt die Hochgeschwindigkeits-Netzwerkverbindung TCP/IP und InfiniBand RDMA. Clients können über das native Glusterfs-Protokoll auf Daten zugreifen. Andere Terminals, auf denen keine GlusterFS-Clients ausgeführt werden, können über das Speicher-Gateway und das NFS/CIFS-Standardprotokoll auf Daten zugreifen.

Der Speicherserver stellt hauptsächlich grundlegende Datenspeicherfunktionen bereit, und die endgültigen Dateidaten werden über eine einheitliche Planungsstrategie auf verschiedene Speicherserver verteilt. Glusterfsd läuft auf ihnen und ist für die Bearbeitung von Datendienstanfragen von anderen Komponenten verantwortlich. Wie bereits erwähnt, werden die Daten direkt im lokalen Dateisystem des Servers in ihrem ursprünglichen Format gespeichert, z. B. EXT3, EXT4, XFS, ZFS usw. Der Datenspeicherpfad wird beim Ausführen des Dienstes angegeben. Mehrere Speicherserver können über den Volume-Manager auf dem Client oder Speicher-Gateway einen Cluster bilden, z. B. Stripe- (RAID0), Replicate- (RAID1) und DHT-Speichercluster (Distributed Hash). Verschachtelte Kombinationen können auch zur Bildung komplexerer Cluster verwendet werden. , wie etwa RAID10.

Da kein Metadatenserver vorhanden ist, übernimmt der Client mehr Funktionen, darunter Datenvolumenverwaltung, E/A-Planung, Dateipositionierung, Datencaching und andere Funktionen. Auf dem Client läuft der Glusterfs-Prozess, der eigentlich eine symbolische Verbindung zu Glusterfsd darstellt. Das FUSE-Modul (File System in User Space) wird verwendet, um GlusterFS auf dem lokalen Dateisystem zu mounten, um einen POSIX-kompatiblen Zugriff auf Systemdaten zu erreichen. In der neuesten Version 3.1. Die Auslastung des GlusterFS-Clients ist höher als bei herkömmlichen verteilten Dateisystemen, einschließlich CPU-Auslastung und Speicherauslastung.

Das GlusterFS-Speicher-Gateway bietet elastische Volume-Verwaltung und NFS/CIFS-Zugriffs-Proxy-Funktionen. Auf ihm werden Glusterd- und Glusterfs-Prozesse ausgeführt, bei denen es sich bei beiden um symbolische Glusterfsd-Links handelt. Der Volume-Manager ist für die Erstellung, Löschung, Kapazitätserweiterung und -reduzierung, Kapazitätsglättung und andere Funktionen logischer Volumes verantwortlich und ist für die Bereitstellung von Informationen zu logischen Volumes und aktiven Update-Benachrichtigungsfunktionen für Clients verantwortlich. GlusterFS 3.1.X implementiert eine elastische und automatisierte Verwaltung logischer Volumes, ohne Datendienste oder Anwendungsdienste der oberen Schicht zu unterbrechen. Auf Windows-Clients oder Clients, auf denen GlusterFS nicht installiert ist, muss über das NFS/CIFS-Proxy-Gateway zugegriffen werden. Zu diesem Zeitpunkt ist das Gateway als NFS- oder Samba-Server konfiguriert. Im Vergleich zum nativen Client ist die Leistung des Gateways durch NFS/Samba eingeschränkt.

„GlusterFS ist ein modulares Stack-Architekturdesign, wie in Abbildung 3 dargestellt. Das Modul heißt Translator und stellt einen leistungsstarken Mechanismus von GlusterFS dar. Mit Hilfe dieser wohldefinierten Schnittstelle kann die Funktionalität des Dateisystems effizient und einfach erweitert werden. Die Server- und Client-Modulschnittstellen sind kompatibel und derselbe Übersetzer kann auf beiden Seiten gleichzeitig geladen werden. Bei jedem Übersetzer handelt es sich um eine dynamische SO-Bibliothek, die je nach Konfiguration zur Laufzeit dynamisch geladen wird. Jedes Modul implementiert eine bestimmte Grundfunktion. Alle Funktionen in GlusterFS werden durch Übersetzer implementiert, z. B. Cluster, Speicher, Leistung, Protokoll, Funktionen usw. Einfache und einfache Module können durch Stapelkombination komplexe Funktionen erreichen. Diese Designidee basiert auf dem virtuellen Dateisystemdesign des GNU/Hurd-Mikrokernels, der Zugriffe auf externe Systeme in entsprechende Aufrufe an das Zielsystem umwandeln kann. Die meisten Module werden auf der Clientseite ausgeführt, z. B. Synthesizer, E/A-Scheduler und Leistungsoptimierung usw. Die Serverseite ist relativ einfach. Sowohl der Client als auch der Speicherserver verfügen über eigene Speicherstapel, die einen Übersetzer-Funktionsbaum bilden und mehrere Module anwenden. Das modulare und gestapelte Architekturdesign reduziert die Komplexität des Systemdesigns erheblich und vereinfacht die Systemimplementierung, Upgrades und Systemwartung.

5.??? Elastischer Hash-Algorithmus

Bei verteilten Systemen ist die Metadatenverarbeitung der Schlüssel zur Bestimmung der Skalierbarkeit, Leistung und Stabilität des Systems. GlusterFS verfolgt einen anderen Ansatz, indem es vollständig auf Metadatendienste verzichtet und elastische Hashing-Algorithmen verwendet, um zentralisierte oder verteilte Metadatendienste in herkömmlichen verteilten Dateisystemen zu ersetzen. Dadurch wird das Problem der Metadaten grundsätzlich gelöst, wodurch eine nahezu lineare hohe Skalierbarkeit erreicht und gleichzeitig die Systemleistung und -zuverlässigkeit verbessert wird. GlusterFS verwendet Algorithmen für die Datenlokalisierung. Jeder Server und Client im Cluster kann Daten nur anhand des Pfads und Dateinamens lokalisieren und lesen und schreiben. Mit anderen Worten: GlusterFS erfordert keine Trennung von Metadaten und Daten, da die Dateipositionierung unabhängig parallelisiert werden kann. Der Datenzugriffsprozess in GlusterFS ist wie folgt:

1. Berechnen Sie den Hash-Wert. Die Eingabeparameter sind der Dateipfad und der Dateiname.

2. Wählen Sie basierend auf dem Hash-Wert ein Subvolume (Speicherserver) im Cluster aus und suchen Sie die Datei.

3. Führen Sie einen Datenzugriff auf das ausgewählte Subvolume durch.

GlusterFS verwendet derzeit den Davies-Meyer-Algorithmus, um den Dateinamen-Hash-Wert zu berechnen und eine 32-Bit-Ganzzahl zu erhalten. Der Davies-Meyer-Algorithmus verfügt über eine sehr gute Hash-Verteilung und ist sehr recheneffizient. Unter der Annahme, dass sich im logischen Volume N Speicherserver befinden, wird der 32-Bit-Ganzzahlraum gleichmäßig in N aufeinanderfolgende Unterräume aufgeteilt und jeder Raum wird einem Speicherserver zugeordnet. Auf diese Weise wird der berechnete 32-Bit-Hash-Wert auf einen Speicherserver projiziert, also auf das Subvolume, das wir auswählen möchten. Ist es wirklich so einfach? Betrachten wir nun das Hinzufügen und Löschen von Speicherknoten, das Umbenennen von Dateien usw. Wie löst GlusterFS diese Probleme und macht es flexibel?

Wenn dem logischen Volume ein neuer Speicherknoten hinzugefügt wird und keine andere Verarbeitung durchgeführt wird, ändert sich der Hashwert-Zuordnungsbereich und das vorhandene Dateiverzeichnis wird möglicherweise auf andere Speicherserver verschoben, was zu einem Standortfehler führt. Die Lösung des Problems besteht darin, das Dateiverzeichnis neu zu verteilen und die Dateien auf den richtigen Speicherserver zu verschieben. Dies erhöht jedoch die Systemlast erheblich, insbesondere bei Massenspeichersystemen, auf denen bereits große Datenmengen gespeichert sind. Dies ist offensichtlich nicht machbar. Eine andere Methode besteht darin, den Hash-Zuordnungsraum des neuen Knotens und benachbarter Knoten mithilfe eines konsistenten Hash-Algorithmus zu ändern. Nur ein Teil der Daten auf den benachbarten Knoten muss auf den neuen Knoten verschoben werden, und die Auswirkungen sind relativ gering. Dies bringt jedoch ein weiteres Problem mit sich, nämlich dass die Gesamtlast des Systems unausgeglichen ist. GlusterFS hat die beiden oben genannten Methoden nicht übernommen, sondern einen flexibleren Algorithmus entwickelt. Die Hash-Verteilung von GlusterFS basiert auf dem Verzeichnis als Grundeinheit. Das übergeordnete Verzeichnis der Datei verwendet erweiterte Attribute, um Sub-Volume-Zuordnungsinformationen aufzuzeichnen, und die folgenden Unterdateiverzeichnisse werden auf dem Speicherserver verteilt, auf den sich das übergeordnete Verzeichnis befindet gehört. Da das Dateiverzeichnis die Verteilungsinformationen im Voraus speichert, hat der neue Knoten keinen Einfluss auf die vorhandene Dateispeicherverteilung. Er beginnt, vom neu erstellten Verzeichnis aus an der Speicherverteilungsplanung teilzunehmen. Bei diesem Design müssen neue Knoten keine Dateien verschieben, aber der Lastausgleich wird nicht geglättet und die alten Knoten werden stark belastet. GlusterFS berücksichtigt dieses Problem in seinem Design. Beim Erstellen einer neuen Datei gibt es dem Knoten mit der geringsten Kapazitätsauslastung Priorität und erstellt auf dem Zielspeicherknoten eine Dateiverknüpfung direkt zu dem Knoten, auf dem die Datei tatsächlich gespeichert ist. Darüber hinaus kann das Elastic-Volume-Management-Tool GlusterFS eine manuelle Lastglättung im Hintergrund durchführen und Dateien verschieben und neu verteilen. Anschließend werden alle Speicherserver geplant.

GlusterFS bietet derzeit nur begrenzte Unterstützung für das Löschen von Speicherknoten und ist noch nicht vollständig unterbrechungsfrei. Wenn Sie den Knoten direkt löschen, werden die Dateien auf dem Speicherserver nicht durchsucht und sind nicht zugänglich, und auch die Erstellung des Dateiverzeichnisses schlägt fehl. Derzeit gibt es zwei manuelle Lösungen: Eine besteht darin, die Daten auf dem Knoten erneut nach GlusterFS zu kopieren, und die andere darin, einen neuen Knoten zu verwenden, um den gelöschten Knoten zu ersetzen und die ursprünglichen Daten beizubehalten.

Wenn eine Datei umbenannt wird, erzeugt der Hash-Algorithmus offensichtlich andere Werte und es ist sehr wahrscheinlich, dass sich die Datei auf einem anderen Speicherserver befindet, was zu einem Dateizugriffsfehler führt. Bei Verwendung der Datenverschiebungsmethode ist es bei großen Dateien schwierig, sie in Echtzeit durchzuführen. Um die Leistung und Dienstunterbrechungen nicht zu beeinträchtigen, verwendet GlusterFS Dateiverknüpfungen, um das Problem der Dateiumbenennung zu lösen. Auf dem Zielspeicherserver wird ein Link erstellt, der auf den tatsächlichen Speicherserver verweist, und das System löst ihn auf und leitet ihn um, wenn darauf zugegriffen wird. Darüber hinaus wird gleichzeitig die Dateimigration im Hintergrund durchgeführt und der Dateilink wird nach Erfolg automatisch gelöscht. Eine ähnliche Verarbeitung erfolgt für die Dateiverschiebung. Der Vorteil besteht darin, dass der Vordergrundvorgang in Echtzeit verarbeitet werden kann und die physische Datenmigration im Hintergrund platziert und zum richtigen Zeitpunkt ausgeführt wird.

?? Der elastische Hash-Algorithmus ordnet Dateien logische Volumes zu. Wie ordnet GlusterFS logischen Volumes physische Volumes zu? GlusterFS3.1.X implementiert eine wirklich elastische Volume-Verwaltung, wie in Abbildung 4 dargestellt. Speichervolumes sind eine Abstraktion der zugrunde liegenden Hardware und können je nach Bedarf erweitert und verkleinert sowie zwischen verschiedenen physischen Systemen migriert werden. Speicherserver können online hinzugefügt und entfernt werden, und der Datenlastausgleich kann automatisch zwischen Clustern durchgeführt werden. Daten sind immer online verfügbar, ohne dass die Anwendung unterbrochen wird. Aktualisierungen der Dateisystemkonfiguration können auch online durchgeführt werden, und Konfigurationsänderungen können schnell und dynamisch im gesamten Cluster verbreitet werden, wobei sie sich automatisch an Lastschwankungen und Leistungsoptimierungen anpassen.

??? Der elastische Hash-Algorithmus selbst bietet keine Datenfehlertoleranz. GlusterFS verwendet Spiegelung oder Replikation, um die Datenverfügbarkeit sicherzustellen. Spiegelung oder 3-Wege-Replikation werden empfohlen. Im Replikationsmodus verwendet der Speicherserver eine synchrone Schreibreplikation zu anderen Speicherservern, und ein Ausfall eines einzelnen Servers ist für den Client völlig transparent. Darüber hinaus begrenzt GlusterFS die Anzahl der Kopien nicht und Lesevorgänge werden auf alle Spiegelspeicherknoten verteilt, was die Leseleistung verbessern kann. Der elastische Hash-Algorithmus ordnet Dateien eindeutigen logischen Volumes zu und die Replikation stellt sicher, dass Daten auf mindestens zwei verschiedenen Speicherknoten gespeichert werden. Die Kombination der beiden macht GlusterFS elastischer.

6.??? Übersetzer

Wie bereits erwähnt, stellen Übersetzer einen leistungsstarken Dateisystem-Funktionserweiterungsmechanismus dar, der von GlusterFS bereitgestellt wird. Diese Designidee ist dem GNU/Hurd-Mikrokernel-Betriebssystem entlehnt. Alle Funktionen in GlusterFS werden über den Translator-Mechanismus implementiert, der zur Laufzeit als dynamische Bibliothek geladen wird, und Server und Client sind miteinander kompatibel. GlusterFS 3.1.X umfasst hauptsächlich die folgenden Arten von Übersetzern:

(1)?Cluster: Speicherclusterverteilung, derzeit gibt es drei Methoden: AFR, DHT und Stripe

(2)? Debug: Verfolgen Sie interne Funktionen und Systemaufrufe von GlusterFS

(3) Verschlüsselung: Einfache Implementierung der Datenverschlüsselung

(4) Funktionen: Zugriffskontrolle, Sperre, Mac-Kompatibilität, Stille, Kontingent, schreibgeschützt, Papierkorb usw.

(5)? Mgmt: Elastisches Volumenmanagement

(6)? Mount: Implementierung der FUSE-Schnittstelle

(7)? Nfs: Interner NFS-Server

(8) Leistung: io-cache, io-threads, Quick-Read, Read-Ahead, Stat-Prefetch, Sysmlink-Cache, Write-Behind und andere Leistungsoptimierungen

(9)? Protokoll: Server- und Client-Protokollimplementierung

(10) Speicher: Implementierung der POSIX-Schnittstelle des zugrunde liegenden Dateisystems

Hier konzentrieren wir uns auf Cluster-Übersetzer, die den Kern der Realisierung des GlusterFS-Clusterspeichers bilden. Sie umfassen drei Typen: AFR (Automatic File Replication), DHT (Distributed Hash Table) und Stripe.

AFR entspricht RAID1. Mehrere Kopien derselben Datei werden auf mehreren Speicherknoten aufbewahrt. Es wird hauptsächlich verwendet, um eine hohe Verfügbarkeit und automatische Datenreparatur zu erreichen. Alle Subvolumes von AFR haben den gleichen Namensraum. Bei der Suche nach Dateien wird beim ersten Knoten begonnen, bis die Suche erfolgreich ist oder der letzte Knoten durchsucht wird. Beim Lesen von Daten plant AFR alle Anforderungen an alle Speicherknoten und führt einen Lastausgleich durch, um die Systemleistung zu verbessern. Beim Schreiben von Daten müssen Sie die Datei zunächst auf allen Sperrservern sperren. Standardmäßig ist der erste Knoten der Sperrserver, und es können mehrere Knoten angegeben werden. Anschließend schreibt AFR Daten in Form von Protokollereignissen auf alle Server. Nach Erfolg werden die Protokolle gelöscht und entsperrt. AFR erkennt und repariert automatisch Dateninkonsistenzen in derselben Datei und ermittelt mithilfe von Änderungsprotokollen einwandfreie Datenkopien. Die automatische Reparatur wird beim ersten Zugriff auf das Dateiverzeichnis ausgelöst. Wenn es sich um ein Verzeichnis handelt, werden die korrekten Daten auf alle Subvolumes kopiert. Wenn die Datei nicht vorhanden ist, wird sie erstellt. Wenn die Dateiinformationen nicht übereinstimmen , wird es repariert. Wenn das Protokoll ein Update anzeigt, wird es aktualisiert.

DHT ist der oben vorgestellte elastische Hash-Algorithmus. Er verwendet die Hash-Methode zum Verteilen von Daten und verteilt den Namensraum auf alle Knoten. Bei der Suche nach Dateien wird der elastische Hash-Algorithmus verwendet und ist nicht auf Namespaces angewiesen. Beim Durchlaufen des Dateiverzeichnisses ist die Implementierung jedoch komplexer und ineffizienter und es müssen alle Speicherknoten durchsucht werden. Eine einzelne Datei wird nur für einen eindeutigen Speicherknoten geplant. Sobald die Datei gefunden wurde, ist der Lese- und Schreibmodus relativ einfach. DHT verfügt nicht über Fehlertoleranz und muss AFR verwenden, um eine hohe Verfügbarkeit zu erreichen, wie im Anwendungsfall in Abbildung 5 dargestellt.

Stripe entspricht RAID0, einem Shard-Speicher. Dateien werden in Daten-Shards fester Länge aufgeteilt und in einer Round-Robin-Rotation auf allen Speicherknoten gespeichert. Alle Speicherknoten in Stripe bilden einen vollständigen Namensraum. Bei der Suche nach einer Datei müssen Sie alle Knoten abfragen, was sehr ineffizient ist. Beim Lesen und Schreiben von Daten bezieht Stripe alle Shard-Speicherknoten ein, und Vorgänge können mit sehr hoher Leistung gleichzeitig auf mehreren Knoten ausgeführt werden. Stripe wird normalerweise in Kombination mit AFR verwendet, um RAID10/RAID01 zu bilden, um gleichzeitig hohe Leistung und hohe Verfügbarkeit zu erreichen. Natürlich beträgt die Speicherauslastung weniger als 50 %.

7.??? Designdiskussion

GlusterFS ist ein elastisches verteiltes Dateisystem mit hoher Skalierbarkeit, hoher Leistung, hoher Verfügbarkeit und horizontaler Skalierbarkeit. Es verfügt über einzigartige architektonische Designmerkmale wie metadatenfreies Serverdesign, Stapelarchitektur usw. Allerdings sind Speicheranwendungsprobleme sehr komplex und GlusterFS kann nicht alle Speicheranforderungen erfüllen. Es müssen Mängel bei Design und Implementierung vorliegen. Lassen Sie uns unten eine kurze Analyse durchführen.

l? Kein Metadatenserver vs. Metadatenserver

Der Vorteil des metadatenfreien Serverdesigns besteht darin, dass es keinen Single Point of Failure und Leistungsengpässe gibt, was die Skalierbarkeit, Leistung, Zuverlässigkeit und Stabilität des Systems verbessern kann. Bei Anwendungen mit sehr kleinen Dateien kann dieses Design das schwierige Problem der Metadaten effektiv lösen. Die negativen Auswirkungen bestehen darin, dass Probleme mit der Datenkonsistenz komplizierter werden, Vorgänge beim Durchsuchen von Dateiverzeichnissen ineffizient sind und es an globalen Überwachungs- und Verwaltungsfunktionen mangelt. Gleichzeitig führt es dazu, dass der Client mehr Funktionen übernimmt, wie z. B. Dateipositionierung, Namespace-Caching, Pflege der Ansicht logischer Volumes usw., was die Belastung des Clients erhöht und erhebliche CPU- und Speicherkapazitäten beansprucht.

l? Benutzerraum vs. Kernelraum

Der Benutzerbereich ist relativ einfach zu implementieren, erfordert weniger Entwicklerkenntnisse und ist relativ sicher in der Ausführung. Der Benutzerraum ist ineffizient und Daten müssen mehrmals mit dem Kernelraum ausgetauscht werden. Darüber hinaus verwendet GlusterFS FUSE, um die Standard-Dateisystemschnittstelle zu implementieren, was zu einem Leistungsverlust führt. Durch die Implementierung des Kernelraums kann ein hoher Datendurchsatz erreicht werden. Der Nachteil besteht darin, dass die Implementierung und das Debuggen sehr schwierig sind. Programmfehler führen häufig zu Systemabstürzen und geringer Sicherheit. In Bezug auf die vertikale Erweiterung ist der Kernelbereich besser als der Benutzerbereich, und GlusterFS verfügt über die Fähigkeit zur horizontalen Erweiterung, um dies auszugleichen.

l? Gestapelt vs. nicht gestapelt

Das ist ein bisschen wie der Kampf zwischen Mikrokernel-Design und Monokernel-Design von Betriebssystemen. Das GlusterFS-Stack-Designkonzept ist vom GNU/Hurd-Mikrokernel-Betriebssystem abgeleitet. Es verfügt über starke Systemerweiterungsfähigkeiten. Die Komplexität des Systemdesigns und der Systemimplementierung wird erheblich reduziert. Durch die Stapelkombination grundlegender Funktionsmodule können leistungsstarke Funktionen erreicht werden. Wenn wir uns die GlusterFS-Volume-Konfigurationsdatei ansehen, können wir feststellen, dass der Übersetzerfunktionsbaum normalerweise mehr als 10 Schichten tief ist und Schicht für Schicht aufgerufen wird. Die Effizienz ist offensichtlich. Das Nicht-Stack-Design kann als ein einzelnes Kernel-Design ähnlich wie Linux betrachtet werden. Systemaufrufe werden über Interrupts implementiert, was sehr effizient ist. Das Problem bei Letzterem besteht darin, dass der Systemkern aufgebläht, komplex zu implementieren und zu erweitern und bei Problemen schwierig zu debuggen ist.

l? Ursprüngliches Speicherformat vs. privates Speicherformat

GlusterFS verwendet das Originalformat zum Speichern von Dateien oder Daten-Shards, auf die mit verschiedenen Standardtools direkt zugegriffen werden kann. Es verfügt über eine gute Dateninteroperabilität und ist sehr praktisch für Migration und Datenverwaltung. Allerdings wird die Datensicherheit zum Problem, da die Daten auf banale Weise gespeichert werden und von denen, die mit den Daten in Berührung kommen, direkt kopiert und eingesehen werden können. Dies ist für viele Anwendungen, beispielsweise Cloud-Speichersysteme, offensichtlich inakzeptabel. Die Datensicherheit ist für Benutzer besonders wichtig, was auch ein wichtiger Grund für die Entwicklung öffentlicher Cloud-Speicher ist. Das private Speicherformat kann die Sicherheit von Daten gewährleisten, selbst wenn diese durchgesickert sind, ist dies unbekannt. GlusterFS muss ein eigenes privates Format implementieren, das in Design, Implementierung und Datenverwaltung relativ komplex ist und auch einen gewissen Einfluss auf die Leistung hat.

l? Große Dateien vs. kleine Dateien

Ist GlusterFS für die Speicherung großer oder kleiner Dateien geeignet? Der elastische Hash-Algorithmus und die Stripe-Datenverteilungsstrategie beseitigen Metadatenabhängigkeiten, optimieren die Datenverteilung, verbessern die Parallelität des Datenzugriffs und können die Leistung der Speicherung großer Dateien erheblich verbessern. Bei kleinen Dateien löst das metadatenfreie Servicedesign das Problem der Metadaten. GlusterFS wurde jedoch nicht in Bezug auf E/A optimiert. Es gibt immer noch eine große Anzahl kleiner Dateien im zugrunde liegenden Dateisystem des Speicherservers. Der Zugriff auf Metadaten des lokalen Dateisystems stellt einen Engpass dar, und Datenverteilung und Parallelität können nicht vollständig genutzt werden ihre Rolle. Daher eignet sich GlusterFS zum Speichern großer Dateien, die Leistung kleiner Dateien ist jedoch schlecht und es gibt noch viel Raum für Optimierung.

l: Verfügbarkeit vs. Speicherauslastung

GlusterFS verwendet Replikationstechnologie, um eine hohe Datenverfügbarkeit zu gewährleisten. Die Anzahl der Replikationen ist unbegrenzt und die automatische Reparaturfunktion basiert auf der Replikation. Verfügbarkeit und Speicherauslastung sind ein Widerspruch. Hohe Verfügbarkeit bedeutet niedrige Speicherauslastung und umgekehrt. Bei Verwendung der Replikationstechnologie beträgt die Speicherauslastungsrate 1/Anzahl der Replikationen, die Spiegelung 50 % und die Drei-Wege-Replikation nur 33 %. Tatsächlich gibt es Möglichkeiten, die Verfügbarkeit und Speicherauslastung gleichzeitig zu verbessern. Beispielsweise beträgt die Auslastungsrate von RAID5 (n-1)/n, die von RAID6 (n-2)/n und die Erasure-Coding-Technologie kann dies ermöglichen Höhere Speicherauslastung. Rate. Sie können Ihren Kuchen jedoch nicht gleichzeitig essen, da sich beides stärker auf die Leistung auswirkt.

Darüber hinaus ist die aktuelle Code-Implementierung von GlusterFS nicht gut genug, das System ist nicht stabil genug und die Anzahl der FEHLER ist relativ hoch. Gemessen an der Bereitstellungssituation auf der offiziellen Website gibt es viele Testbenutzer, aber nur wenige echte Anwendungen in Produktionsumgebungen. Speicherbereitstellungskapazitäten von mehreren TB bis Dutzenden von TB machen einen großen Anteil aus, und es gibt nur sehr wenige Fälle von Hunderten von TB auf PB-Niveau. . Dies kann auch unter einem anderen Aspekt erklären, dass GlusterFS derzeit nicht stabil genug ist und mehr Zeit zum Testen benötigt. Es lässt sich jedoch nicht leugnen, dass GlusterFS ein zukunftsträchtiges Cluster-Dateisystem ist. Seine Fähigkeit zur linearen horizontalen Erweiterung verschafft ihm einen natürlichen Vorteil, insbesondere für Cloud-Speichersysteme.

3. Einführung in die Terminologie
GlusterFS ist ein verteiltes Open-Source-Dateisystem. Weitere Funktionen werden in der Referenzdokumentation im Anhang vorgestellt.

Brick: Eine Speichereinheit in GFS, die ein Exportverzeichnis eines Servers in einem vertrauenswürdigen Speicherpool ist. Es kann anhand des Hostnamens und des Verzeichnisnamens identifiziert werden, beispielsweise „SERVER:EXPORT“.
Client: Gerät mit gemountetem GFS-Volume.
Erweiterte Attribute: xattr ist eine Dateisystemfunktion, die Benutzer oder Programme dabei unterstützt, Dateien/Verzeichnisse und Metadaten zuzuordnen.
FUSE: Filesystem Userspace ist ein ladbares Kernel-Modul, das es unprivilegierten Benutzern ermöglicht, ihre eigenen Dateisysteme zu erstellen, ohne den Kernel-Code zu ändern. Durch die Ausführung des Dateisystemcodes im Benutzerbereich wird dieser über den FUSE-Code mit dem Kernel verbunden.
Georeplikations-
GFID: Jede Datei oder jedes Verzeichnis in einem GFS-Volume ist mit eindeutigen 128-Bit-Daten verknüpft, die zur Simulation des Inode-
Namespace verwendet werden: Jedes Gluster-Volume exportiert einen einzelnen ns als POSIX-Mount-Punkt.
Knoten: ein Gerät mit mehreren Bausteinen
RDMA: Remote Direct Memory Access, unterstützt den direkten Speicherzugriff, ohne das Betriebssystem beider Parteien zu durchlaufen.
RRDNS: Round-Robin-DNS ist eine Methode zur Rückgabe verschiedener Geräte über DNS-Rotation zum Lastausgleich.
Selbstheilung: Wird zur Ausführung im Hintergrund verwendet, um Inkonsistenzen in Dateien und Verzeichnissen in Replikat-Volumes zu erkennen und diese Inkonsistenzen zu beheben.
Split-Brain: Split-Brain-
Übersetzer:
Volfile: Die Konfigurationsdatei des Glusterfs-Prozesses, normalerweise in /var/lib/glusterd/vols/volname.
Volume: Eine logische Sammlung von Bausteinen

3. Konzepte und Algorithmen

1、Vertrauenswürdiger Speicherpool

? Eine Sammlung von Speicherknoten
? Erstellt durch „Einladen“ anderer Knoten über einen Knoten, hier Probe genannt
? Mitglieder können dynamisch hinzugefügt und dynamisch gelöscht werden.
Der Befehl zum Hinzufügen lautet wie folgt:
Knoten1# Gluster Peer Probe Knoten2 Der
Löschbefehl lautet wie folgt:
node1# gluster peer detach node3

2. Bricks
– Brick ist eine Sammlung von Knoten und ein Exportverzeichnis, z. B. node1:/brick1
– Brick ist das zugrunde liegende RAID oder die Festplatte, die durch das XFS- oder ext4-Dateisystem formatiert wurde, sodass es die Einschränkungen des Dateisystems erbt
– jeder Knoten ist Gibt es eine unbegrenzte Anzahl an Ziegeln
? Der Idealfall ist, dass alle Ziegel in einem Cluster die gleiche Größe haben.

3、Volumen

? Volume ist eine logische Kombination von Bricks
? Es wird bei der Erstellung durch Benennung identifiziert
? Volume ist ein mountbares Verzeichnis
? Die Anzahl der Bricks auf jedem Knoten bleibt unverändert, z. B. mount –t glusterfs www.std.com:test /mnt/gls
Verschiedene Bricks auf einem Knoten können zu verschiedenen Volumes gehören
. Folgende Typen werden unterstützt:
a) verteiltes Volume
, b) Stripeset-Volume,
c) repliziertes Volume,
d) verteiltes repliziertes Volume
, e) gestreiftes repliziertes Volume,
f) verteilte Stripeset-Replikationsrolle

3.1 Verteilte Volumes
? Die Dateiverteilung erfolgt in verschiedenen Bricks
. Verzeichnisse sind in jedem Brick sichtbar
. Der Ausfall eines einzelnen Bricks führt zu Datenverlust
. Es ist kein zusätzlicher Metadatenserver erforderlich

gluster是没有元数据服务器的,它定位文件和寻址都是通过哈希算法,这里使用的叫Davies-Meyer hash algorithm,可寻址空间为2^32次方,即0-4294967296,例如这里有四个节点,那么0-1073741824为node1的可寻址空间,1073741825-214748348为node2的可寻址空间,以此类推。访问一个文件时,通过文件名计算出一个地址,例如2142011129,属于1073741825-214748348,则将它存在node2中。

3.2 Volumes replizieren
? Alle Verzeichnisse und Dateien synchron replizieren
. Daten hochverfügbar halten, wenn ein Knoten ausfällt
. Transaktionsoperationen, Konsistenz beibehalten
. Ein Änderungsprotokoll haben
. Die Anzahl der Kopien kann beliebig bestimmt werden

3.3 Verteiltes Replikationsvolumen
– Der häufigste Modus
– Lesevorgänge können einen Lastausgleich erreichen

3.4 Stripeset-Volume
- Dateien werden in Blöcke unterteilt und auf verschiedenen Bausteinen gespeichert. Die
Verwendung wird nur für sehr große Dateien (größer als die Festplattengröße) empfohlen
. Ein Ausfall des Bausteines führt zu Datenverlust. Es wird empfohlen, ihn gleichzeitig zu verwenden gleichzeitig mit replizierten Volumes.
? Chunks sind Dateien mit Löchern – dies hilft bei der Aufrechterhaltung der Offset-Konsistenz.

4. Zugriffsmechanismus

? FUSE-basiertes natives Protokoll
? NFSv3
? KMU
? Libgfapi
? ReST/HTTP
? HDFS

4.1
Wenn der FUSE-basierte native Zugriffs-Native-Client verbunden ist und eine bestimmte Datei anfordert, findet er die Datei direkt auf diesem Knoten oder diesen Knoten, sendet die Anforderung an diese Knoten und schließt den Vorgang ab.

4.2 NFS-Zugriff Der Zugriff
über andere Protokolle wie NFS oder SMB ist nicht so einfach. Sie müssen zunächst eine Schicht von Lastausgleichsdiensten durchlaufen, bei denen es sich um RRDNS und HA-Dienste handeln kann. Diese Dienste werden nicht von Gluster bereitgestellt und müssen von bereitgestellt werden Sie selbst. RRDNS ist Finden Sie unter jedem Knoten einen leicht belasteten Knoten, um die Anforderung zu senden. HA kann ctdb oder andere verwenden. Wenn der Knoten, an den die Anforderung gesendet wird, ausfällt, wird die Anforderung an einen anderen Knoten weitergeleitet. Kurz gesagt, finden Sie im Voraus einen Knoten und senden Sie die Anfrage an ihn. Hier wird die Anfrage über den NFS-Server auf dem Knoten abgeschlossen, aber die angeforderte Datei befindet sich nicht unbedingt auf diesem Knoten, sodass noch ein Schritt ausgeführt werden muss: Das heißt, es wird erneut an diesen Knoten gesendet. Finden Sie heraus, wo sich die Datei befindet, und verschieben Sie sie auf den Knoten mit der Datei, um den Vorgang abzuschließen. Im Vergleich zum nativen Client-Zugriff können Sie sehen, dass er viel komplizierter ist, also die NFS-Zugriffsleistung ist nicht ideal.

4.3 libgfapi
– Bietet eine Programmierschnittstelle, über die Programme geschrieben und aufgerufen werden können
– Reduziert Kontextwechsel
– Integriert Qemu, Samba, NFS Ganesha über diese Schnittstelle
– Bietet sowohl synchrone als auch asynchrone Schnittstellen
– Implementiert die Bindung verschiedener Sprachen

4.4 libgfapi v/sFUSE-FUSE-Zugriff
Gluster ist ein User-Space-Dateisystem, das nur über FUSE mit dem Kernel interagieren kann, sodass die übergebenen Befehle zuerst vom virtuellen Kernel-Dateisystem VFS akzeptiert werden, einem virtuellen Gerät, das von FUSE /dev/Fuse registriert wird Weiß, dass zu diesem Zeitpunkt eine Anfrage eingegangen ist, akzeptiert sie also und leitet sie nicht an das zugrunde liegende XFS- oder EXT4-Dateisystem weiter. Es gibt eine Reihe von Lese- und Schreibprogrammen, die von Gluster in FUSE registriert sind, um die Anfrage zu verarbeiten und Schließen Sie diese Reihe von Lese- und Schreibvorgängen ab. Die Übertragung erfolgt über das Netzwerk. Nachdem der Glusterfsd des Knotens die Anforderung empfangen hat, schließt er den Vorgang ab und überträgt das Ergebnis dann über das Netzwerk an den Client zurück, wie in der folgenden Abbildung dargestellt:

4.5 libgfapi v/sFUSE-libgfapi-Zugriff
Warum stellt Gluster eine API-Schnittstelle zur Integration von Anwendungen in Gluster bereit? Weil externes NFS und SMB nicht mit Gluster selbst kommunizieren können. Sie können mit Gluster nur über Fuse kommunizieren, bei dem es sich um NFS Liquid Phase FUSE handelt. Zur Übertragung Informationen, Gluster überträgt auch Informationen an Fuse und sie kommunizieren. Dies ist sehr umständlich und erfordert das Durchlaufen der Kernel-Schicht. Dies verbraucht viele Ressourcen und Zeit und ist unnötig. Zusammen wird es in Ordnung sein, oder? Fuse ist so überflüssig. Über eine von Gluster selbst gekapselte Schnittstelle werden also NFS, SMB usw. integriert und zusammengeführt, wie in der folgenden Abbildung dargestellt, wodurch der gesamte Prozess viel einfacher wird.

5、Anpassbarer Übersetzerstapel

Der Übersetzer entspricht dem Funktionsmodul in Gluster. Ein oder mehrere Übersetzer werden zusammengefügt, um eine Funktion zu vervollständigen, z. B. Cache-Einstellungen, Thread-Nummerneinstellungen, integrierte NFS-bezogene Einstellungen usw. Die Übersetzer sind Schicht für Schicht im Formular organisiert eines Stapels. , nicht ungeordnet.

6. Ökosystemintegration

? OpenStack: Dies ist sehr bekannt und kann als eine Reihe von Tools verstanden werden, mit denen Sie öffentliche Clouds, private Clouds und andere verwandte Dienste nutzen können
? Samba: Ressourcenfreigabe zwischen Windows und Unix
? Ganesha: Von einem indischen NFS im Benutzerbereich geschrieben Dieser Inder hat einen unaussprechlichen Namen, der mit dem indischen Gott der Weisheit mit einem
Elefantenrüssel identisch ist und Ganesha
heißt
: Verteiltes paralleles Rechnen, Teil des MapReduce-Ökosystems


                                            GlusterFS的实验命令

1
Festplatte /dev/sdb: 21,5 GB, 21474836480 Bytes, 41943040 Sektoren
Einheiten = Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (Minimum/optimal): 512 Bytes / 512 Bytes
Datenträgerbezeichnungstyp: DOS
Datenträgerkennung: 0x504b4536

Siehe Boot Start End Blocks Id System
/dev/sdb1 2048 10487807 5242880 83 Linux
/dev/sdb2 10487808 20973567 5242880 83 Linux /dev/
sdb3 20973568 31459327 5242880 8 3 Linux /
dev/sdb4 31459328 41943039 5241856 5 Erweitert
/dev/sdb5 31461376 41943039 5240832 83 Linux

2Formatierung
:

mkfs.xfs /dev/sdb1
mkfs.xfs /dev/sdb2
mkfs.xfs /dev/sdb3
mkfs.xfs /dev/sdb5

3
mkdir /root/sdb{1…4}
mount /dev/sdb1 /root/sdb1
mount /dev/sdb2 /root/sdb2
mount /dev/sdb3 /root/sdb3
mount /dev/sdb5 /root/sdb4

/dev/sdb1 /root/sdb1 xfs-Standard 0 0
/dev/sdb2 /root/sdb2 xfs-Standard 0 0
/dev/sdb3 /root/sdb3 xfs-Standard 0 0
/dev/sdb5 /root/sdb4 xfs-Standard 0 0


systemctl stop firewalld
setenforce 0

Hostname Knoten1
vim /etc/hosts

192.168.100.100 Knoten1
192.168.100.110 Knoten2
192.168.100.120 Knoten3
192.168.100.130 Knoten4

Bereiten Sie die Software Yum Warehouse
vim /etc/yum.repos.d/benet.repo
[benet]
name=ldsakl
baseurl=file:///root/gfsrepo
enable=1
gpgcheck=0 vor

Füge GFS
hinzu yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma.x86_64

scp /etc/yum.repos.d/benet.repo [email protected]:/etc/yum.repos.d/

Starten Sie den Dienst
systemctl start glusterd
systemctl enable glusterd

Nachbarbeziehungen anzeigen:
Gluster-Peer-Status

Fügen Sie den Knoten
Gluster Peer Probe Knoten1
Gluster Peer Probe Knoten2
Gluster Peer Probe Knoten3
Gluster Peer Probe Knoten4 hinzu


Erstellen Sie ein neues verteiltes Volume,
Gluster-Volume, erstellen Sie dis-v, Knoten1:/root/sdb1, Knoten2:/root/sdb1, erzwingen

Bände anzeigen:
Gluster-Volume-Info dis-v

Erstellen Sie ein neues Stripeset-Volume

Gluster-Volume erstellen Stripe-V Stripe 2 Knoten1:/root/sdb2 Knoten2:/root/sdb2 erzwingen

Gluster-Volumen-Info-Streifen-v


Erstellen Sie ein neues Replikationsvolume,
Gluster-Volume, erstellen Sie Rep-V-Replikat 2, Knoten3:/root/sdb1, Knoten4:/root/sdb1, erzwingen

Gluster-Volume-Info rep-v


Erstellen Sie ein neues verteiltes Stripeset-Volume:

Gluster-Volume erstellen FBSTD-v Stripe 2 Knoten1:/root/sdb3 Knoten2:/root/sdb3 Knoten3:/root/sdb3 Knoten4:/root/sdb3 erzwingen

Erstellen Sie ein neues verteiltes Replikationsvolume:
Gluster-Volume erstellen Sie FBSFZ-v Replikat 2 Knoten1:/root/sdb4 Knoten2:/root/sdb4 Knoten3:/root/sdb4 Knoten4:/root/sdb4 erzwingen

mkdir -p /1/dis-v
mkdir -p /1/stripe-v
mkdir -p /1/rep-v
mkdir -p /1/FBSTD-v
mkdir -p /1/FBSFZ-v

Starten Sie das angegebene Volumen-
Gluster-Volumenstart FBSFZ-v

Stoppen Sie das angegebene Volume
Gluster Volume Stop FBSFZ-v

Löschen Sie das angegebene Volume
Gluster-Volume löschen Sie FBSFZ-v

Sehen Sie sich die Volumes in der Cluster-
Gluster-Volume-Liste an

Informationen zum angegebenen Volume
Gluster Volume Info Rep-V anzeigen

Überprüfen Sie den Status des Volume-
Gluster-Volumenstatus

vim /etc/fstab
node1:dis-v /1/dis-v glusterfs defaults,_netdev 0 0

Gluster-Volume-Set dis-v auth.allow 192.168.100.*

おすすめ

転載: blog.csdn.net/m0_57207884/article/details/119727221