Verteilte Speicherarchitektur, versteckte Gefahren und Lösungen

Verteilte Speicherarchitektur, versteckte Gefahren und Lösungen

Überfallen und kopieren

Teilen Sie einen Bereich mit demselben Versatz horizontal auf die Festplatten auf, um einen logischen Speicherplatz zu bilden.

Die Daten werden zuerst in einen Streifen gefüllt und dann wird der nächste Streifen geschrieben. Ein Volumen kann aus vielen Streifen bestehen. Das Striping sollte zu Beginn der Festplattenkonfiguration erfolgen. Die Anzahl der in einem Stripe enthaltenen Sektoren (oder Blöcke) wird als Stripe-Länge bezeichnet. Die Anzahl der in jeder Festplatte enthaltenen Sektoren (oder Blöcken), die zu diesem Stripe gehören, wird als Stripe-Tiefe bezeichnet.

Warum wird das Konzept des Stripings eingeführt? liegt daran, dass das Problem gelöst werden muss, dass eine einzelne Festplatte jeweils nur eine E/A gleichzeitig ausführen und die Datenintegrität sicherstellen kann.

Vorteile dieses Artikels,Sie erhalten ihn kostenlosLinux C/C++ Entwicklungs-Lernmaterialpaket, technisches Video a>/ Code, 1000 Dachang-Interviewfragen, einschließlich ( Qt↓↓< /span>~Holen Sie es sich927239107 Kernel und andere fortgeschrittene Lernmaterialien und die beste Lern-Roadmap) ↓↓↓↓Wenn Sie brauchen Sie können den Pinguin-Rock eingebenLinuxEntwicklung, Spieleentwicklung, Grundlagen, Netzwerkprogrammierung, Datenbank, Middleware, Backend-Entwicklung, Audio- und Videoentwicklung,C++

Wir wissen, dass die E/A einer Festplatte tatsächlich der Prozess ist, bei dem die Festplatte nach der entsprechenden Sektoradresse sucht. Sie ist das Ergebnis der Drehung der Festplatte und der horizontalen Suche des Kopfes unter der Steuerung des Roboterarms. Darüber hinaus a Die Festplatte kann jeweils nur eine E/A-Anfrage abschließen, und die Streifenmethode ermöglicht die Zusammenarbeit mehrerer Festplatten zur Erledigung von Aufgaben. Diese Methode wird als Raid0 bezeichnet.

Theoretisch gilt: Je mehr Festplatten, desto geringer die Stripe-Tiefe und desto höher die Geschwindigkeit.

Je kleiner jedoch die Stripe-Tiefe ist, desto schneller ist die Geschwindigkeit, denn wenn die Tiefe zu klein ist, verringert sich die Wahrscheinlichkeit der Parallelität. Ohne Parallelität gibt es keine Geschwindigkeitsverbesserung. Wenn daher viele zufällige kleine Block-E/As vorhanden sind, sollte die Stripe-Tiefe im Allgemeinen entsprechend erhöht werden. Wenn viele aufeinanderfolgende große Blöcke vorhanden sind, sollte die Stripe-Tiefe verringert werden. Raid0 verkörpert die Philosophie, dass Stärke in Zahlen liegt.

Wenn jedoch eine Festplatte im RAID0-Modus ausfällt, wird die Integrität der Daten zerstört und die Daten sind nicht verfügbar. Um die Datenintegrität sicherzustellen, wird Raid1 erstellt.

Raid1 schreibt eine Kopie der Daten auf zwei physische Festplatten, d. h. die Daten werden gespiegelt und es gibt zwei Kopien der Daten. Selbst wenn eine Festplatte beschädigt ist, sind die Daten nicht nicht verfügbar. Im Vergleich zu einer einzelnen Festplatte ist das Schreiben langsamer und das Lesen schneller als bei der Raid1-Methode. Der Grund liegt auf der Hand.

Durch die Kombination von Raid0 und Raid1 können Sie die Vorteile beider nutzen, müssen jedoch auf die Reihenfolge der Kombination achten. Raid10 verfügt über eine höhere Redundanz und sicherere Daten als Raid01, wie in der Abbildung dargestellt:

Wenn ein Teil des RAID10-Systems auf der linken Seite ausfällt, werden die zugrunde liegenden Daten von RAID1 gespiegelt und die Integrität der Daten wird nicht zerstört. Eine andere Festplatte in einer anderen RAID1-Gruppe kann beschädigt werden.

Was Raid01 betrifft: Wenn eine Festplatte in der zugrunde liegenden Gruppe „raid0“ beschädigt wird, werden die gesamten Daten der Gruppe „raid0“ ungültig. Alle E/As gehen an die verbleibende Gruppe „raid0“ und wenn eine andere Festplatte beschädigt wird, sind die gesamten Daten ungültig.

Raid5 und Raid6 sind ebenfalls häufig verwendete Raid-Methoden.

  • Raid5 erfordert mindestens 3 Festplatten, 1 Datenkopie und 1 Datenüberprüfung; das heißt, es kann höchstens 1 Festplatte beschädigt werden;
  • Raid6 erfordert mindestens 4 Festplatten, 1 Datenkopie und 2 Datenüberprüfungen, d. h. es können bis zu 2 Festplatten beschädigt werden.

Diese Datenkopien und Datenüberprüfungen werden gleichmäßig auf der Festplatte verteilt. Die Festplattenauslastung von Raid5 und Raid6 beträgt nur 66,7 % bzw. 50 %, was eine Lösung darstellt, die sowohl Auslastung als auch Leistung berücksichtigt. Raid6 bietet eine bessere Sicherheit als Raid5 und es gibt keinen großen Unterschied in der Leistung.

