bcache auf md oder md auf bcache

11

Mit bcache können ein oder mehrere schnelle Festplattenlaufwerke wie Flash-basierte Solid-State-Laufwerke (SSDs) als Cache für ein oder mehrere langsamere Festplattenlaufwerke fungieren .

Wenn ich richtig verstehe,

  • Eine SSD * könnte zugewiesen werden, um mehrere Sicherungsfestplatten zwischenzuspeichern, und dann könnten die resultierenden zwischengespeicherten Geräte mit mdadm
    oder RAIDed werden
  • Es könnten mehrere Festplatten in ein einzelnes Backing-MD-Gerät RAID-fähig gemacht und die SSD dem Cache zugewiesen werden

Ich frage mich, was der vernünftigere Ansatz ist. Mir fällt ein, dass das Wachsen eines RAID5 / 6 mit der einen oder anderen Technik einfacher sein kann, aber ich bin mir nicht sicher, welche!

Gibt es gute Gründe (z. B. das Erweitern des Sicherungsspeichers oder etwas anderes), einen Ansatz dem anderen vorzuziehen (für ein großes Nicht-Root-Dateisystem mit VM-Sicherungsdateien)?


* Mit "einer SSD" meine ich eine Art redundantes SSD-Gerät, z. B. ein RAID1 aus zwei physischen SSDs


quelle
In beiden Fällen müssen alle Festplatten, mit denen bcacheBacks erstellt werden, formatiert bcachewerden. Sie müssen also entweder ein mdArray erstellen , die einzelne resultierende Festplatte vollständig als bcachegesicherte Partition formatieren , sie mit ihrem Cache-Laufwerk verknüpfen und von dort aus fortfahren oder viele formatieren Datenträger mit bcache, verknüpfen Sie sie mit ihrem Cache-Laufwerk und formatieren Sie die vielen Datenträger als ein Array. In beiden Fällen gibt es mehrere mögliche Fehlerpunkte, die alle von der Interoperabilität zwischen zwei Dateisystemen abhängen - ganz zu schweigen von den endgültigen fs. siehe hier : nach unten scrollen .
Mikesserv
Dank github.com/g2p/blocks können Sie es direkt konvertieren, obwohl dies einige Einschränkungen aufweist.
Adam Ryczkowski
@mikeserv Ich verstehe das alles, dies ist für einen speziell gebauten Server, also ist alles gut. Was meinst du mit "zwei Dateisystemen"? bcache ist kein Dateisystem - das einzige Dateisystem, das ich haben werde, ist XFS auf dem endgültigen bcache- oder mdadm-Gerät (je nachdem, welche Option ich wähle).
Danke @Adam, die direkte Konvertierung ist für mich kein Problem.
@mikeserv nein ist es nicht. Dateisysteme (z. B. btrfs, xfs, extN usw.) befinden sich auf Blockgeräten. mdadm und bcache arbeiten auf Blockgeräteebene und nicht auf Dateisystemebene (btrfs verwechselt das Problem mit seiner Layering-Verletzung, aber das ist eine völlig separate Konversation).

Antworten:

4

Ich denke, das Zwischenspeichern des gesamten MD-Geräts ist am sinnvollsten.

Wenn Sie bcache in den Cache des gesamten md-Geräts einfügen, wird die gesamte Idee eines Raids geopfert, da dadurch ein weiterer einzelner Fehlerpunkt eingeführt wird.

  • OTH-Fehler von SSD-Festplatten sind relativ selten, und bcache kann in den writethrough/ writearound-Modus versetzt werden (im Gegensatz zum writebackModus), in dem keine Daten nur auf dem Cache-Gerät gespeichert sind und ein Ausfall des Caches die Informationen in nicht tötet Der Überfall macht es zu einer relativ sicheren Option.

  • Eine andere Tatsache ist, dass Soft-RAID-5 einen erheblichen Rechenaufwand verursacht. Wenn jedes sich drehende Schlachtzugsmitglied separat zwischengespeichert wird, muss der Computer auch bei Cache-Treffern noch alle Paritäten neu berechnen

  • Offensichtlich würden Sie teuren SSD-Speicherplatz opfern, wenn Sie jedes sich drehende Laufwerk separat zwischenspeichern. - Es sei denn, Sie planen die Verwendung eines überfallenen SSD-Cache.

  • Beide Optionen haben relativ wenig Einfluss auf die Zeit des Wachstumsprozesses - obwohl die Option, bei der sich drehende Laufwerke separat zwischengespeichert werden, aufgrund des höheren Busverkehrs möglicherweise langsamer ist.

