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
quelle
Antworten:
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.
quelle
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...
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.
quelle
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.
quelle
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).
quelle
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.
quelle
@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".
quelle