Raid verfügt über einen bestimmten Rechenaufwand, um die Festplatte zu bestimmen, auf der diese Datenblöcke gespeichert sind, die Prüfdaten zu berechnen oder die Daten basierend auf den Prüfdaten zu berechnen. Diese erfordern CPU- und Speicherressourcen. Um den Druck auf die Host-CPU und den Speicher zu verringern. Heutzutage wird eine RAID-Karte in der Regel am PCI-Bus des Hosts konfiguriert und die Festplatten werden unter der RAID-Karte angeschlossen.

Bei der Raid-Karte handelt es sich eigentlich um einen kleinen Computer mit CPU, Speicher und Cache, wodurch die Belastung des Host-Computers verringert wird. Da sich die RAID-Karte jedoch nicht über den Host erstrecken kann, kann das Netzwerk-RAID bei verteilter Speicherung die lokale RAID-Karte nicht nutzen, sondern nur die CPU und den Speicher des Hosts.

Basierend auf verschiedenen Faktorenverteilter Speicher verwendet im Allgemeinen die Kopiermethode.

Verteilte Speicherarchitektur

Im Allgemeinen ist die grundlegende Architektur verteilter Speicher ähnlich, unabhängig davon, ob es sich um Dateispeicher, Objektspeicher oder Blockspeicher handelt. Das heißt, der Client oder die Anwendung, der Metadatenserver (MDS) und der Datenknotenserver.

Die Interaktion zwischen dem Client und dem Metadatenserver ist eine „Signalisierungsinteraktion“ und die Interaktion zwischen dem Client und dem Datenknoten ist eine „Medieninteraktion“. Der Metadatenserver oder der Datenknotenserver erhält die grundlegenden Konfigurations- und Statusinformationen jedes Knotenservers.

Wenn der Client beispielsweise die Informationen einer bestimmten Datei lesen muss, sendet der Client die entsprechende Anfrage an den Metadatenserver: „Hey! Ich brauche XXX, wo ist es?“, Der Metadatenserver fragt ab und antwortet mit „Sie.“ ging zum xxx-Server.“ Nehmen Sie „xxx-Adresse + xxx-Adresse des xxx-Servers“.

Nachdem der Client diese Anweisung erhalten hat, sendet er eine Anweisung an die beiden Server. Nachdem der Datenknoten die Anweisung erhalten hat, gibt er die entsprechenden Daten an den Client zurück.

Jeder mag sich fragen,warum die Architekturen von Blockspeicher, Objekten und Dateien gleich sind. Welche Unterschiede gibt es?

In der vorherigen Beschreibung des Grundwissens handelt es sich bei Blockspeicher um eine Art Rohgerät. Es stellt Kunden Speichergeräte direkt in Form von „Blöcken“ zur Verfügung und wird vom Dateisystem im eigenen Betriebssystem des Kunden verwaltet.

  • Im verteilten Blockspeicher gibt es kein Dateisystem. Der Client übergibt die einfachsten und klarsten Befehle direkt zur Ausführung an die gespeicherten „Blöcke“.
  • Obwohl Objektspeicher und Dateispeicher ähnliche Strukturen aufweisen, stellen sie die zugrunde liegenden „Blöcke“ des Speichers nicht direkt bereit. Stattdessen werden sie über ein verstecktes Dateisystem bereitgestellt und in „Dateien“ oder „Objekte“ verpackt.

Diese Speicher „wählen“ das Betriebssystem oder Terminal nicht aus. Das Dateisystem im Speicher steuert die Ausführung des Befehls, sodass die gemeinsame Nutzung sehr gut ist.

Der Dateispeicher wird über „Verzeichnis + Dateiname + Offset“ abgerufen, und es gibt eine Verzeichnishierarchie zwischen den Dateien.

Die Objektspeicherung verwendet „eindeutige Objekt-ID + Offset“, um Objekte abzurufen. Objekte werden flach gespeichert und haben keine Hierarchie. Darüber hinaus können Block-, Objekt- und Dateispeicher ineinander umgewandelt werden. Auf dieses Thema wird später noch gesondert eingegangen.

Huaweis FusionStorage ist ein typischer „Block“-Speicher. Werfen wir einen Blick auf den Aufbau.

 

FusionStorage ist ebenfalls in drei Teile unterteilt: MDC, OSD und Client. Der Hauptunterschied zu anderen verteilten Speichersystemen ist:

MDC erfasst und aktualisiert den Status von OSD-Servern, Festplatten usw. und synchronisiert diese Statusdaten in Echtzeit mit Vbs, und Vbs berechnet den Speicherort der Daten. MDC kann einzeln, zentral oder verteilt eingesetzt werden.

Wenn alle MDCs ausfallen, wird der normale Betrieb des Speichers nicht beeinträchtigt.

Wenn sich jedoch der Status des OSD während des MDC-Fehlers ändert, beispielsweise aufgrund eines Festplattenfehlers, werden einige E/A-Zugriffe abnormal sein. Daher wird MDC im Allgemeinen auf drei OSDs bereitgestellt, um die Sicherheit zu gewährleisten.

Im Allgemeinen verwendet MDC für verteilten Speicher eine Datenbank oder eine interne Speicherdatenbank, um die Beziehung zwischen Datenblöcken und physischen Standorten aufzuzeichnen. Der Client sendet eine Standortanfrage an MDC, und MDC fragt die Datenbank ab und gibt den Speicherort der angeforderten Daten zurück.

Die Speicherzugriffsgeschwindigkeit dieser Methode ist langsam, und der MDC ist als „Hub“ des Transports definitiv der Kern des gesamten Speichers. Wenn der MDC ausfällt, ist der gesamte Speicher unbrauchbar. Dieser Ansatz bietet jedoch auch Vorteile, z. B. die Festlegung unterschiedlicher Kopierstrategien je nach Bedarf.

