Tipps zum effizienten Speichern von Dateien mit einem Wert von über 25 TB im Dateisystem

11

Angenommen, Sie sind mit unkomprimierten Protokolldateien im Wert von 25 TB konfrontiert und verfügen über eine Reihe von 20 Warenkisten mit einer kollektiven freien Speicherkapazität von 25 TB.

Wie würden Sie diese aufbewahren?

a) Welches verteilte Dateisystem soll verwendet werden?

b) Welches Komprimierungs- / Dekomprimierungsformat / -algorithmus?

c) Die Größe der Protokolldatei beträgt 1 MB bis maximal 7 MB für den gesamten Text und viele Leerzeichen

d) Verwendung ist a) Benutzer möchten die neuesten Protokolldateien mehr als zuvor, also welches Caching-System sie verwenden sollen. b) Benutzer lesen nur Protokolldateien, löschen sie nicht. c) Benutzer möchten eine Liste der Protokolldateien für einen Datumsbereich

e) Das Betriebssystem, das auf den Commodity-Boxen ausgeführt wird, ist Linux.

f) Für die Sicherung haben wir ein Speicherarray, das sich darum kümmert. Es besteht also die Möglichkeit, Daten aus dem Array wiederherzustellen.

Ich möchte nicht, dass sie direkt auf das Dateisystem zugreifen. Was soll ich machen ? Wie bekomme ich dafür eine REST-basierte API?

Bitte sparen Sie 2 Cent und was würden Sie tun?

Ankur

Ankur Gupta
quelle
Auf welchen Betriebssystemen laufen die Commodity-Boxen? Benötigen Sie Fehlertoleranz oder ist das in Ordnung, wenn Sie alle auf einer Box gespeicherten Daten verlieren?
Mark Henderson
@farseeker hat die Frage bearbeitet, um Ihre Fragen zu beantworten. Danke
Ankur Gupta
Lesen Sie die Frage noch einmal durch, und die erste Frage, die ich stellen würde, lautet: Wo sind die 25 TB Protokolldateien gerade gespeichert, und können sie dort bleiben?
Mark Henderson
@farseeker auf einem NFS-Dateisystem
Ankur Gupta
Wie wäre es mit en.wikipedia.org/wiki/…
Neil McGuigan

Antworten:

7

Ich bin kein Ninja mit verteiltem Dateisystem, aber nachdem ich so viele Laufwerke wie möglich auf so wenige Computer wie möglich konsolidiert habe, würde ich versuchen, den Großteil der Computer mit iSCSI mit einem Hauptcomputer zu verbinden. Dort konnte ich die Dinge hoffentlich zu einem fehlertoleranten Speicher zusammenfassen. Vorzugsweise fehlertolerant innerhalb einer Maschine (wenn ein Laufwerk ausfällt) und zwischen Maschinen (wenn eine ganze Maschine ausgeschaltet ist).

Persönlich mag ich ZFS. In diesem Fall wäre die integrierte Komprimierung, Deduplizierung und Fehlertoleranz hilfreich. Ich bin mir jedoch sicher, dass es viele andere Möglichkeiten gibt, die Daten zu komprimieren, während sie fehlertolerant sind.

Ich wünschte, ich hätte eine echte schlüsselfertige Lösung für verteilte Dateien zu empfehlen. Ich weiß, dass dies wirklich kludgey ist, aber ich hoffe, es weist Sie in die richtige Richtung.

Bearbeiten: Ich bin noch neu in ZFS und richte iSCSI ein, erinnere mich aber daran, ein Video von Sun in Deutschland gesehen zu haben, in dem die Fehlertoleranz von ZFS gezeigt wurde. Sie verbanden drei USB-Hubs mit einem Computer und steckten vier Flash-Laufwerke in jeden Hub. Um zu verhindern, dass ein Hub den Speicherpool herunterfährt, wurde ein RAIDz-Volume erstellt, das aus einem Flash-Laufwerk von jedem Hub besteht. Dann streifen sie die vier ZFS RAIDz-Volumes zusammen. Auf diese Weise wurden nur vier Flash-Laufwerke für die Parität verwendet. Als nächstes natürlich der unplugged One Hub und das verschlechterte jeden Zpool, aber alle Daten waren verfügbar. In dieser Konfiguration können bis zu vier Laufwerke verloren gehen, jedoch nur, wenn sich zwei Laufwerke nicht im selben Pool befinden.

