Come servire i file in un piccolo cluster di bioinformatica?

Abbiamo un piccolo gruppo di sei server ubuntu. Eseguiamo analisi bioinformatiche su questi cluster. Ogni analisi richiede circa 24 ore per completare, ciascun server centrale i7 può gestire 2 alla volta, prende come input circa 5GB dati e uscite circa 10-25GB di dati. Eseguiamo decine di queste settimane. Il software è un hodgepodge di script personalizzati perl e software di allineamento sequenza di tre parti scritto in C / C ++.

Attualmente, i file sono serviti da due nodes di calcolo (sì, utilizziamo i nodes di calcolo come file server). Ogni nodo dispone di 5 unità 1TB sata montate separatamente (senza raid) e sono raggruppate tramite glusterfs 2.0.1. Hanno ognuna 3 tabs ethernet pci gigabit ethernet intel ethernet, attaccate ad un interruttore DGS-1224T a d-link ($ 300 24 port consumer-level). Attualmente non stiamo utilizzando frame jumbo (non so perché, in realtà). I due nodes di calcolo dei file vengono quindi rispecchiati tramite glusterfs.

  • Perché acquistare hard disk costosi dai fornitori di server di storage come Dell / HP / Sun?
  • È sicuro utilizzare i SSD di consumo MLC in un server?
  • 19 "raggruppabili montabili
  • soluzione per memorizzare 10TB / mese
  • Come posso accelerare i trasferimenti di file tra gli arrays di archiviazione?
  • Qual è il modo migliore per spiegare i problemi di archiviazione agli sviluppatori e agli altri utenti
  • Ciascuno dei quattro altri nodes support i file tramite glusterfs.

    I file sono tutti grandi (4gb +) e vengono memorizzati come file nudo (nessun database / etc) se ciò conta.

    Come potete immaginare, questo è un po 'un disordine che è cresciuto organicamente senza preoccupazione e vogliamo migliorarlo ora che stiamo esaurendo lo spazio. Le nostre analisi sono intense di I / O ed è un collo di bottiglia. Stiamo ottenendo solo 140mB / sec tra i due file server, forse 50MB / sec dai client (che hanno solo NIC singole). Abbiamo un budget flessibile che probabilmente riesco a get $ 5k o giù di lì.

    Come dovremmo spendere il nostro budget?

    Abbiamo bisogno di alless 10 TB di memory sufficiente per servire tutti i nodes. Quanto veloce / grande la CPU / memory di un file server di questo tipo deve essere? Dovremmo usare NFS, ATA su Ethernet, iSCSI, Glusterfs o qualcos'altro? Dovremmo acquistare due o più server e creare una sorta di cluster di archiviazione o è sufficiente un server per un numero così piccolo di nodes? Dovremmo investire in NIC più veloci (ad esempio, tabs PCI Express con più connettori)? L'interruttore? Dovremmo utilizzare raid, se sì, hardware o software? e che raid (5, 6, 10, etc)?

    Qualsiasi idea apprezzata. Siamo biologi, non guru IT.

    5 Solutions collect form web for “Come servire i file in un piccolo cluster di bioinformatica?”

    Sono nel field della scienza informatica e faccio ricerche in bioinformatica. Attualmente 746 su Biostars 🙂

    Ho gestito le strutture di calcolo bioinformatica per 3 anni in un'università (circa 40 server Linux, 300 CPU, spazio su disco da 100TB + backup, circa 1T RAM totale – server che vanno da 16 a 256GB di RAM). Il nostro cluster dispone di 32 nodes di calcolo a 8 core, 2 nodes di testa e lo stiamo espandendo con altri due nodes di calcolo a 48 funzionalità. Serviamo i file sui nodes di calcolo su NFS.

    Raccommand di passare a NFS per la tua situazione.

    Abbiamo considerato di passare a Gluster, Luster e Samba, ma abbiamo deciso di non usarli.

    NFS

    Ho alcuni suggerimenti principali su NFS:

    1. Avere un server NFS dedicato. Dare 4 core e 16 GB di RAM. Un server dedicato è più sicuro e più facile da mantenere. È un'installazione molto più stabile. Ad esempio, a volte è necessario riavviare il server NFS: un server dedicato non mancherà di accedere ai calcoli dell'account, semplicemente congelandoli e procederanno una volta che il server NFS tornerà indietro.
    2. Servite solo ai vostri nodes di calcolo e testa. Nessuna stazione di lavoro. Nessuna networking pubblica.
    3. Utilizza la versione NFS 3. Dalla mia esperienza NFSv4 era più fragile – più crash – è più difficile da eseguire il debug. Abbiamo passato il cluster da NFSv3 a NFSv4 e indietro più volte prima di stabilirsi. È una networking locale in modo da non richiedere la sicurezza (integrità e / o privacy) di NFSv4.

    Hardware di archiviazione

    Il nostro cluster è stato acquistato 3 anni fa, quindi non utilizza SAS, ma ha un espansivo drive FiberChannel e controllori san . Ciò sta cambiando, tutto il nuovo storage che acquistiamo è SAS.

    Suggerisco di considerare un archivio SAS . SAS sta sostituendo FiberChannel come una soluzione più economica, più veloce e migliore. Recentemente ho fatto ricerche sulle diverse soluzioni offerte. Convenientemente le opzioni che abbiamo esaminato sono documentate di errore del server: quali sono le opzioni di storage esterne SAS (Promise, Infortrend, SuperMircro, …)?

    Abbiamo recentemente ordinato un sistema di archiviazione SAS da 6 GB a 6 Gb SAS – 6 Gb da RAID Incorporated. Solo per l'archiviazione abbiamo pagato $ 12k. L'ordine dovrebbe venire in un paio di settimane. Questo è un sistema di non-singolo punto di fallimento: tutti i componenti sono ridondanti e automaticamente falliscono se i componenti non funzionano. È collegato a 2 server ciascuno usando una partizione diversa dell'arrays. Si tratta di una soluzione chiavi in ​​mano, quindi una volta che viene spedito abbiamo bisogno di collegarlo, di alimentarlo e functionrà (le partizioni RAID6 verranno montate su Linux). L'ordine comprendeva anche i server e RAID Incorporated che stanno configurando Linux Debian su quelli senza alcun costo aggiuntivo.

    Altre considerazioni

    Purtroppo, se fai le operazioni di infrastrutture bioinformatiche probabilmente devi diventare un guru di storage.

    Per la tua partizione da 10 TB, la ricerca di RAID6 – 2 unità può fallire senza perdere i dati. La ricostruzione di un'unità da 2 TB su un dispositivo di ricambio caldo richiede 24 ore, un'altra unità può non funzionare in quel periodo. Ho avuto 2 drive non in contemporanea in un arrays di 16 unità.

    Si consideri dedicare un'unità a un ricambio caldo nell'arrays. Quando hai più di 16 unità allora direi che un ricambio caldo è un must.

    Pensate a un piano d'azione se l'hardware non riesce sul server NFS dedicato. Vorrei mantenere un twin come un nodo di calcolo come potenziale sostituto per il server NFS originale.

    Infine devo menzionare che il nostro file server esegue OpenSolaris (suona inusuale – lo so). OpenSolaris (come si è rivelato per noi) ha un eccellente supporto hardware server (FiberChannel, IniniBand, …). L'impostazione di un server NFS in su richiede un'ora – tutti i passaggi sono completamente diretti: installare os, aggiornare tramite una networking di installazione, creare un pool di zfs, creare file system zfs, condividere NFS. Sole erano quelli che hanno sviluppato NFS nel 1984, non sorprendentemente OpenSolaris è molto bravo a servire NFS. La ragione principale per utilizzare OpenSolaris era ZFS – un buon filesystem per la bioinformatica . Alcune caratteristiche che mi piacciono:

    • Integrità (tutte le scritture sono controllate)
    • Stoccaggio pool, istantanee
    • Le esportzioni NFS sono configurate nel file system servito
    • Compressione in linea
    • Prenotazioni (garanzie di spazio)
    • Deduplicazione del livello di block
    • Backup efficaci (vedi zfs send ).

    Utilizzando Linux per il tuo server NFS sarebbe bene – in questo caso attenersi a XFS o Ext4.

    Il tuo budget non ti porterà molto lontano con l'hardware della class SAN, ma dovresti essere in grado di get performance migliori grazie all'affidabilità dell'hardware. Ottenga un regolare controller RAID, acquista più dischi, ottieni un interruttore molto migliore e forse una buona port multipli NIC (otteni una qualità del server decent, come l'Intel PRO 1000 GT o ET).

    Se la tua descrizione del model IO è corretto hai un rapporto di lettura / scrittura 15:85, quindi devi andare per RAID 10 per migliorare i numbers di throughput con i dischi SATA. Dato che la tua bias di scrittura whereva semplicemente riconfigurare le unità correnti per RAID-5 (o RAID6 che sarebbe più opportuno su questa scala), le performance sarebbero piombate. RAID-10 dimaga però la capacità utilizzabile dei dischi.

    Ottenere tutto quanto sopra, e abbastanza dischi per consegnare 10TB in RAID10 per $ 5k è fattibile, ma non è un esercizio senza rischi. Ci sono alcune opzioni molto interessanti descritte in questa domanda e le sue risposte che vale la pena considerare se siete soddisfatti dei rischi e della comodità di build la propria soluzione.

    Tuttavia il mio consiglio principale a voi sarebbe quello di iniziare a chiedersi (o chi segna i controlli) è quanto un fallimento di stoccaggio effettivamente costi il ​​tuo business e se sei a suo agio con quel rischio. Il tuo budget di $ 5k potrebbe solo consentire di migliorare le performance, ma stai parlando di avere 10 TB di quello che suppongo sono dati aziendali e capacità di elaborazione, tutti in equilibrio su un'infrastruttura con molti singoli punti di fallimento. Ora potrebbe essere un buon momento per fare un lungo sguardo duro quanto sia importnte questa infrastruttura e capire se è ansible get abbastanza di un budget insieme per acquistare una soluzione adeguata SAN o NAS.

    Le vostre attività di elaborazione sono sviluppate? Sono distribuiti assegnando ad each nodo un certo numero di dati da elaborare?

    Se è così, potrebbe essere più efficace portre il process più vicino ai dati, per non servire i dati ai processi. Non è troppo difficile da fare, ma richiede un process di pensiero diverso da quello di build server.

    In primo luogo, mettere alcune unità su each nodo. Forse non RAID, solo un filesystem su ciascuno. Distribuire i dati su tutti i dischi su tutti i nodes e avviare le attività sui nodes che detengono i dati necessari per l'attività. Cercare di ridurre al minimo i trasferimenti tra nodes.

    Naturalmente, nessuno di questi funziona se i tuoi compiti richiedono parti imprevedibili dei dati.

    Di solito questo tipo di elaborazione riguarda l'estrazione di informazioni da dati, ma la tua output è di ordini di grandezza maggiore dell'ingresso?

    La prima cosa da vedere è come vengono utilizzati i dati? La maggior parte delle analisi genetiche e, in una certa misura, la piegatura di proteine ​​usando l'analisi di elementi finiti si basa sull'accesso sequenziale a file di dati di grandi size, rispetto all'accesso random. Quindi la latenza non è tanto quanto un problema come width di banda dal disco.

    Quindi, in termini di organizzazione dei tuoi dischi, probabilmente desideri tante strisce in tutto il numero di piatti possibili – quindi RAID 5 o 6.

    Come andare a colbind questo ai nodes di elaborazione dipende molto dal tuo budget. Se hai un sacco di soldi, allora la creazione di più dischi virtuali in un SAN tessuto commutato con i nodes di elaborazione direttamente collegati è il modo per andare.

    Per una soluzione economica (ad esempio al budget), l'archiviazione locale in each nodo di elaborazione è il modo per andare. La cosa importnte è che si mantiene la networking I / O di elaborazione (ma se necessario, utilizzare la networking per copiare i dati tra i nodes se non è disponibile SAN). E se è ansible mappare i dati localmente, quindi avendo un sacco di memory sui nodes di elaborazione aiuterà con la memorizzazione nella cache.

    Certamente se si dispone di un budget molto rigoroso si desidera get quei dischi locali in una configuration RAID 5. Inoltre, se ansible, buffer l'output al disco locale durante l'elaborazione piuttosto che scrivere direttamente sui server.

    HTH

    Non credo che probabilmente non vuoi andare con ATAoE, o iScsi, o FC se puoi evitarlo. Queste sono tutte tecnologie di archiviazione di blocchi e sono migliori a fornire spazio su disco a singoli server da un pool di dischi comuni. Non sono progettati per condividere questi dati facilmente tra le macchine client, a less che non si eseguano alcuni software speciali per gestire file system condivisi con i responsabili di metadati e simili.
    NFS è basato su file e progettato per condividere i file system tra più server per te ed è gratuito. Aleksandr ti sta mandando nella giusta direzione se quello che devi fare quello che dice Javier, sposta i dati ai processi per fare il calcolo. Se vuoi che qualsiasi lavoro sia in grado di andare in qualsiasi nodo, allora NFS è il modo per andare. Il throughput sarà probabilmente migliore se si potrebbe pre-popolare i dati ai nodes e submit i lavori che necessitano di dati specifici ai nodes che lo hanno. Questo è il fallimento, mappa / riduca il modo di farlo. Ad esempio, se pre-caricato il genoma del mouse in uno dei nodes e quando qualcuno fa un lavoro di esplosione contro quel genoma, si invia il lavoro al nodo che ha già i dati. Nessun dato reale è stato spostato. Tuttavia, ciò potrebbe creare un collo di bottiglia in quel nodo, se il dataset che ha è popolare e i lavori potrebbero eseguire il backup quando altri nodes sono inattivi.

    Alcuni ricercatori con cui ho lavorato recentemente sono andati con alcuni nodes "grassi" o cluster-in-a-box. Uno ha acquistato un unico sistema basato su 48 core (4 12 core cpus) AMD, con 128 gig di ram in esso per circa $ 15k. I suoi algoritmi sono altamente paralleli, per cui un numero maggiore di nuclei ha senso per lui. Con tanta memory, c'è un sacco di spazio per linux da utilizzare per la cache dei file, in modo che le letture successive di file di dati multigig su quella macchina sono super veloci. Inoltre, con la carta di raid che ha, ottiene circa 300 megs per secondo al suo deposito locale. Non sto dicendo che questa macchina functionrebbe per tutti, ma funziona per lui. Prima di dare a lui di usare, per divertimento ho benchmarkato un lavoro parallelo bzip su quella macchina, che ha compresso un file di text da 3gig a 165meg, e ci sono voluti circa 4 secondi. (Il file è stato memorizzato nella memory temporanea). Abbastanza zippy.

    FYI, vedrai quello che abbiamo usato per call le medie di carico pazzesco con macchine per count di nuclei elevati. Le medie di carico di 20+ sono abbastanza comuni su questa macchina e la sua prestazione intertriggers è ancora abbastanza carica.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.