VBS ist ein wichtiges Netzwerkelement zur Berechnung des Speicherorts von Datenblöcken. Ein VBS ist ein „Maschinenkopf“. Die VBS-Bereitstellung ist sehr flexibel und es gibt viele Bereitstellungsmethoden, die je nach Bedarf ausgewählt werden können.

Beispielsweise können Sie in der virtuellen VMWARE-Maschine eine virtuelle Maschine auf der physischen Maschine öffnen, um VBS bereitzustellen, und diese auf Domäne0 in XEN/KVM bereitstellen; oder sie auf jedem OSD-Server bereitstellen oder speziell eine VBS-Servergruppe einrichten.

VBS verwendet einen konsistenten Hashing-Algorithmus, wie in Abbildung 3 dargestellt, um den KEY-Wert aus der logischen Adresse des Datenblocks zu berechnen. Und der berechnete SCHLÜSSEL wird dem Hash-Ring zugeordnet, und N Segmente (Partitionen) werden auf dem Hash-Ring aufgeteilt. Jede Partition entspricht einer Festplatte und basiert auf der Zuordnungsbeziehung zwischen dem Partitionsmaster und dem OSD-Knoten, ioview und Der Partitionsmaster und die Sicherung erhalten die Route des Datenblocks gemäß der entsprechenden OSD-Beziehung, wie in Abbildung 4 dargestellt.

Beim Schreiben wird eine starke Konsistenz angewendet, d. h. der E/A-Schreibvorgang gilt erst dann als erfolgreich, wenn sowohl die Primär- als auch die Sicherungskopie erfolgreiche Schreibvorgänge zurückgeben. Beim Lesen von E/A wird nur die primäre Kopie gelesen. Wenn die primäre Kopie fehlschlägt, wird die primäre Kopie aus der Standby-Kopie ausgewählt. Derzeit kann ein Ressourcenpool 2.000 Festplatten unterstützen.

Die vom Betriebssystem erkannten kontinuierlichen logischen Datenadressen (LBA) werden tatsächlich auf alle Festplatten im Ressourcenpool verteilt. Dies ähnelt dem Raid0 aller Festplatten, wodurch die Leistung aller Festplatten genutzt und die Speicherleistung verbessert wird.

Das Betriebssystem liest und schreibt tatsächlich direkt die Blöcke der physischen Festplatte und kapselt keine zusätzlichen Dateisysteme. Es handelt sich um ein Rohgerät.

OSD ist ein X86-Server mit vielen angeschlossenen Festplatten. Als persistentes Speichermedium für Daten nutzen wir 12 SATA 3T-Festplatten.

Wenn VBS nicht auf OSD gehostet wird, ist der Rechendruck auf dem OSD-Server tatsächlich sehr gering und es besteht keine Notwendigkeit, einen Server mit starker Rechenleistung und hoher Speicherkonfiguration zu konfigurieren.

Im vorherigen Artikel wurde berechnet, dass die von 12 SATA-Festplatten bereitgestellten IOPs oder Durchsätze tatsächlich sehr begrenzt sind und SSD als Cache konfiguriert werden muss, um die Speicherleistung zu beschleunigen. Unter diesem Gesichtspunkt wird die Leistung des verteilten Speichers durch die Leistung der SSD und den Hotspot-Datenberechnungsalgorithmus bestimmt.

Im Gegensatz zum allgemeinen Speicher ist die Schreibleistung des allgemeinen verteilten Speichers besser als die Leseleistung. Der Hauptgrund liegt darin, dass die Primär- und Sicherungskopien beim Schreiben auf die SSD erfolgreich sind. Der Client weiß nicht, wann und wie die SSD auf die Festplatte schreibt.

Wenn es sich beim Lesen von Daten um heiße Daten handelt, die bereits auf der SSD zwischengespeichert sind, ist die Leistung sehr gut. Wenn sie sich nicht im Cache befinden, müssen sie direkt von der Festplatte gelesen werden, und die Leistung ist sehr gut arm.

Auch wenn der verteilte Speicher initialisiert wird, sind die Testleistungsindikatoren nicht so gut wie nach einer gewissen Zeit. Daher gibt es beim Testen verteilter Speicher viele Fallstricke, auf die jeder achten sollte.

Um die Speichersicherheit zu verbessern und eine Sicherheit von mehr als 6 9 Sekunden zu erreichen, verwenden wir die beliebten 3 Kopien (2 Kopien sind weniger als 96 Festplatten, was 6 9 Sekunden erreichen kann). Die Replikate können entsprechend der tatsächlichen Situation auf unterschiedliche Sicherheitsstufen in unterschiedlichen Racks, unterschiedlichen Servern und unterschiedlichen Festplatten eingestellt werden.

Wenn eine Festplatte oder ein Host ausfällt, wird dies vom MDC überwacht und Vorgänge wie die Auswahl des primären Replikats, das Entfernen des Fehlerpunkts und die Rekonstruktion des Replikats werden ausgeführt. Um die Datensicherheit zu gewährleisten, ist die Zeit für die Replikatrekonstruktion von entscheidender Bedeutung. Wir verlangen, dass die Rekonstruktionszeit für jedes Terabyte an Daten 30 Minuten nicht überschreitet.

Um sicherzustellen, dass der Datenrekonstruktionsverkehr den normalen Speicher-E/A-Zugriffsverkehr nicht beeinträchtigt, wird eine schnelle Datenrekonstruktion erreicht. Wir haben nicht die von Huawei empfohlene Netzwerklösung übernommen, sondern eine Ringvirtualisierungs-Stacking-Lösung. Die Stacking-Verbindungen zwischen Switches verwenden optische 40G-Pfade, wie in der Abbildung dargestellt

Unterdrücken Sie den Speicherrekonstruktionsverkehr im Speicherringnetzwerk. Der Switch ist über 2*10G mit dem Server verbunden, der je nach Situation im Aktiv/Standby- oder Shared-Modus genutzt werden kann.