Es ist schnell und relativ einfach, bcache so zu konfigurieren, dass das SSD-Laufwerk entfernt wird, wenn Sie es ersetzen müssen. Dank der Blöcke sollte es möglich sein, das Raid-Setup vor Ort in beide Richtungen zu migrieren.

Sie sollten auch nicht vergessen, dass im Moment der meisten (alle?) Live-CD - Distributionen nicht unterstützenbcache , so dass Sie nicht einfach Ihre Daten mit solchen Werkzeugen unabhängig von der Zugriff bcache- mdraidLayout - Option Sie gewählt haben.

Adam Ryczkowski
quelle
1
Ich habe die Frage aktualisiert, um zu verdeutlichen, dass ich keinen nicht redundanten SSD-Cache haben möchte. Ihr zweiter Punkt ist ein ausgezeichneter Punkt, danke dafür. Ihre dritte Kugel zum Thema Weltraum: Meinen Sie, weil Sie die Parität auf SSD speichern würden? In Ihrem letzten Absatz verwende ich F20, werde aber irgendwann RHEL / CentOS7 oder Debian Jessie verwenden (wenn bcache-tools den Schnitt macht).
@ JackDouglas Ad 3. Aufzählungszeichen: Ja, genau das. Da Sie jedoch planen, überfallene SSD-Laufwerke zu verwenden, gilt dies nicht für Sie.
Adam Ryczkowski
1
Dies ist weiterhin der Fall, da sie nicht nur gespiegelt werden, sondern auch die RAID-Parität für die Sicherungslaufwerke speichern müssen. Dies ist nicht der Fall, wenn das RAID unter bcache durchgeführt wird, was ich für Ihren Punkt hielt
Ich glaube, Sie meinen das Gegenteil: Die SSD-Matrix muss nicht die Parität der sich drehenden Festplatten speichern, wenn sie dem gesamten mdraid-Laufwerk zugeführt wird.
Adam Ryczkowski
1
Ja, genau das meine ich!
1

Ich würde denken, dass der vernünftige Ansatz darin besteht, das resultierende MD-Gerät zwischenzuspeichern.

bcache wurde entwickelt, um sequentielle Lese- und Schreibvorgänge zu durchlaufen.

Wenn Sie jedes Gerät separat bcachen, schreiben logischerweise mehrere Geräte, die in eine überfallene oder gestrippte MD gestreift werden, aus der bcache-Perspektive ständig zufällige Blöcke.

Während ein zwischengespeichertes MD-Volume wie gewohnt aussieht, werden Dateien auf das Volume geschrieben und nicht zufällige Blöcke auf mehrere Geräte.

Der gesamte Sinn von Hard- und Software-Raids besteht darin, die Daten im Backend so zu streifen, dass das resultierende Dateisystem wie ein normales Volume aussieht.

Dies ist möglicherweise nicht korrekt (da bcache-Entwickler möglicherweise clever sind und diese Art von Situation berücksichtigen), aber das logische Optimum besteht darin, Volumes zwischenzuspeichern, anstatt Geräte zu blockieren.

enlightnd
quelle
auch ein sehr guter Punkt
Ein großer sequentieller Schreibvorgang auf ein RAID5 / 6 erzeugt sequentielle Schreibvorgänge auf alle Komponentengeräte. Jedes Komponentengerät erhält jeden N-1-Datenblock (oder jede Parität), aber die Daten, die es erhält, sind sequentiell. Aber Sie haben Recht, dass es die Dinge verzerren wird. Wenn es einige Blöcke gibt, die häufige Teilstreifenschreibvorgänge sehen, die zu einem Lese-, Änderungs- und Schreibvorgang (eines Teils) des Paritätsstreifens führen, kann dieser von bcache zwischengespeichert werden. Es wäre jedoch noch besser, es höher zwischenzuspeichern, bevor der Teilstreifen-Schreibvorgang jemals das MD-Gerät traf.
Peter Cordes