Wenn diese Konfiguration mit dem unformatierten Laufwerk jeder Box verwendet würde, würden dadurch mehr Laufwerke für Daten und nicht für Parität erhalten bleiben. Ich habe gehört, dass FreeNAS Laufwerke über "iSCSI" auf "rohe" Weise freigeben kann (oder könnte), daher gehe ich davon aus, dass Linux dasselbe tun kann. Wie gesagt, ich lerne noch, aber diese alternative Methode wäre vom Standpunkt der Laufwerksparität weniger verschwenderisch als mein vorheriger Vorschlag. Natürlich würde es auf der Verwendung von ZFS beruhen, von dem ich nicht weiß, ob es akzeptabel wäre. Ich weiß, dass es normalerweise am besten ist, sich an das zu halten, was Sie wissen, wenn Sie etwas bauen / warten / reparieren müssen, es sei denn, dies ist eine Lernerfahrung.

Hoffe das ist besser.

Bearbeiten: Habe ein bisschen gegraben und das Video gefunden, über das ich gesprochen habe. Der Teil, in dem erklärt wird, wie das USB-Flash-Laufwerk über die Hubs verteilt wird, beginnt bei 2: 10 Minuten. In dem Video wird der Speicherserver "Thumper" (X4500) vorgeführt und erläutert, wie die Festplatten auf die Controller verteilt werden. Wenn also ein Festplattencontroller ausfällt, sind Ihre Daten weiterhin gut. (Ich persönlich denke, dies ist nur ein Video von Geeks, die Spaß haben. Ich wünschte, ich hätte selbst eine Klopferbox, aber meine Frau möchte nicht, dass ich einen Palettenheber durch das Haus fahre .: D Das ist eine große Kiste.)

Bearbeiten: Ich erinnerte mich, dass ich über ein verteiltes Dateisystem namens OpenAFS gekommen war . Ich hatte es nicht versucht, ich hatte nur einige darüber gelesen. Vielleicht wissen andere, wie es in der realen Welt funktioniert.

Scott McClenning
quelle
4

Erstens können Protokolldateien mit sehr hohen Verhältnissen komprimiert werden. Ich finde, dass meine Protokolldateien im Verhältnis 10: 1 komprimiert werden. Wenn sie auf ein Verhältnis von 5: 1 komprimiert werden, sind das nur 5 GB oder 20% Ihrer Speicherkapazität.

Da Sie über mehr als genug Speicher verfügen, ist der spezifische Komprimierungsalgorithmus nicht allzu wichtig. Du könntest...

  • Verwenden Sie Zip-Dateien, wenn Windows-Benutzer direkt auf die Dateien zugreifen.
  • Verwenden Sie gzip, wenn über Linux auf sie zugegriffen werden soll und eine schnelle Dekomprimierung wichtig ist.
  • Verwenden Sie bzip2, wenn über Linux auf sie zugegriffen werden soll und es wichtig ist, möglichst kleine Dateien zu haben.

Die größere Frage ist: Wie können Sie Ihren Benutzern einen einfachen Zugriff auf diese Dateien ermöglichen? Ein Teil davon hängt davon ab, wie Ihre Maschinen konfiguriert sind.

Wenn Sie genügend Speicherplatz auf einem einzelnen Computer speichern können, können Sie etwas extrem Einfaches tun, z. B. eine schreibgeschützte Windows-Dateifreigabe. Organisieren Sie die Dateien einfach in Unterverzeichnissen, und schon kann es losgehen.

Wenn Sie für diese Dateien keinen einzigen Dateiserver erstellen können, benötigen Sie möglicherweise ein verteiltes Dateisystem. Windows verfügt über ein verteiltes Dateisystem (DFS), das möglicherweise Ihren Anforderungen entspricht.

Wenn Ihre Anforderungen weiter fortgeschritten sind, möchten Sie möglicherweise eine Webanwendung als Front-End, in der Ihre Benutzer Protokolldateien durchsuchen und herunterladen können. In diesem Fall empfehle ich die Verwendung von MogileFS, einem verteilten Dateisystem, das für die Verwendung mit einem Front-End-Anwendungsserver entwickelt wurde. Die Integration in die meisten Webprogrammiersprachen ist sehr einfach. Sie können es nicht als freigegebenes Laufwerk auf Ihrem Computer bereitstellen, aber es ist erstklassig als Datenspeicher für eine Webanwendung.