Nachdem wir über „Blockspeicher“ gesprochen haben, wollen wir uns kurz mit „Objektspeicher“ befassen.

Objektspeicher bietet bei gleicher Kapazität eine bessere Speicherleistung als Dateispeicher und kann ebenso wie Dateispeicher gemeinsam genutzt werden. Bei der tatsächlichen Verwendung ist die Leistung nicht das wichtigste Problem bei der Objektspeicherung. Wenn eine hohe Leistung erforderlich ist, kann Blockspeicher verwendet werden. Die Kapazität ist bei der Objektspeicherung das größte Problem.

Daher verfügt die Persistenzschicht des Objektspeichers über mehr Festplatten und die Kapazität einer einzelnen Festplatte ist größer. Es gibt auch verschiedene Sicherheitsgarantien für die im Objektspeicher gespeicherten Daten. Es kann sich um einen eigenständigen Raid oder einen Netzwerk-Raid handeln, oder es kann sich um eine Kopie handeln.

Wenn die Leistungsanforderungen nicht hoch sind, können Sie direkt normale Festplatten verwenden oder den Cache einer RAID-Karte verwenden oder einige SSDs als Cache konfigurieren. Wir verwenden derzeit 35 4T-SATA-Festplatten mit 7200 U/min + selbstentwickeltem Objektspeicher mit Raid-Card-Cache-Beschleunigung auf einer einzelnen Maschine und planen, dieses Jahr 60 8T-SATA-Festplatten mit 7200 U/min zu verwenden. Das heißt, jeder Server bietet 480T Rohkapazität.

Der GFS-basierte Speicher von Ceph und Google ist ein typischer Objektspeicher.

Ceph ist derzeit der beliebteste Speicher und kann eine Vielzahl von Schnittstellen unterstützen. Die Architektur des Ceph-Speichers ähnelt der von Huawei FusionStorage, beide basieren auf „Berechnung“ statt auf „Prüfung“.

  • Eines davon ist eine große Anzahl von OSDs, die für die Durchführung von Datenspeicher- und Wartungsfunktionen verantwortlich sind.
  • Der andere besteht aus mehreren Monitoren, die für die Erkennung und Wartung des Systemstatus zuständig sind.

OSD und Monitor übermitteln einander Knotenstatusinformationen, ermitteln gemeinsam den Gesamtbetriebsstatus des Systems und bilden eine globale Systemstatusdatenstruktur, die sogenannte Cluster-Map. Diese Datenstruktur, kombiniert mit einem spezifischen Algorithmus, verwirklicht den Kernmechanismus von Ceph: „Keine Notwendigkeit, Tabellen nachzuschlagen, sondern nur Berechnungen“ und mehrere hervorragende Funktionen.

Die Art und Weise, wie die Daten organisiert sind, ist jedoch unterschiedlich. Zunächst einmal ist der Kern von Ceph ein Objektspeicher, wobei Objekte die kleinste Organisationseinheit darstellen.

1. Zunächst wird die Datei einem oder mehreren Objekten zugeordnet.

2. Dann wird jedes Objekt einer PG (Platzierungsgruppe) zugeordnet. Es besteht eine „Eins-zu-Viele“-Zuordnungsbeziehung zwischen PG und Objekten.

3. PG wird n OSDs zugeordnet, n ist die Anzahl der Kopien und OSD und PG haben eine „viele-zu-viele“-Beziehung.

Mehrere Monitore sind gemeinsam für die Erkennung und Aufzeichnung des Status aller OSDs im gesamten Ceph-Cluster verantwortlich und bilden gemeinsam die Masterversion der Cluster-Map, die dann an alle OSDs und Clients verteilt wird.

OSD verwendet Cluster Map für die Datenpflege, während der Client Cluster Map für die Datenadressierung verwendet.

„GFS“, einer der drei Schätze von Google, ist die Basis des Objektspeichers von Google.

Der Hauptunterschied besteht in der Organisationsstruktur der Daten: Der Masterserver (d. h. Metadatenserver) speichert den Namensraum von Dateinamen und Blöcken, die Zuordnung von Dateien zu Blöcken und den Kopierort, die vom Client abgefragt werden. Es handelt sich um eine typische Architektur, die Signalisierung und Medien trennt.

Probleme mit verteiltem Speicher

Verteilter Speicher ist im Allgemeinen auf „Kopien“ angewiesen, um Datensicherheit und -integrität zu gewährleisten. Der auf jeder Festplatte aufgezeichnete Dateninhalt ist unterschiedlich. Wenn auf einer bestimmten Festplatte ein Problem auftritt, muss eine schnelle Datenrekonstruktion aus den Datenblöcken auf anderen Festplatten durchgeführt werden.

Die Datenrekonstruktion braucht Zeit. Was passiert, wenn eine große Anzahl von Festplatten gleichzeitig ausfällt? Darüber hinaus führt die Erweiterung des OSD auch zu einer Datenmigration und beeinträchtigt die Speicherung.

Bei der verteilten Speicherung werden im Allgemeinen Kopien verwendet, um die Datensicherheit zu gewährleisten. Dies ist die schnellste Möglichkeit, Daten auf die Festplatte zu schreiben, ohne vor dem Schreiben auf die Festplatte zusätzliche komplexe Berechnungen durchführen zu müssen. Es handelt sich um eine Methode zum Austausch von Speicherplatz gegen Zeit. Wenn Sie also eine bessere Speicherleistung erzielen möchten, verwenden Sie die Kopiermethode.

Wenn eine Kopie verloren geht, beginnt das System mit der Datenrekonstruktion. Im Allgemeinen verwendet der für die Produktion verwendete verteilte Speicher drei Kopien. Kopien werden im Allgemeinen auf Festplatten in verschiedenen Racks und auf verschiedenen Server-Hosts abgelegt. 3 Kopien werden auf den Festplatten von 3 verschiedenen Servern abgelegt.

