Wir haben einen kleinen Cluster von sechs Ubuntu-Servern. Wir führen Bioinformatik-Analysen für diese Cluster durch. Jede Analyse dauert ungefähr 24 Stunden, jeder Core i7-Server kann 2 gleichzeitig verarbeiten, nimmt als Eingabe ungefähr 5 GB Daten und gibt ungefähr 10-25 GB Daten aus. Wir führen Dutzende davon pro Woche durch. Die Software ist eine Ansammlung von benutzerdefinierten Perl-Skripten und Sequenzausrichtungssoftware von Drittanbietern, die in C / C ++ geschrieben wurden.
Derzeit werden Dateien von zwei der Rechenknoten bereitgestellt (ja, wir verwenden Rechenknoten als Dateiserver) - jeder Knoten verfügt über 5 separat gemountete 1-TB-Sata-Laufwerke (kein RAID) und wird über glusterfs 2.0.1 gepoolt. Sie verfügen jeweils über 3 gebundene Intel Ethernet PCI-Gigabit-Ethernet-Karten, die an einen D-Link DGS-1224T-Switch angeschlossen sind (300 US-Dollar für Verbraucher mit 24 Ports). Wir verwenden derzeit keine Jumbo-Frames (nicht sicher, warum, eigentlich). Die beiden Dateidienst-Rechenknoten werden dann über glusterfs gespiegelt.
Jeder der vier anderen Knoten stellt die Dateien über glusterfs bereit.
Die Dateien sind alle groß (4 GB +) und werden als reine Dateien (keine Datenbank / usw.) gespeichert, wenn dies wichtig ist.
Wie Sie sich vorstellen können, ist dies ein kleines Durcheinander, das ohne Voraussicht organisch gewachsen ist, und wir möchten es jetzt verbessern, da uns der Platz ausgeht. Unsere Analysen sind E / A-intensiv und es handelt sich um einen Flaschenhals - wir erhalten nur 140 MB / s zwischen den beiden Dateiservern, möglicherweise 50 MB / s von den Clients (die nur einzelne Netzwerkkarten haben). Wir haben ein flexibles Budget, mit dem ich wahrscheinlich 5.000 USD oder so verdienen kann.
Wie sollen wir unser Budget ausgeben?
Wir benötigen mindestens 10 TB Speicherplatz, der schnell genug ist, um alle Knoten zu bedienen. Wie schnell / groß muss die CPU / der Speicher eines solchen Dateiservers sein? Sollten wir NFS, ATA über Ethernet, iSCSI, Glusterfs oder etwas anderes verwenden? Sollten wir zwei oder mehr Server kaufen und eine Art Speichercluster erstellen, oder reicht 1 Server für eine so kleine Anzahl von Knoten aus? Sollten wir in schnellere Netzwerkkarten investieren (z. B. PCI-Express-Karten mit mehreren Anschlüssen)? Der Schalter? Sollten wir Raid verwenden, wenn ja, Hardware oder Software? und welcher Überfall (5, 6, 10 usw.)?
Irgendwelche Ideen geschätzt. Wir sind Biologen, keine IT-Gurus.
Antworten:
Ich bin auf dem Gebiet der Informatik und forsche in der Bioinformatik. Derzeit 746 auf Biostars :)
Ich betreibe die Bioinformatik-Computereinrichtungen seit 3 Jahren an einer Universität (ungefähr 40 Linux-Server, 300 CPUs, 100 TB Speicherplatz + Backups, ungefähr 1 TB RAM insgesamt - Server mit 16 bis 256 GB RAM). Unser Cluster verfügt über 32 8-Kern-Rechenknoten und 2 Kopfknoten. Wir erweitern ihn um zwei weitere 48-Kern-Rechenknoten. Wir liefern die Dateien über NFS an die Rechenknoten.
Ich würde empfehlen, für Ihre Situation zu NFS zu wechseln.
Wir überlegten, zu Gluster, Lustre und Samba zu wechseln, entschieden uns jedoch, diese nicht zu verwenden.
NFS
Ich habe ein paar wichtige Tipps zu NFS:
Speicherhardware
Unser aktueller Cluster wurde vor 3 Jahren gekauft, verwendet also kein SAS, sondern verfügt über umfangreiche FiberChannel-Laufwerke und San- Controller. Dies ändert sich. Der gesamte neue Speicher, den wir kaufen, ist SAS.
Ich würde vorschlagen, einen SAS- Speicher in Betracht zu ziehen . SAS ersetzt FiberChannel als billigere, schnellere und bessere Lösung. Kürzlich habe ich nach den verschiedenen angebotenen Lösungen gesucht. Praktischerweise sind die Optionen, die wir uns angesehen haben , über Serverfehler dokumentiert: Was sind externe SAS-Speicheroptionen (Promise, Infortrend, SuperMircro, ...)?
Wir haben kürzlich ein 24 TB 6 GB SAS - 6 GB SAS-Speichersystem bei RAID Incorporated bestellt. Nur für die Lagerung haben wir 12.000 US-Dollar bezahlt. Die Bestellung sollte in ein paar Wochen kommen. Dies ist ein System ohne Single-Point-of-Failure. Alle Komponenten sind redundant und führen automatisch ein Failover durch, wenn Komponenten ausfallen. Es ist an 2 Server angeschlossen, die jeweils eine andere Partition des Arrays verwenden. Es ist eine schlüsselfertige Lösung. Sobald sie ausgeliefert ist, müssen wir sie nur noch anschließen, einschalten und sie funktioniert (RAID6-Partitionen werden unter Linux bereitgestellt). Die Bestellung umfasste auch Server und RAID Incorporated richtet Linux Debian auf diesen ohne zusätzliche Kosten ein.
Andere Überlegungen
Wenn Sie eine Bioinformatik-Infrastruktur betreiben, müssen Sie wahrscheinlich ein Speicher-Guru werden.
Wählen Sie für Ihre 10-TB-Partition die Auswahl von RAID6-2-Laufwerken aus, ohne dass Daten verloren gehen. Der Wiederaufbau eines 2-TB-Laufwerks auf ein Ersatzlaufwerk dauert 24 Stunden. Während dieser Zeit können andere Laufwerke ausfallen. Ich hatte 2 Laufwerke gleichzeitig in einem Array mit 16 Laufwerken ausfallen.
Ziehen Sie in Betracht, ein Laufwerk als Ersatzlaufwerk im Array zu reservieren. Wenn Sie mehr als 16 Laufwerke haben, würde ich sagen, dass ein Ersatzlaufwerk ein Muss ist.
Stellen Sie sich einen Aktionsplan vor, wenn die Hardware auf dem dedizierten NFS-Server ausfällt. Ich würde einen Zwilling als Rechenknoten als möglichen Ersatz für den ursprünglichen NFS-Server behalten.
Schließlich muss ich erwähnen, dass auf unserem Dateiserver OpenSolaris ausgeführt wird (klingt ungewöhnlich - ich weiß). OpenSolaris (wie sich für uns herausstellte) bietet eine hervorragende Unterstützung für Serverhardware (FiberChannel, IniniBand, ...). Das Einrichten eines NFS-Servers dauert 1 Stunde - alle Schritte sind völlig unkompliziert: Installieren des Betriebssystems, Aktualisieren über ein NAT, Einrichten des Netzwerks, Erstellen eines zfs-Pools, Erstellen von zfs-Dateisystemen, Freigeben von NFS. Sun war derjenige, der 1984 NFS entwickelte. Es überrascht nicht, dass OpenSolaris NFS sehr gut bedienen kann. Der Hauptgrund für die Verwendung von OpenSolaris war ZFS - ein gutes Dateisystem für die Bioinformatik . Einige Funktionen, die mir gefallen:
zfs send
).Die Verwendung von Linux für Ihren NFS-Server wäre in Ordnung - in diesem Fall bleiben Sie bei XFS oder Ext4.
quelle
Ihr Budget wird Sie mit Hardware der SAN-Klasse nicht sehr weit bringen, aber Sie sollten in der Lage sein, eine viel bessere Leistung zu erzielen, indem Sie die vorhandene Hardware verbessern. Holen Sie sich einen anständigen RAID-Controller, kaufen Sie mehr Festplatten, erhalten Sie einen viel besseren Switch und möglicherweise eine gute NIC mit mehreren Ports (erhalten Sie anständige Server-Server wie die Intel PRO 1000 GT oder ETs).
Wenn Ihre Beschreibung des E / A-Musters korrekt ist, haben Sie ein Lese- / Schreibverhältnis von 15:85, sodass Sie sich für RAID 10 entscheiden müssen, um Ihre Durchsatzzahlen mit SATA-Festplatten zu verbessern. Angesichts Ihrer Schreibverzerrung würde die Leistung sinken, wenn Sie Ihre aktuellen Laufwerke einfach für RAID-5 (oder RAID6, was in dieser Größenordnung ratsamer wäre) neu konfigurieren würden. RAID-10 halbiert jedoch die nutzbare Kapazität der Festplatten.
Es ist machbar, all das zu bekommen und genügend Festplatten zu haben, um 10 TB in RAID10 für 5.000 US-Dollar bereitzustellen, aber es ist keine risikofreie Übung. In dieser Frage und ihren Antworten werden einige sehr interessante Optionen beschrieben , die es wert sind, in Betracht gezogen zu werden, wenn Sie mit den Risiken zufrieden sind und Ihre eigene Lösung bequem erstellen können.
Mein Hauptratschlag an Sie wäre jedoch, sich zu fragen (oder wer auch immer die Schecks unterschreibt), wie viel ein Speicherfehler Ihr Unternehmen tatsächlich kostet und ob Sie mit diesem Risiko vertraut sind. Ihr Budget von 5.000 US-Dollar ermöglicht es Ihnen möglicherweise, die Leistung zu verbessern, aber Sie sprechen von 10 TB, von denen ich annehme, dass es sich um geschäftskritische Daten und Verarbeitungskapazität handelt, die alle auf einer Infrastruktur mit vielen einzelnen Fehlerquellen basieren. Vielleicht ist jetzt ein guter Zeitpunkt, um sich genau anzusehen, wie wichtig diese Infrastruktur ist, und um herauszufinden, ob Sie genug Budget zusammenbringen können, um eine geeignete SAN- oder NAS-Einstiegslösung zu kaufen.
quelle
Sind Ihre Verarbeitungsaufgaben selbst entwickelt? Werden sie verteilt, indem jedem Knoten ein Datenblock zugewiesen wird, der verarbeitet werden soll?
In diesem Fall ist es möglicherweise effektiver, den Prozess näher an die Daten heranzuführen, als die Daten den Prozessen bereitzustellen. Es ist nicht allzu schwer, erfordert aber einen anderen Denkprozess als nur den Aufbau von Servern.
Legen Sie zunächst einige Laufwerke auf jeden Knoten. Vielleicht kein RAID, nur ein Dateisystem auf jedem. Teilen Sie die Daten auf allen Datenträgern auf allen Knoten auf und starten Sie die Aufgaben auf den Knoten, die die für die Aufgabe erforderlichen Daten enthalten. Versuchen Sie, Übertragungen zwischen Knoten zu minimieren.
Natürlich würde nichts davon funktionieren, wenn Ihre Aufgaben unvorhersehbare Teile der Daten benötigen.
quelle
Normalerweise geht es bei dieser Art der Verarbeitung darum, Informationen aus Daten zu extrahieren - aber Ihre Ausgabe ist um Größenordnungen größer als die Eingabe?
Als erstes muss untersucht werden, wie die Daten verwendet werden. Die meisten genetischen Analysen und bis zu einem gewissen Grad die Proteinfaltung mithilfe der Finite-Elemente-Analyse beruhen auf dem sequentiellen Zugriff auf große Datendateien - im Vergleich zum wahlfreien Zugriff. Die Latenz ist also weniger ein Problem als die Bandbreite von der Festplatte.
In Bezug auf die Organisation Ihrer Festplatten möchten Sie wahrscheinlich so viele Streifen auf so vielen Platten wie möglich - also RAID 5 oder 6.
Wie Sie dies mit den Verarbeitungsknoten verbinden, hängt stark von Ihrem Budget ab. Wenn Sie viel Geld haben, ist das Einrichten mehrerer virtueller Festplatten in einem Switched Fabric-SAN mit direkt angeschlossenen Verarbeitungsknoten der richtige Weg.
Für eine kostengünstige Lösung (dh zu Ihrem Budget) ist der lokale Speicher in jedem Verarbeitungsknoten der richtige Weg. Wichtig ist, dass Sie Ihre Verarbeitungs-E / A vom Netzwerk fernhalten (verwenden Sie das Netzwerk jedoch bei Bedarf zum Kopieren von Daten zwischen Knoten, wenn kein SAN verfügbar ist). Wenn Sie die Daten lokal zuordnen können, hilft das Zwischenspeichern, wenn auf den Verarbeitungsknoten viel Speicher vorhanden ist.
Wenn Sie ein sehr strenges Budget haben, möchten Sie diese lokalen Festplatten in einem RAID 5-Setup erhalten. Puffern Sie nach Möglichkeit auch die Ausgabe während der Verarbeitung auf die lokale Festplatte, anstatt direkt auf die Server zurückzuschreiben.
HTH
quelle
Ich glaube nicht, dass Sie höchstwahrscheinlich nicht mit ATAoE, iScsi oder FC arbeiten möchten, wenn Sie dies vermeiden können. Dies sind alles Blockspeichertechnologien, mit denen einzelne Server aus einem gemeinsamen Festplattenpool besser mit Speicherplatz ausgestattet werden können. Sie sind nicht dafür ausgelegt, diese Daten einfach zwischen Clientcomputern auszutauschen, es sei denn, Sie führen eine spezielle Software für den Umgang mit gemeinsam genutzten Dateisystemen mit Metadatenmanagern und dergleichen aus.
NFS ist dateibasiert und wurde entwickelt, um Dateisysteme für mehrere Server gemeinsam zu nutzen. Es ist kostenlos. Aleksandr schickt Sie in die richtige Richtung, wenn Sie, was Sie tun müssen, was Javier sagt, die Daten in die Prozesse verschieben, um die Berechnung durchzuführen. Wenn Sie möchten, dass ein Job zu einem beliebigen Knoten gehen kann, ist NFS der richtige Weg. Der Durchsatz ist wahrscheinlich besser, wenn Sie Daten vorab an die Knoten füllen und die Jobs, die bestimmte Daten benötigen, an die Knoten senden können, auf denen sie vorhanden sind. Das ist die Hadoop-, Map- / Reduce-Methode. Wenn Sie beispielsweise das Mausgenom auf einen der Knoten vorinstalliert haben und jemand einen Explosionsjob gegen dieses Genom ausführt, senden Sie den Job an den Knoten, der bereits über die Daten verfügt. Es wurden keine echten Daten verschoben. Dies kann jedoch zu einem Engpass an diesem Knoten führen, wenn das vorhandene Dataset beliebt ist und Jobs gesichert werden können, wenn andere Knoten inaktiv sind.
Einige der Forscher, mit denen ich in letzter Zeit zusammengearbeitet habe, haben sich für einige "fette" Knoten oder Cluster-in-a-Box entschieden. Man kaufte ein einzelnes 48-Kern-AMD-basiertes System (4 12-Kern-CPU) mit 128 GB RAM für etwa 15.000 US-Dollar. Seine Algorithmen sind sehr parallel, daher sind größere Kernzahlen für ihn sinnvoll. Mit so viel Speicher gibt es eine Menge Platz für Linux, das für den Datei-Cache verwendet werden kann, sodass das anschließende Lesen von Multigig-Datendateien auf diesem Computer sehr schnell ist. Außerdem erhält er mit der Raid-Karte, die er hat, ungefähr 300 Megabyte pro Sekunde in sein lokales Lager. Ich sage nicht, dass diese Maschine für alle funktionieren würde, aber sie funktioniert für ihn. Bevor wir es ihm zur Verwendung gaben, habe ich zum Spaß einen parallelen bzip-Job auf diesem Computer verglichen, der eine 3-Gig-Textdatei auf 165 Megabyte komprimierte, und es dauerte ungefähr 4 Sekunden. (Datei wurde in RAM zwischengespeichert). Ziemlich flink.
Zu Ihrer Information, Sie werden sehen, was wir früher als verrückte Lastdurchschnitte mit Maschinen mit hoher Kernanzahl bezeichnet haben. Lastdurchschnitte von 20+ sind auf diesem Computer weit verbreitet, und die interaktive Leistung ist immer noch ziemlich schwungvoll.
quelle