Ryan
quelle
Zu Ihrer Information: Windows DFS ist eine Möglichkeit, Dateien / Ordner auf mehreren Servern synchron zu halten. Sie können den Speicher auf mehreren Servern nicht als ein einziges Speicherlaufwerk verwenden. microsoft.com/windowsserversystem/dfs/default.mspx
Scott McClenning
Nachdem Sie darüber nachgedacht haben, haben Sie Recht; DFS kann möglicherweise verwendet werden, wenn Sie einen DFS-Stammpunkt auf die Ordner haben, die sich auf anderen Computern befinden. Auf diese Weise würde der Benutzer eine Dateistruktur sehen und müsste nicht wissen, auf welchen Computern die Daten tatsächlich leben, würde DFS wissen. Das würde funktionieren. Wenn Leute mich nach Windows DFS fragen, denken sie normalerweise, dass dies eine Möglichkeit ist, Speicherplatz zusammenzufassen, und deshalb komme ich zu diesem Schluss. Entschuldigung und dein Recht, das könnte funktionieren.
Scott McClenning
2

lessfs ist ein deduplizierendes , komprimierendes Dateisystem. Es wird zwar nicht das ganze Problem lösen, aber es kann einen Blick wert sein, es als Backend zu betrachten.

Hubert Kario
quelle
2

Exportieren Sie diese Ordner über NFS

Mounten Sie sie auf einem einzelnen Computer, auf dem Apache (unter dem Dokumentenstamm) als Baum ausgeführt wird

Verwenden Sie zip, um sie zu komprimieren. Gutes Komprimierungsverhältnis. zip kann unter allen Betriebssystemen geöffnet werden

Listen Sie Dateien in Apache auf - Sie gewähren Benutzern also schreibgeschützten Zugriff (Protokolldateien dürfen nicht bearbeitet werden, richtig).

Jet
quelle
1
Stimme nfs + httpd zu, stimme zip nicht zu. gzip interagiert viel besser mit http.
Tobu
+1 für gzip-Kommentar von @Tobu - Mit der richtigen Konfiguration kann Apache gzip'-Dateien an einen Webbrowser senden, der sie transparent dekomprimiert und anzeigt. Benutzer müssen nicht einmal über die Komprimierung Bescheid wissen.
Christopher Cashell
0

Haben Sie jemals darüber nachgedacht, die Protokolldateien zu komprimieren? Führen Sie dann im Frontend eine Aktion aus, um sie zu dekomprimieren, bevor Sie sie dem Endbenutzer bereitstellen. Vielleicht eine Art CGI-Skript.

Veranda
quelle
0

@Ankur und @Porch. Ich stimme der Notwendigkeit zu, diese Protokolle zu komprimieren.

@jet Ich denke, das einfachere Schema ist besser - daher ist httpd für Endbenutzer nahezu ideal. Und Backend könnte jedes sein.

Meine Meinung - teile Protokolle in 2 Gruppen ein - Ordner 'alt' und 'neu'.

Führen Sie sie im Dokumentstamm von httpd zusammen. Verwenden Sie eine starke Komprimierung für alte (entweder xz- oder 7z-Archive, die für alle Betriebssysteme beliebt sind) mit großen Wörterbuch- und Blockgrößen. Dies können sogar solide Archive sein.

Verwenden Sie die Komprimierung von fs für neue: lessfs (rw, Deduplizierung + leichte Komprimierungsmethoden), fusecompress 0.9.x (rw, leichte bis starke Komprimierungsmethoden), btrfs / zfs, squashfs (ro, leichte bis starke Komprimierungsmethoden, einige dedup, verwenden für neu gedrehte Protokolle).

Sie können sogar transparent Protokolle in komprimierte fs (fusecompress, lessfs, btrfs / zfs) schreiben. Bieten Sie über httpd R / O-Zugriff auf Protokolle, die geschrieben werden. Sie sind für Benutzer transparent und für sie transparent dekomprimiert.

Warnhinweise zu Fusecompress: 1) Verwenden Sie nur 0.9.x - es ist stabil. Klonen Sie von hier https://github.com/hexxellor/fusecompress

Spätere Versionen unterstützen lzma entweder nicht gut oder verlieren Daten.

2) Es wird nur 1 CPU-Kern zum Komprimieren einer Datei verwendet, daher kann es langsam sein.

Komprimieren Sie jedes Protokoll im Ordner "Neu", der älter als einige Zeit (mehrere Monate) ist, und wechseln Sie zu "Alt".

ximik
quelle