Die Daten jedes Benutzers werden durch viele Kopien gleichmäßig auf alle Hosts im Speicherressourcenpool verteilt. Daher kann davon ausgegangen werden, dass jeder Server einige Datenkopien aller Benutzerdaten speichert. Wenn ein Server ausfällt, wirkt sich dies auf alle Benutzer aus.

Theoretisch kann der Replikatmodus den Ausfall von n-1 Servern zulassen, wobei n die Anzahl der Replikate ist. Bei drei Replikaten können beispielsweise nur zwei Server ausfallen, egal wie viele Server sich in diesem verteilten Speicherressourcenpool befinden. Wenn zwei Server ausfallen, ist der Speicher tatsächlich sehr gefährlich.

Wenn das OSD der Datenpersistenzschicht ausfällt, muss mit der Wiederherstellung der Replikate begonnen werden, d. h. die vollständige Anzahl der Replikate muss in kurzer Zeit wiederhergestellt werden. Unterschiedliche Speicherstrukturen und Algorithmen haben unterschiedliche Wiederherstellungszeiten.

Die Grundausstattung wie Festplatte und Netzwerk, die für die Wiederherstellung von einer Kopie verwendet wird, ist jedoch dieselbe. Heute werden wir es aus einer grundlegenden Perspektive analysieren, um zu sehen, wie lange es dauert, eine Kopie wiederherzustellen und wie lange es dauert, einen neuen OSD-Knoten hinzuzufügen, und uns die versteckten Gefahren ansehen, die durch die Verwendung von X86-Servern entstehen.

Wir haben Experimente im Labor durchgeführt, um mehr über Folgendes zu erfahren:

Testumgebung: 2 10G-Switches, 4 X86-Server (12 3T 7200 RPM SATA-Festplatten + 1 1,2G PCIe SSD). Einschließlich aller Replikate verfügt jede Festplatte über 1T Daten, also insgesamt 48T Daten.

Experiment 1:Es gibt keine E/A-Situation, ziehen Sie eine Festplatte heraus

Experiment 2: 4 virtuelle 360G-Volumes im Speicher eingerichtet, eine kleine Menge E/A geladen, d. h. 8K zufällige Lese- und Schreibvorgänge, die Warteschlangentiefe beträgt 1 und die Gesamtmenge Iops beträgt etwa 2600.

Nach dem Herausziehen einer Festplatte beginnt das System nach 15 Minuten (konfigurierbar, die 15-minütige Verzögerung soll verhindern, dass keine Vorgänge, keine Alarme usw. ausgeführt werden) mit der Rekonstruktion der fehlenden Kopie. Das Ergebnis ist:

analysieren:

Im experimentellen verteilten Speicher gab es ursprünglich 48 Daten1T-Daten. Nach dem Herausziehen einer Festplatte und der Rekonstruktion der Daten waren immer noch 48T-Daten vorhanden, also jeweils Festplatte erhöht (1T/47)1000=21,28 GB Daten.

  • 1T Daten wurden in 12 Minuten ohne IO rekonstruiert:

Netzwerkgeschwindigkeit:(11000)/(1260)=1,39 GB/s* 8=11 Gbit/s, was bedeutet, dass ohne E/A der gesamte Netzwerkverkehr 11 Gbit/s beträgt. Die Netzwerkgeschwindigkeit von drei Servern beträgt 2,84 Gbit/s und der Datenverkehr eines Servers ohne Festplatte beträgt 2,57 Gbit/s. Zur Vereinfachung der Berechnung beträgt die durchschnittliche Servergeschwindigkeit 2,75 Gbit/s und die Netzwerkauslastung 27,5 %.

Festplatten-Schreibgeschwindigkeit: 21,281000/(1260)=29,56 MB/s.

  • Rekonstruierte 1T Daten in 24 Minuten mit einer kleinen Menge an E/A:

Netzwerkgeschwindigkeit:(11000)/(2460)=1,39 GB/s* 8 = 5,5 Gbit/s, d. h. bei einer kleinen Menge an E/A beträgt der gesamte Netzwerkverkehr 5,5 Gbit/s.

Der Durchschnitt pro Server beträgt 1,38 Gbit/s.

Magnetische Injektionsgeschwindigkeit: 21,281000/(2460)=15 MB/s.

Experimentelle Phänomene:

1. Die Datenrekonstruktionsgeschwindigkeit ohne Verkehrsdruck, d. h. die maximale Schreibgeschwindigkeit jeder Festplatte beträgt 30 MB/s. Mit zunehmender E/A wird die Schreibgeschwindigkeit jedoch immer langsamer.

2. Obwohl das Zugriffsnetzwerk jedes Servers 10 Gbit/s beträgt, wird es von der Speichersoftware gesteuert und die maximale Netzwerkauslastung während der Rekonstruktion beträgt fast 30 %.

Bei Vorhandensein von IO erhöht sich die Rekonstruktionszeit schnell. Um die normale E/A-Verarbeitung nicht zu beeinträchtigen, steuert die Software die Geschwindigkeit der Kopierrekonstruktion.

In der tatsächlichen Produktion wird die für die Kopierrekonstruktion verwendete Netzwerkauslastung auf unter 5 % gesteuert, was sich nicht auf die normale E/A des Speichers auswirkt.

Daraus berechnet:

29,56 Mio./(27,5 %/5 %) = 5,37 Mio. Das heißt, unter dem 10G-Zugangsnetzwerk beträgt der Wiederherstellungsverkehr jedes Servers 0,5 Gbit/s (62,5 MB/s) und die Lese- und Schreibdaten jeder Festplatte 5 MB/s. Unten ist die Datenrekonstruktion sicher.

Der Prozess der Kopiewiederherstellung ist eigentlich ein Prozess, bei dem die Kopie, die wiederhergestellt werden muss, von der vorhandenen Festplatte gelesen und dann nach bestimmten Regeln auf bestimmte Festplatten geschrieben wird. Jede Festplatte ist für das Lesen von Kopien und das Schreiben von Kopien verantwortlich. Mit anderen Worten: Im Durchschnitt liest jede Festplatte 2,5 Millionen und schreibt 2,5 Millionen.

Aus dieser Perspektive kann jeder Server, der mit 12 Festplatten (60 MB/s) konfiguriert ist, die Lese- und Schreibfähigkeiten mit den Netzwerkfähigkeiten (62,5 MB/s) in Einklang bringen. Je größer die Serverzugriffsbandbreite, desto mehr Festplatten können konfiguriert werden.

Zusammenfassung:

1. Wenn das Host-zu-Festplatten-Verhältnis größer oder gleich 12 ist:

1 TB Datenrekonstruktionszeit=10008/(0,25n) n: Anzahl der Server

Zum Beispiel ist die kürzeste Zeit für 57 2P-Ressourcenpools mit 12 Festplatten zum Rekonstruieren von 1T-Daten = (10008)/(0,2557). ) =560 Sekunden.

2. Wenn das Host-zu-Festplatten-Verhältnis weniger als 12 beträgt:

1 TB Datenrekonstruktionszeit=10001000/(2,5m) m: Anzahl der an der Rekonstruktion beteiligten Festplatten

Wenn ein Server mit 12 Festplatten ausfällt, beträgt die minimale Zeit, die zur Rekonstruktion von maximal 36T Daten erforderlich ist, 342 Minuten oder 5,7 Stunden.

Schlussfolgerung:Je mehr Server oder Festplatten an der Rekonstruktion beteiligt sind, desto schneller wird die Rekonstruktion durchgeführt

Wir setzen das Experiment fort. Nachdem die Datenrekonstruktion abgeschlossen ist, legen Sie die Festplatte erneut ein. Wir werden feststellen, dass die Kopie erneut wiederhergestellt wird, aber dieses Mal werden die Daten verschoben und keine neue Kopie erstellt. Dies liegt daran, dass das System davon ausgeht, dass eine neue Festplatte eingelegt wurde und die Daten ausgeglichen werden müssen.

Der verteilte Speicher übernimmt den „Kommunismus“. Durch die Erweiterung der Anzahl der Server kann die Speicherkapazität linear erhöht werden. Die neu erweiterte Festplatte akzeptiert jedoch nicht nur neue Kopierdaten, sondern muss auch verschoben und auf die „alte“ Festplatte mit durchschnittlicher Größe geschrieben werden . Daten kopieren.

Tatsächlich geht jedes Schreiben in eine Kopie einer abnormalen E/A mit dem Löschen von Kopien anderer Knoten einher. Häufiges Schreiben und Löschen hat großen Einfluss auf die Lebensdauer der Festplatte.

Werfen wir einen Blick auf die experimentellen Ergebnisse:

Wenn keine E/A vorhanden ist, beträgt die Schreibgeschwindigkeit der Festplatte 68 MB/s. Tatsächlich haben 68 MB/s den normalen Bereich der maximalen durchschnittlichen Schreibgeschwindigkeit von SATA-Festplatten erreicht. Auf diese Weise trägt jeder Server durchschnittlich 68*8/4=136 Mbit/s Datenverkehr zum Netzwerk bei.

Die Verlagerung von Datenkopien ist ein dynamischer Prozess. 1/3 der Datenkopien auf der Festplatte müssen die primäre Kopie sein, die über normale E/A gelesen werden kann, sodass die neu hinzugefügte Festplatte nicht vollständig zur Datenmigration geeignet ist. Wie andere Festplatten kann sie nur begrenzte Funktionen nutzen. Kopieren, Kopieren Migration.

Den Testergebnissen zufolge betrug die Schreibgeschwindigkeit auf der Festplatte bei einer geringen Menge an E/A-Geschäften 45 MB/s, und jeder Server trug durchschnittlich 90 MB/s zum Netzwerk bei. Ohne IO dauerte es tatsächlich 4,3 Stunden, bis die Datenneubereitstellung abgeschlossen war.

Daran haben Sie sicher nicht gedacht, denn dieses Mal wurden insgesamt 1T Daten von 47 Festplatten auf eine Festplatte verschoben. Das ist so, als würden 47 Personen eine Person ernähren. Die Mahlzeit muss Bissen für Bissen gegessen werden. Daher beim Hinzufügen Festplatten haben in den meisten Fällen nichts mit der Geschwindigkeit des Netzwerks zu tun, sondern stehen in direktem Zusammenhang mit der Geschwindigkeit des Festplattenschreibens.

Wie oben erwähnt, kann jeder Server 5 % der Bandbreite des Host-Netzwerks bereitstellen, d .

3. Wenn das Host-zu-Festplatten-Verhältnis größer oder gleich 12 ist:

Anzahl der zusammen rekonstruierten Festplatten = 62,5*n/m n: Anzahl der Server m: Schreibgeschwindigkeit der Festplatte

4. Wenn das Host-zu-Festplatten-Verhältnis weniger als 12 beträgt:

Anzahl der zusammen rekonstruierten Festplatten =5*n/m n: Anzahl der Festplatten m: Schreibgeschwindigkeit der Festplatte

Wenn m=5M, n=57, können 712 Blöcke zusammen auf die Festplatte geschrieben werden.

1-712 Festplatten, 1T-Datenmigration dauert bis zu 55,56 Stunden. Man kann davon ausgehen, dass die Migration einer 1-TB-Datenkopie im aktuellen verteilten Speicher mit einer Kapazität von 2 PB ohne Auswirkungen auf das Geschäft 56 Stunden dauert, wenn die Kapazität auf unter 2 PB erweitert wird.

Jeder hat mich gefragt, welche Risiken verteilte Speicherung mit sich bringt. Das Risiko wird durch die Funktion zum mehrfachen Kopieren verursacht.

Zunächst einmal können höchstens n-1 Server ausfallen, egal wie groß der Cluster ist. Im Allgemeinen gibt es 3 Kopien, was bedeutet, dass 2 Dienste fehlschlagen dürfen.

Wenn ein Fehler auftritt, wird eine Datenrekonstruktion durchgeführt, und die Zeit zum Rekonstruieren der Kopie ist relativ kurz. Bei der 2P-Speicherung dauert die Wiederherstellung jedes T Daten 10 Minuten, und die Wiederherstellungszeit wird in Stunden gemessen. Wenn jedoch zwei Server gleichzeitig ausfallen, ist das Risiko selbst sehr hoch und sollte möglichst vermieden werden.

Wenn der ausgefallene Server wiederhergestellt wird und sich wieder dem Speicherressourcenpool anschließt, muss das Replikat migriert werden und die Wiederherstellungszeit dauert Tage. Wenn das Speicher-OSD ausfällt, dauert es daher lange, bis es vollständig wiederhergestellt ist. Aber unter normalen Umständen ist es immer noch akzeptabel.

Aber was ist mit ungewöhnlichen Situationen? Wie konnte etwas Ungewöhnliches passieren?

Da X86-Server üblicherweise für verteilte Speicherung verwendet werden, haben x86-Server einen normalen Lebenszyklus, der etwa 5 Jahre beträgt. Die Lebensdauer von Servern in derselben Charge ist nahezu gleich. Am Ende ihrer Lebensdauer ist die Wahrscheinlichkeit eines Serverausfalls sehr hoch.

Der Ausfall eines Servers und der Wiederaufbau des Nachbaus können der letzte Tropfen sein, der dazu führt, dass sich der Druck auf die „alten Damen“ der Servergruppe ändert und auch scheitert.

Sobald mehr als zwei Maschinen gleichzeitig ausfallen, kommt es zu einem schwerwiegenden Speicherausfall und der Speicher muss den Dienst einstellen. Wenn Sie Glück haben, können Sie die Daten offline wiederherstellen. Wenn Sie kein Glück haben, geht die Kopie vollständig verloren und die Daten werden überhaupt nicht verfügbar sein.

Wie wir alle wissen, ist in einem Ressourcenpool der gesamte Ressourcenpool lahmgelegt, sobald der Speicher nicht mehr bereitgestellt wird. Diese Situation wird definitiv eintreten, es ist nur eine Frage von früher oder später, daher müssen wir im Voraus eingreifen, um dies zu verhindern.

Die Lösung

Daher wird der Server regelmäßig ausgetauscht, um zu verhindern, dass der Server zur „alten Dame“ wird und um ständig frischen Nachschub zu gewährleisten. Der Austausch von Servern unterscheidet sich jedoch von der Erweiterung der Kapazität. Bei der Erweiterung der Kapazität können Dutzende Server auf einmal hinzugefügt werden, und die Erweiterung kann problemlos in 2 Tagen abgeschlossen werden.

Beim Ersetzen eines Servers wird zunächst der Server außer Betrieb genommen und dann ein Server hinzugefügt. Wie viele Daten verschoben werden müssen, hängt davon ab, wie viele Daten sich auf dem ursprünglichen Server befinden. Wenn der ursprüngliche Server beispielsweise über 2T Daten pro Block verfügt, müssen 12*2T Daten verschoben werden. Um die normale Speichernutzung sicherzustellen, ist es am besten, n-2 Server gleichzeitig zu verlassen und entsprechende Server hinzuzufügen.

Wenn Sie beispielsweise über drei Kopien verfügen, können Sie zunächst nur einen Server verlassen und dann einen weiteren Server hinzufügen. Der Serverwechsel dauert 2*2=4 Tage. Es können bis zu zwei Einheiten gleichzeitig ausgetauscht werden, das Risiko ist jedoch sehr hoch: Fällt eine Einheit während des Austauschvorgangs aus, fällt auch das Speichersystem aus.

Daher ist der Austausch jedes Servers einzeln die geeignetste Methode. Alle 57 Server wurden ausgetauscht. Wenn die Arbeiten reibungslos verlaufen, wird es mehr als ein halbes Jahr dauern. Selbst einschließlich Feiertagen kann es sein, dass sie nicht in einem Jahr abgeschlossen sind. Dieser Prozess ist langwierig, kompliziert und voller Variablen, aber er ist durchaus machbar.

Durch die Eingrenzung der Fehlerdomäne des verteilten Speichers und die Reduzierung der Anzahl der Server in einer Fehlerdomäne wird natürlich die Arbeitszeit des entsprechenden Ersatzservers entsprechend verkürzt und auch das Risiko entsprechend verringert. Allerdings wurde die verteilte Speicherung entwickelt, nachdem die rasante Entwicklung des Cloud Computing neue Anforderungen an die Speicherleistung und -kapazität mit sich brachte.

Hunderte Server teilen sich einen Speicher und betreiben Tausende oder Zehntausende virtuelle Maschinen. Aus dieser Perspektive ist verteilter Blockspeicher am besten ein Speichersystem, das sich unendlich linear erweitern lässt. Aufgrund der oben genannten Probleme kann der Speicherressourcenpool jedoch nur in kleinere Fehlerdomänen unterteilt werden.

Wir glauben, dass die Größe dieser Fehlerdomäne den Bedarf des Ressourcenpools decken kann, wenn die Rohkapazität 2P (effektive Kapazität 666T) beträgt und die IOPS mehr als 1 Million Mal beträgt, also etwa 60 Server.

Eigentlich soll der verteilte Blockspeicher den sogenannten High-End-FCSAN-Speicher ersetzen. Kleine Cluster bieten weder Preis- noch Leistungsvorteile, wenn sie Low-End-FCSAN mit geringer Kapazität ersetzen.

Wenn nur der Server ausfällt und die Festplatte normal ist, gibt es eine schnellere manuelle Eingriffsmethode. Dieser Ansatz ist eine Erweiterung des Notfallplans. Das Prinzip der Implementierung besteht darin, die Rekonstruktion der Kopie 15 Minuten nach Erkennung eines Festplattenfehlers zu starten.

Wenn sich die Festplatte innerhalb von 15 Minuten erholt, muss die ursprüngliche Kopie, die während des Ausfalls geschrieben werden musste, zurückverfolgt werden. Das heißt, während dieser 15 Minuten wurden von einigen Kopien tatsächlich nur 2 Kopien geschrieben, und es gab eine weitere Kopie, die ursprünglich auf diese Festplatte geschrieben werden sollte.

Wenn die Originalfestplatte innerhalb von 15 Minuten wiederhergestellt wird, werden die inkrementellen Daten hinzugefügt. Wenn sie nicht innerhalb von 15 Minuten wiederhergestellt wird, wird die Kopie wiederhergestellt. Natürlich kann die Zeitdauer konfiguriert werden, allerdings verfügen nicht alle verteilten Speichersysteme über diese Funktion.

Viele Speichersysteme beginnen sofort mit der Replikatrekonstruktion, sobald sie erkennen, dass die Festplatte oder der Server offline ist. Im Wesentlichen gibt es keine „Retrospektive“. Sobald Sie dieses Prinzip kennen, werden die folgenden Dinge einfach sein.

Nachdem festgestellt wurde, dass der gesamte Server ausgefallen ist, wird der Server durch Versetzen in den Modus „Wartung/Ersatz“ von der 15-Minuten-Grenze befreit (dieser Modus muss möglicherweise neu entwickelt werden). Bereiten Sie den Server mit installiertem System vor (ohne die Festplatte der Persistenzschicht einzulegen). Wenn der Host ausfällt oder ersetzt wird, legen Sie die Festplatte vom ausgefallenen Server manuell in den Sicherungsserver ein und fügen Sie sie dem Speichersystem hinzu, um Dienste bereitzustellen.

Während dieser Server neue Daten schreibt, muss er auch die Daten während des Ausfallzeitraums zurückverfolgen.

Diese Methode stellt eine Erweiterung des Notfallplans dar und kann Situationen, bei denen es sich nicht um Festplattenfehler handelt, schnell lösen, das Problem wird jedoch nicht grundsätzlich gelöst. Denn wenn beim Einlegen und Entfernen von Datenträgern ein Datenträger beschädigt wird, tritt das bisherige Problem der langsamen Datenmigration erneut auf. Wenn Sie außerdem nur den Host und nicht die Festplatte austauschen, besteht das Alterungsproblem weiterhin und Sie können sich trotzdem nicht zurücklehnen und entspannen.

Befürworter von verteiltem All-SSD-Speicher werden begeistert sein, denn die Verwendung von All-SSD scheint die Geschwindigkeit zu erhöhen und den Prozess zu beschleunigen. Bei Verwendung einer vollständigen SSD ist es am besten, die Bandbreite des Serverzugriffs zu erhöhen, z. B. durch die Verwendung einer 40G-Netzwerkkarte oder eines IB-Netzwerks. Lassen Sie nicht zu, dass das Netzwerk zu einem neuen Engpass wird. Die versteckten Gefahren, die durch verteilten Speicher verursacht werden, können dies jedoch nicht beseitigt werden. Es geht nur schneller. Das Problem ist immer noch dasselbe.

Tatsächlich gibt es ein weiteres ernstes Alterungsproblem: SSD wird als Cache verwendet. SSD spielt bei der Speicherung eine zentrale Rolle, da sie die „Leistungsverantwortung“ für die gesamte Speicherung übernimmt. Allerdings ist die Schreiblebensdauer von SSDs ein wichtiges Thema, und auch der Online-Ersatz der SSD ist ein Problem, das gelöst werden muss.

Verteilter „Block“-Speicher birgt solche Risiken. Ähnliche Probleme bei der Objektspeicherung und der Dateispeicherung, bei denen der Server mehr Festplatten lädt, treten stärker hervor und das Risiko ist größer.

Die gespeicherten Daten müssen wertvoll sein, denn ihre Speicherung ist teuer. Die aktuelle Speichernutzung basiert jedoch auf dem Konzept „Je mehr, desto besser“. Einfach schreiben, nicht löschen, in Blockspeicher schreiben, unabhängig vom Bedarf usw. Die Auswahl des Speichertyps und der Kapazität nach Bedarf stellt das häufigste Problem bei der aktuellen Speichernutzung dar. Dieses Thema wird in Zukunft ausführlicher erörtert.

Vorteile dieses Artikels,Sie erhalten ihn kostenlosLinux C/C++ Entwicklungs-Lernmaterialpaket, technisches Video a>/ Code, 1000 Dachang-Interviewfragen, einschließlich ( Qt↓↓< /span>~Holen Sie es sich927239107 Kernel und andere fortgeschrittene Lernmaterialien und die beste Lern-Roadmap) ↓↓↓↓Wenn Sie brauchen Sie können den Pinguin-Rock eingebenLinuxEntwicklung, Spieleentwicklung, Grundlagen, Netzwerkprogrammierung, Datenbank, Middleware, Backend-Entwicklung, Audio- und Videoentwicklung,C++

Guess you like

Origin blog.csdn.net/m0_60259116/article/details/134839706