Andrea Chiffi
matr. 10059634
<andrea.chiffi@gmail.com>
Sommario
Questo documento descrive i cluster file system: nel primo capitolo vengono illustrate le motivazioni che hanno portato al loro sviluppo ed utilizzo nel settore dellHigh Performance Computing
(HPC), partendo da unintroduzione alle varie tipologie di file system. Viene, inoltre, descritta
nel dettaglio la terminologia utilizzata per descrivere le funzionalit`a di questa tipologia di file
system.
Nel secondo capitolo, vengono illustrate le varie soluzioni di cluster file system attualmente
disponibili, incluso larchitettura e le caratteristiche del parallel file system PVFS2.
Nel terzo capitolo viene descritta in dettaglio la realizzazione di un minicluster composto
R
R
da nodi Intel
Itanium
2, partendo dallinstallazione di una distribuzione GNU/Linux, fino
Sources: http://www.salug.it/~much0/cluster-file-system/
License: http://creativecommons.org/licenses/by-nc-sa/2.5/it/
ii
Indice
Indice
1 Introduzione ai cluster file system
1.1
1.2
1.1.1
1.1.2
1.1.3
1.2.1
Terminologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.2
Motivazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
2.1
IBM GPFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2
LUSTRE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.3
2.4
HDFS (Hadoop) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.5
GlusterFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.6
PVFS2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.7
3.2
3.3
3.4
45
Realizzazione di un minicluster . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.1.1
3.1.2
3.1.3
Installazione di Rocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Requisiti software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
3.2.2
Compilazione e installazione . . . . . . . . . . . . . . . . . . . . . . . . . . 55
3.3.2
3.3.3
3.3.4
Benchmark di PVFS2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Capitolo 1
1.1
1.1.1
I file system locali accedono a dispositivi di storage direttamente collegati alla macchina.
I dispositivi di archiviazione non sono condivisi, pertanto non vi `e la necessit`a di prevedere
funzionalit`a di condivisione nella progettazione di questa tipologia di file system, che, quindi, si
occupa solo della gestione fisica dei file e directory sul dispositivo di memorizzazione, fornendo
un livello di astrazione per tutte le applicazioni che necessitano dellaccesso e la manipolazione
dei dati. In questa categoria rientrano i ben noti ext3 (una versione di ext2 con supporto
al journaling), ReiserFS, XFS, JFS (IBM journaling file system), ISO 9660 (utilizzato per
i CDROM), FAT, NTFS (utilizzato dalle recenti versioni di Windows), HFS+ (utilizzato da
Mac OS X) ed il pi`
u recente ZFS di Sun Microsystems. Oltre a questi ne esistono altri ottimizzati
per luso con dispositivi di memorizzazione particolari, come JFFS2, utilizzato per le memorie
FLASH.
1.1.2
Un file system distribuito o network file system permette di accedere ai file contenuti su un
computer remoto tramite rete, potenzialmente in simultanea da diversi computer. A differenza
dei file system citati in precedenza, i dati non vengono letti o archiviati su di un dispositivo
locale, ma, attraverso un meccanismo client/server, su dispositivi remoti, collegati in maniera
trasparente alla propria gerarchia di file. Inoltre, un file system distribuito deve poter gestire i
file in maniera trasparente e concorrente e, di solito, `e dotato di sistemi di autenticazione e, a
volte, di cifratura.
NFS (network file system), introdotto nel 1985 da Sun Microsystems, `e il file system distribuito pi`
u diffuso ed utilizzato in ambienti UNIX. Oltre a questo, particolarmente apprezzati sono
anche AFS (Andrew file system), che utilizza un meccanismo di caching nei client e Kerberos
per lautenticazione, CODA, sviluppato dalla Carnegie Mellon University e fault tolerant (attraverso la replicazione dei dati e lutilizzo in modalit`a disconnessa), e CIFS (noto anche come SMB
o Samba) utilizzato nelle reti Windowsbased. Oltre a questa tipologia di file system, esistono
anche recenti implementazioni di file system distribuiti basati sul paradigma di comunicazione
peertopeer .
1.1.3
Alcuni file system vengono utilizzati per compiti speciali che non rientrano direttamente
nelle prime due categorie. Molti non hanno alcuna relazione con un supporto di memorizzazione
permanente dei dati, ma vengono utilizzati dal sistema operativo per dare accesso ad alcune
funzionalit`a. Alcuni esempi presenti in ambiente GNU/Linux sono:
procfs : file system virtuale contenente tutti i dati relativi allo stato del sistema e dei processi;
1.2
Il termine cluster file system rappresenta un file system distribuito che non consiste di un
singolo server e di un set di client (come NFS ), ma di un cluster di nodi server che, cooperando
insieme, forniscono a tutti i client un servizio ad alte performance. Questo servizio viene fornito
in maniera del tutto trasparente ai nodi client del cluster: `e il file system stesso che si occupa
della distribuzione delle varie richieste agli elementi che compongono lo storage cluster.
Il design di un cluster file system differisce, quindi, da quello di un file system locale poiche
enfatizza gli aspetti relativi alla condivisione, connettivit`a e caching (lato client). A differenza
di quello che accade nei file system locali, nei cluster file system tutte risorse relative al file
system (inclusi i metadati2 ) sono distribuite nellintero sistema di storage [2].
Un cluster file system permette ai nodi allinterno del cluster di leggere e scrivere simultaneamente file e directory. I dati di un cluster file system, infatti, non appartengono ad una porzione
del file system o a particolari nodi, ma sono estesi allintero cluster. In definitiva, lobiettivo
finale di un cluster file system moderno consiste nella creazione di un sistema software scalabile,
attraverso applicazioni multiple in esecuzione su diversi server, tutte facenti riferimento allo
stesso pool di storage condiviso in rete.
Per raggiungere la condivisione dinamica delle operazioni di I/O attraverso tutti i server e i
nodi di storage, un cluster file system deve effettuare sofisticati controlli su quale nodo possiede
i diritti di accesso ad una certa porzione di dati in un determinato istante di tempo. La tecnologia che si occupa di gestire laccesso ai dati viene denominata Distribuited Lock Manager
(DLM) e, se ben progettata, permette al cluster file system di scalare su decine o centinaia di
nodi, assicurando alte performance e la coerenza dei dati in ogni istante di tempo [5].
Prima di illustrare pi`
u in dettaglio le caratteristiche e larchitettura di un cluster file system,
`e necessario, comunque, introdurre la terminologia che verr`a utilizzata in seguito, iniziando
col chiarire brevemente cos`e un cluster e quali sono i vari ambiti applicativi nei quali viene
utilizzato.
2
I metadati sono informazioni che descrivono un insieme di dati. La funzione principale di un sistema di
metadati `e quella di consentire operazioni quali la ricerca, la localizzazione, la selezione, la gestione delle risorse e
la diponibilit`
a. Alcuni file system memorizzano i metadati in strutture dati come le directory o gli inode o anche
nei nomi dei file. I metadati possono spaziare dai semplici timestamp e permessi di un file, a commenti di testo,
icone o altre informazioni specifiche di una particolare implementazione.
1.2.1
Terminologia
Dal punto di vista dello storage, la maggior parte dei cluster `e costituito da 2 componenti
fondamentali (Fig. 1.1):
i nodi, connessi tra di loro attraverso una qualsiasi tecnologia di interconnessione;
il cluster file system, ovvero lo strato software che permette ai nodi del cluster di condividere i dati e lavorare insieme come una singola entit`a.
n0
n1
n2
n3
n4
n5
n6
Cluster Network
s0
s1
s2
s3
s4
Figura 1.1: Nodi server di I/O (s0. . . s4) e nodi di calcolo (n0. . . n6) di un cluster.
In generale, le applicazioni di un cluster possono essere suddivise in varie tipologie [2]:
1. High performance clusters, chiamati anche computational cluster systems, sono i sistemi
normalmente utilizzati per la ricerca scientifica, in quanto forniscono unelevata potenza
di calcolo, in genere eseguendo calcolo parallelo su volumi di dati molto grandi. In questi
ambienti, il cluster file system si occupa di distribuire i dati da processare ai nodi di
calcolo, consentendo ad ogni nodo di accedere agli stessi file in maniera concorrente;
2. High availability (HA) clusters, che implementano tecniche di tolleranza ai guasti e ridondanza dei dati, per assicurare unalta disponibilit`a del servizio, spesso per fornire
tipologie di servizi come File Server o Database Server. In genere, `e costituito essenzialmente da 2 server identici, ciascuno dei quali `e costruito in maniera tale da ridondare
quelle componenti hardware il cui guasto potrebbe risultare fatale al funzionamento del
sistema;
3. Load balancing clusters, sono sistemi che distribuiscono il carico delle richieste applicative
tra i vari server (webserver o applicationserver ), ad esempio con lintroduzione di un
sistema di code, e solitamente sono dotati di vari strumenti amministrativi che permettono
un controllo fine sullutilizzo delle risorse, la gestione dellaccounting ed il monitoraggio
del cluster;
4. Storage cluster systems, che vengono utilizzati tra i componenti della Storage Area Network 3 e i sistemi server dotati di diversi sistemi operativi. Il loro scopo consiste nel fornire
un accesso condiviso ai blocchi di dati di un sistema di storage;
5. Database cluster systems, che inserisce molte delle caratteristiche del cluster file system a
livello applicativo (ad esempio Oracle Real Application Clusters (RAC) permette ai diversi
nodi che eseguono simultaneamente il software Oracle RDBMS, di accedere ad un singolo
database).
Come gi`a accennato, la distinzione tra le varie tipologie applicative dei cluster non `e rigida, anzi, molto spesso, un sistema cluster fornisce, contemporaneamente, pi`
u di un servizio applicativo.
Per quanto riguarda i cluster file system `e utile introdurre la seguente terminologia:
1. Il termine distribuited file system indica una generica definizione di file system di rete o
client/server. In questo scenario, a differenza dei file system locali, i dati non sono locali
allhost system. In questa categoria rientrano i gi`a citati NFS e CIFS ; vi `e tuttavia da
notare il fatto che la relazione tra i vari client ed il server `e di cardinalit`a N:1, per cui, in
questa configurazione, il server NFS rappresenta un singolo point of failure;
2. Global file system `e un termine che si riferisce allo spazio dei nomi (namespace): ogni file
ha lo stesso nome e risulta raggiungibile attraverso lo stesso percorso da tutti i nodi. Il
World Wide Web (WWW) `e un ottimo esempio di utilizzo di un global namespace: ogni
risorsa (pagina web, immagine, file audio, ecc.) `e referenziata univocamente, a livello
mondiale, attraverso un URL (Uniform Resource Locator );
3. Con il termine SAN file system viene indicato un file system capace interagire con dispositivi di memorizzazione di massa attraverso una Storage Area Network (SAN): un
file system di questo tipo monta nativamente lo storage su di un nodo e distribuisce
gli indirizzi dei vari blocchi agli altri nodi del cluster, connettendo tutti i nodi a quello
storage. In figura 1.2 viene visualizzato uno schema comparativo tra le tecnologie DAS
(Direct Access Storage), NAS (Network Access Storage) e SAN (Storage Area Network ).
Alcuni SAN file system pi`
u popolari, ad oggi, sono GPFS (General Parallel File System)
di IBM o GFS (Global File System) di Red Hat;
4. Il termine symmetric file system `e utilizzato per indicare un file system nel quale i metadati
sono distribuiti tra i vari nodi client. Il codice per la gestione dei metadati rappresenta un
punto critico per le performance complessive di un file system di questo tipo, in quanto
introduce un ulteriore overhead sui nodi client. Questa metodologia `e seguita dai file
system GFS e GPFS citati precedentemente;
3
DAS
NAS
SAN
Application
software
Application
software
Application
software
Network
File System
File System
File System
FC/GbE
Storage
Storage
Storage
Figura 1.2: Confronto tra DAS (Direct Access Storage), NAS (Network Access Storage) e SAN
(Storage Area Network ).
5. Al contrario, con asymmetric file system viene indicato un file system che presenta uno
o pi`
u metadata server dedicati, che gestiscono gli elementi strutturali del file system
e la struttura del disco associata ad esso. Alcuni file system che incorporano questa
caratteristica sono Lustre o NFS e CIFS ;
Come gi`
a accennato in precedenza, i cluster file system possono essere utilizzati in combinazione con una Storage Area Network . Una SAN permette il raggruppamento delle risorse di
storage, ma non definisce le regole tramite le quali i server possono accedere a queste risorse:
ciascun file system accede ad un sottoinsieme dello storage. Invece, lutilizzo combinato di un
cluster file system ed una SAN effettua un raggruppamento delle risorse di storage e delle applicazioni di I/O in maniera tale da permettere a qualsiasi server di accedere a qualsiasi dato
presente nellintero ambiente storage [5].
Una specializzazione dei cluster file system, appositamente ideata per supportare applicazioni parallele (come le applicazioni scientifiche basate sul linguaggio MPI ) `e data dai parallel file
system. Utilizzando un parallel file system, tutti i nodi del cluster possono accedere agli stessi
file nello stesso istante di tempo, attraverso richieste read() e write() concorrenti. Questa
tipologia di file system `e stata progettata per fornire alti rate di I/O al verificarsi di un accesso
simultaneo da parte di molti processi (parallel I/O).
Larchitettura dei parallel file system `e generalmente suddivisa in 2 strati: lo strato client e
lo strato server. Lato client, il parallel file system si occupa di generare un namespace globale
distribuito su tutti i nodi e di creare una singola vista del file system. Siccome esso genera
un unico grande file system, lo strato client consente ai nodi di effettuare le richieste di I/O
che sono eseguite dallo strato server. Lo strato server di un parallel file system, quindi, `e
responsabile di tutte le operazioni di I/O, e pu`o estendersi anche a molti client in cluster molto
grandi. Dal punto di vista dello storage, lo strato server `e identico, a livello funzionale, allo
strato di storage. Questo poiche ogni parallel file system `e progettato in maniera tale che ogni
singolo server fisico si prenda carico delle proprie risorse di storage. A differenza dei cluster file
system, comunque, in un parallel file system lo storage non `e direttamente condiviso dagli altri
server. Per questo motivo, un parallel file system non necessita di una SAN per lo storage.
Come gi`a accennato per i cluster file system, un parallel file system fa uso di diversi daemon
tra i nodi, metadati e meccanismi di controllo, per assicurare che i dati memorizzati siano
accessibili da un singolo client alla volta, garantendo in questo modo la coerenza dei dati.
Mentre alcuni parallel file system fanno uso di un gestore di lock centralizzato e di vari server
per i metadati, per gestire il controllo del traffico delle varie richieste, altre implementazioni
utilizzano approcci non gerarchici o una gestione segmentata dei lock, per raggiungere una
scalabilit`a molto elevata. Il risultato consiste in architetture di file system ottimizzate per
enormi volumi di traffico tra i vari nodi.
Daltro canto, molti parallel file system risultano inefficienti nella gestione di I/O random,
tipici di ambienti come i database [5]. Alcuni esempi di parallel file system, di cui si discuter`
a
in seguito, sono General Parallel File System (GPFS) di IBM, Lustre e PVFS2.
I cluster file system risultano ben progettati per installazioni in ambienti enterprise, con
relativamente pochi nodi. A causa della loro integrazione con le strutture SAN e la loro estrema
focalizzazione circa lalta disponibilit`
a ed il recupero immediato dei dati, un cluster file system
risulta molto adatto in ambienti con database distribuiti o server applicativi allinterno di uno
storage in rete. Inoltre, i cluster file system in ambienti enterprise vengono utilizzati sempre pi`
u
in accoppiamento con protocolli NAS (NFS, CIFS) per creare ambienti NAS scalabili basati su
SAN. In definitiva, i cluster file system dovrebbero essere tenuti in considerazione quando sono
assolutamente necessari requisiti quali lalta disponibilit`a ed il recupero dei dati per applicazioni
particolarmente critiche.
I parallel file system continuano a dominare nel settore dellHigh Performance Computing.
Questo perche non richiedono lintegrazione con una SAN e sono ottimizzati per I/O altamente
parallelo. Inoltre, questa categoria di file system risulta sempre pi`
u diffusa tra le offerte di
NAS scalabile. Tipicamente, queste offerte si basano sullarchitettura dei parallel file system
per realizzare cluster plugandplay, dove ogni nodo, non appena viene aggiunto, agisce come una singola entit`
a atomica, contribuendo ad aumentare la potenza di calcolo e lo storage
allintero sistema. Alcune di queste offerte permettono di raggiungere dimensioni teoriche del
file system dellordine di 100 TB e mostrano impressionanti velocit`a di flussi di dati. Pertanto,
soluzioni basate sui parallel file system dovrebbero essere utilizzate quando i requisiti obbligatori
riguardano le performance dei client ed un elevato I/O parallelo [5].
1.2.2
Motivazioni
Figura 1.3: Sottomissione ed esecuzione di un job sul cluster: flusso temporale di eventi.
Il modello pi`
u comune di inputoutput consiste in unazione di I/O collettiva da parte di
tutti i nodi che eseguono il job; questo comportamento si ha, ad esempio, quando un unico file
viene utilizzato dallintero job. Il secondo pattern pi`
u comune consiste in un singolo nodo che
legge e scrive i dati. Larchitettura del cluster terr`a in conto della totale larghezza di banda
disponibile, che, a seguito di una corretta configurazione, risulter`a essere pari alla somma della
larghezza di banda di tutti i server. Inoltre, la bandwidth disponibile ad un singolo nodo non `e
generalmente limitata da quella dei server, ma da quella della rete di interconnessione e del file
system.
Una situazione estremamente comune consiste nella necessit`a di un continuo incremento
della capacit`
a dello storage di un cluster, successivamente alla sua messa in opera. Le varie
soluzioni per lo storage, quindi, devonono consentire questo aumento, attraverso laggiunta di
server ed il resizing del file system, che non dovrebbe introdurre limitazioni sulla dimensione
massima di un file o del file system stesso.
Inoltre, molte soluzioni per lo storage funzionano bene con un basso numero di client, ma
poche risultano performanti allaumentare di questo numero. Le problematiche tipiche in questo
contesto consistono nel garantire delle performance stabili quando molti client creano dei file
nella stessa directory, e la capacit`
a del file system di gestire una moltitudine di operazioni di I/O
o richieste di metadati, che possono essere avviate simultaneamente da tutti i client. Quindi, la
scalabilit`a rappresenta uno dei principali motivi di scelta di un determinato file system.
Un cluster file system dovrebbe gestire, in maniera completamente trasparente ai client,
gli eventuali reboot dei server o malfunzionamenti degli stessi, mediante un meccanismo ad
alta disponibilit`
a, come, ad esempio, il failover 4 . Lassenza di un failover robusto pu`o, infatti,
portare al blocco o la terminazione dei job, o alla necessit`a di reboot del cluster, entrambe
situazioni estremamente gravi per la gestione di un cluster.
Unultima caratteristica gradita in un cluster file system consiste nellinteroperabilit`a tra le
diverse versioni software, che permetterebbe di effettuare gli upgrade del cluster file system su
cluster attivi [3].
4
Il failover `e una tecnica utilizzata per assicurare il massimo della disponibilit`
a su rete a seguito di un cedimento
di una componente dellhardware.
10
Capitolo 2
2.1
IBM GPFS
Il General Parallel File System (GPFS) di IBM `e un parallel file system dedicato ai sistemi di
High Performance Computing e permette laccesso ad alta velocit`a ad applicazioni che operano
su pi`
u nodi di un cluster Linux o AIX. Tra gli ambiti duso, vi sono lengineering, il digital media,
il data mining, lanalisi finanziaria, lelaborazione di dati sismici e la ricerca scientifica. GPFS
`e un parallel file system proprietario progettato ed ottimizzato specificamente per funzionare
su cluster di Storage Server IBM ; la filosofia di fondo `e stata quella di realizzare un parallel
file system quanto pi`
u possibile affidabile e performante, al prezzo di costi di messa in opera
` un parallel file system dalle prestazioni elevate e con dischi condivisi per
piuttosto elevati. E
cluster AIX 5L e Linux, in grado di gestire fino a 4096 dischi da massimo 1 TB ciascuno, per
un totale di 4 PB di file system. GPFS, inoltre, implementa la gestione interna del file system
a 64 bit, consentendo una dimensione massima per un file pari a 263 1 byte [9].
Architettura e caratteristiche
Questo file system si compone di un insieme di dischi, che contengono i dati del file system,
un insieme di nodi, che usano e gestiscono il file system, ed un insieme di interconnessioni di
rete, che consentono la comunicazione tra i nodi e lo storage (Fig. 2.1). GPFS consente a tutti
i nodi di calcolo, che montano il file system, di avere una visione coerente di tutto lo storage,
ed un accesso concorrente ad esso [2].
11
GPFS File System
Switching fabric
Shared disks
Lo standard POSIX (Portable Operating System Interface) deriva da un progetto iniziato nel 1985 dallIEEE
(Institute of Electrical and Electronic Engineers). Formalmente noto come IEEE-IX, il termine `e stato coniato
da Richard Stallman e si riferisce ad una famiglia di standard che definiscono le API (Application programming
interface) per i software sviluppati per le diverse varianti dei sistemi operativi UNIX.
12
IP Network
Application
Application
Application
Application
Application
Application
GPFS
GPFS
GPFS
GPFS
GPFS
GPFS
FC Interface
FC Interface
FC Interface
FC Interface
FC Interface
FC Interface
GPFS
Nodes
Disk
Subsystem
13
Application
Application
Application
Application
Application
GPFS
GPFS
GPFS
GPFS
GPFS
GPFS
NSD
NSD
NSD
NSD
NSD
NSD
GPFS
Compute
Nodes
Interconnect
NSD
Disk Interface
GPFS
IO Nodes
NSD
Disk Interface
Disk
Subsystem
14
Locking e caching
Come gi`
a accennato, GPFS utilizza un sistema di locking distribuito basato sui token [9].
Larchitettura prevede un Lock Manager centrale operante in collaborazione con Lock Manager
locali residenti sui singoli nodi. Un nodo che voglia accedere ad una data risorsa pu`o mandare
un messaggio al Lock Manager centrale, il quale gli restituir`a un token; esso garantisce al Lock
Manager locale il diritto di concedere privilegi di accesso, relativi alla risorsa in questione, ai
processi residenti su quel nodo, fino alla rimozione del token stesso da parte del Manager centrale
(Fig. 2.7). In questo modo richieste consecutive da parte di uno stesso nodo verso una data
risorsa possono essere gestite con un solo scambio di messaggi sulla rete. Se il Lock Manager
rileva un conflitto fra due richieste concorrenti da parte di nodi distinti, pu`o procedere al ritiro
del token di uno dei due nodi coinvolti, in modo da assicurare la consistenza dei dati.
` possibile specificare il byte range al quale si `e interessati, in modo da permettere laccesso
E
concorrente di pi`
u nodi a parti distinte di uno stesso file. Daltra parte se ogni nodo richiedesse
15
16
un token esclusivamente per il byte range al quale `e interessato per la successiva operazione
di read/write e provvedesse al suo rilascio immediatamente dopo la conclusione delloperazione
si genererebbe un overhead significativo. Per questo motivo GPFS utilizza un protocollo che
cerca di minimizzare il numero di comunicazioni necessarie con il Lock Manager. In particolare
ciascun nodo, allatto di una richiesta di lock, tenter`a di ottenere i diritti sullintero file, in modo
da coprire anche eventuali accessi futuri; solo se ad un istante successivo due nodi dovessero
contendersi la stessa risorsa quello dei due che aveva ottenuto in precedenza i permessi dal Lock
Manager centrale rilascer`
a la porzione di file necessaria allesecuzione della nuova richiesta.
Lutilizzo di un Lock Manager centralizzato basato sui token ha diversi vantaggi. In primo
luogo `e un meccanismo relativamente scalabile, perche evita continue ritrasmissioni di richieste
di locking fra i nodi periferici ed il Lock Manager centrale. Inoltre, sebbene la concessione dei
token sia centralizzata, il locking vero e proprio viene effettuato localmente sui nodi interessati.
Infine tramite il sistema dei token `e possibile realizzare un efficace meccanismo di caching locale;
il possesso di un token garantisce, infatti, che non vi siano altri client interessati allaccesso concorrente su quella risorsa, e pertanto si pu`o provvedere al caching locale anche per le operazioni
di scrittura. Allatto del ritiro del token da parte del Lock Manager (che pu`o avvenire perche
le operazioni su quel blocco sono terminate o per il rilevamento di un conflitto) si provveder`
a
ad aggiornare lo storage con il contenuto della cache (writeback caching). Ci`o permette di
incrementare notevolmente le performance del parallel file system nelle operazioni di scrittura.
Tolleranza ai guasti
Rilevazione dei guasti
Allo scopo di rilevare eventuali condizioni di malfunzionamento, GPFS utilizza un Group
Services Layer, incaricato di effettuare il monitoraggio dei nodi e dei link di comunicazione
tramite messaggi periodici chiamati heartbeat (pulsazioni); esso inoltre implementa un protocollo
di Group Membership tra i processi. Quando il Group Service Layer si accorge dellesistenza
di un problema (perche ad esempio non riceve pi`
u lheartbeat di un particolare nodo) esso
informa i restanti nodi di una modifica nella Group Membership; questo evento fa scattare le
procedure di ripristino. I gruppi di appartenenza dei nodi giocano inoltre un ruolo fondamentale
nel ripristino del sistema in seguito a partizionamenti della rete [9].
Guasti ad un nodo
Alla caduta di un nodo, il sistema dovr`a provvedere a riportare in uno stato consistente i
metadati sui quali il nodo stava operando, rilasciare le risorse assegnate in precedenza a tale
nodo (in particolare i token di locking) ed eleggere un sostituto per ogni eventuale ruolo speciale
che quel nodo ricopriva: NSD, token manager, allocation manager, . . . (Fig. 2.8).
Le operazioni di ripristino sono facilitate dai log che il nodo manteneva sullo spazio condiviso;
grazie ad essi `e possibile individuare e correggere quelle operazioni che sono rimaste in sospeso in
seguito al guasto. Inoltre il sistema di locking distribuito ci assicura che nessun altro nodo possa
17
18
vietano laccesso ai dischi condivisi a quei nodi esclusi dal gruppo dominante [9].
Guasti ad un disco
In sistemi composti da svariate centinaia di dischi per lo storage, la possibilit`a che uno di
essi subisca un guasto diventa decisamente non trascurabile; si rendono pertanto necessari meccanismi che evitino conseguenze disastrose per il file system. A tal scopo, `e possibile utilizzare
controller RAID che provvedano autonomamente alla replicazione e al ripristino dei dati. Dato
il costo sempre pi`
u contenuto di queste tecnologie, la soluzione con controller RAID sta diventando oggi di gran lunga la pi`
u diffusa. In passato, tuttavia, si sono sviluppate strade alternative
che includessero le funzionalit`
a del RAID allinterno del file system stesso, quali il sistema di
`
replicazione di GPFS. E infatti possibile configurare il file system in modo che ciascun dato e/o
metadato venga replicato automaticamente su due o pi`
u dischi distinti. Alloccorrenza di un
guasto sar`a il sistema stesso ad occuparsi del reindirizzamento delle richieste di accesso ad una
risorsa verso il disco di backup, cos` come del ripristino della coerenza fra le due copie, allatto
delleventuale riparazione del disco malfunzionante. Il prezzo da pagare per la realizzazione di
questi meccanismi tramite il file system stesso `e una perdita in termini di prestazioni dovuta al
maggiore carico necessario alla duplicazione dei dati [9].
Vantaggi e svantaggi
In definitiva, GPFS si presenta come uninteressante soluzione per cluster con relativamente
pochi nodi [10]:
buone prestazioni, che migliorano grazie alla parallelizzazione che pu`o fornire con semplicit`a anche il bilanciamento di carico;
ottime caratteristiche di affidabilit`a, che si sfruttano al meglio in una infrastruttura SAN;
POSIX I/O: pu`
o essere utilizzato dalle applicazioni senza adattamenti;
scalabile: supportato da IBM fino a 1.024 nodi, ma esistono gi`a in produzione installazioni
di oltre 2.000 nodi;
funzionalit`
a come la duplicazione di dati e metadati, supporto per le ACL e le quote ne
fanno una soluzione interessante anche per file system general purpose (home directory);
sono disponibili in rete unampia documentazione e le FAQ (esiste anche una mailing list
abbastanza attiva del San Diego Super Computing);
Tra gli svantaggi:
la sua natura di software proprietario non permette in alcun modo la personalizzazione,
lo studio o lottimizzazione del codice;
2.2. LUSTRE
19
2.2
LUSTRE
Lustre `e un cluster file system scalabile, sicuro, robusto e ad alta disponibilit`a. Lobiettivo
principale consiste nello sviluppo di una nuova generazione di cluster file system in grado di
operare su cluster con decine di centinaia di nodi, gestire petabyte di storage e permettere lo
spostamento di centinaia di GB di dati al secondo, attraverso uninfrastruttura di gestione e
sicurezza allavanguardia [11].
` un progetto originariamente sviluppato da Cluster File System Inc. (dal 2 Ottobre 2007
E
parte di Sun MicroSystems) ed `e considerato uno dei prodotti pi`
u promettenti nel campo dei
cluster file system; il nome deriva dalla fusione delle parole Linux e Cluster. Lustre `e una
soluzione completa interamente realizzata via software rilasciato sotto i termini della GNU
General Public License (GPL) ed `e POSIX compliant. Attualmente, il file system Lustre viene
utilizzato dai computer pi`
u potenti al mondo: il 50% dei cluster nella lista TOP30 e il 15% nella
TOP500 [13].
Architettura e caratteristiche
Il file system Lustre si compone di 3 unit`a fondamentali (Fig. 2.9), le cui caratteristiche sono
riassunte nella tabella 2.1 [14]:
i Metadata Server (MDS), che gestiscono i metadati del file system;
gli Object Storage Server (OSS), che forniscono il servizio di I/O;
i client del file system, che accedono ed utilizzano i dati.
Un singolo MetaData Target (MDT) per file system si occupa della memorizzazione dei
metadati, quali i nomi dei file, le directory, la loro creazione e cancellazione, la manipolazione
degli attributi e la gestione del global namespace, sul MetaData Server (MDS) [12].
Le operazioni di I/O vere e proprie, invece, sono demandate ad uno o pi`
u Object Storage
Target (OST) che memorizzano i dati su uno o pi`
u Object Storage Server (OSS). A seconda
della dotazione hardware, un OSS tipicamente riesce a servire da 2 a 25 OST, ed ogni target
fino a 8 TB di dimensione. La capacit`a totale del file system risulta la somma delle capacit`
a
servite dagli OST [14].
Gli OST, a loro volta, si interfacciano agli Object-Based Disk (OBD) tramite appositi driver.
In realt`a, Lustre `e in grado di simulare le funzionalit`a di un OBD a partire da dischi tradizionali a
blocchi: in particolare, esso `e attualmente in grado di operare sulla maggior parte dei file system
20
OSSservers
1-1000s
MDS1
(active)
OSS1
MDS2
(standby)
CommodityStorage
Elan
Myrinet
InfiniBand
OSS2
Simultaneous
support of multiple
networktypes
Lustre clients
1-100,000
OSS3
Router
Shared storage
enables failover OSS
OSS4
OSS5
GigE
OSS6
=Failover
OSS7
Enterprise-Class
Storage Arrays and
SAN Fabric
Numero tipico
di sistemi
Performance
Caratteristiche
hardware
desiderate
Client
1100.000
1 GB/s di I/O,
1.000 operazioni al
secondo sui metadati
No
Nessuna
OSS
11.000
5002.5 GB/s
Dimensione totale
del file system/ numero di OSS
Una buona
larghezza di banda
del bus di
comunicazione
MDS
Unadeguata
potenza di CPU
(raccomandati
almeno 4 core) e
RAM in
abbondanza
2.2. LUSTRE
21
Linux che supportano il journaling, quali ext3, ReiserFS e JFS (Fig. 2.10). Esistono ovviamente
anche driver specifici per lutilizzo di OBD proprietari di terze parti.
locking
OSC
OSC
caching
1
MDS
2
1 open
2 create
striping
Metadata
OSS
OSS
OSS
stripe
OST
3 IO
OSC: Object Storage Client
MDS: Metadata Server
User Space
Application
LLITE
LOV
OSC
NAL
22
semantiche POSIX per leggere e scrivere i file. Una volta effettuata una system call del kernel,
questultimo passa il controllo al livello llite. Questo livello traduce le chiamate al Virtual
File System (VFS) in comandi per il resto del sistema e comunica direttamente con i moduli
MetaData Client (MDC) ed il Logical Object Volume (LOV). Il livello LOV `e responsabile
dellinvio delle richieste dati al set di Object Storage Clients (OSC) che risultano disponibili;
questo effettua il lavoro basandosi sulle informazioni di striping ottenute dal MetaData Server
(MSD). Il livello OSC raggruppa le richieste e le invia al nodo OSS, che si occupa di gestire
lObject Storage Target (OST) specificato, attraverso il livello di comunicazione Portals Network
Abstraction Layer (NAL).
Gli Object Storage Servers (OSS) gestiscono, quindi, un insieme di OST (Fig. 2.12). Questi
target fanno direttamente riferimento al file system fisico sottostante. Il livello OST riceve le
richieste dal NAL e le passa al filtro OBD; questultimo ha il compito di astrarre il file system
sottostante (ad es. ext3) in modo da esser visto allesterno come un Object Based Disk [15].
NAL
OST
OBDfilter
The PC accesses the input
ext3
Scalabilit`
a
La scalabilit`
a del file system Lustre riduce la necessit`a di impiegare diversi file system separati, come uno per ogni cluster o, nel caso peggiore, uno per ogni server NFS. Questo porta
a numerosi vantaggi e, ad esempio, evita di mantenere copie multiple dei dati su differenti file
system. Effettivamente, i maggiori centri di dati HPC richiedono molto meno spazio di storage aggregato, utilizzando Lustre come cluster file system, rispetto ad altre soluzioni. Inoltre, il
2.2. LUSTRE
23
File on MDT
Extended
Attributes
Ordinaryext3File
obj1
oss1
obj2
oss2
obj3
oss3
Direct
Data Blocks
Data
Block
ptrs
Indirect
inode
Double
Indirect
inode
Indirect
Data Blocks
Locking e caching
Lustre punta a mantenere una stretta semantica della coerenza attraverso un rigido sistema di locking distribuito. La gestione dei lock `e demandata allMDS interessato nel caso di
operazioni sui metadati, e allOST che ospita loggetto richiesto nel caso di operazioni di I/O.
Esistono diversi tipi di lock, corrispondenti a diversi livelli di limitazioni imposte agli altri processi interessati allaccesso concorrente a quella risorsa; in particolare si va dal pi`
u stringente
Exclusive Lock (EX), che vieta laccesso in lettura e scrittura a tutti gli altri processi, al pi`
u
blando Null Lock (NL), che implica solo un generico interesse verso quella risorsa e non pone
vincoli.
Se un client cerca di accedere ad una risorsa in una modalit`a non compatibile con lo stato
di locking corrente della stessa, il sistema provvede a creare una struttura di lock request e a
metterla in coda per il possesso della risorsa.
Per quanto riguarda il caching, attualmente esso presenta funzionalit`a limitate; sia per i
MDS che per gli OST `e infatti prevista solo una cache di tipo write-through. Viene adottata
una rigida semantica della coerenza, ed il contenuto della cache viene invalidato al momento
` tuttavia in fase di sviluppo per le prossime release
del rilascio del lock sulla risorsa in uso. E
una cache write-behind sia per i dati che per i metadati; ci`o permetterebbe di incrementare
notevolmente le performance del sistema nelle operazioni di scrittura. Si sta inoltre lavorando
ad un sistema di Collaborative Caching nel quale il caching di dati richiesti da un gran numero
di client venga distribuito su pi`
u nodi, in modo da alleviare il traffico diretto verso lOST che
24
ospita i dati in questione. Una tipica situazione in cui questa tecnica potrebbe fare la differenza
`e quella in cui pi`
u nodi vengano riavviati contemporaneamente in seguito ad una manutenzione;
essi tenterebbero di accedere concorrentemente allOST sul quale risiedono i binari necessari al reboot, creando un affollamento che potrebbe essere evitato se i client potessero essere
reindirizzati verso altri nodi che hanno gi`a effettuato il caching di quei dati.
Tolleranza ai guasti
Rilevazione dei guasti
Come tutti i file system che memorizzano lo stato del sistema (in particolare sul MDS e sugli
OST) Lustre adotta specifici protocolli di recovery, necessari ad evitare che operazioni rimaste
in sospeso a causa di guasti possano lasciare il sistema in uno stato inconsistente; ad esempio
potrebbe accadere che durante la cancellazione di un file il MDS provveda con successo alla
rimozione del relativo inode ma che lOST subisca un guasto prima di eliminare i dati ad esso
relativi.
Allo scopo di individuare simili inconsistenze e facilitare le operazioni di ripristino, Lustre
utilizza alcuni parametri, che, unitamente al sistema di journaling fornito dal filesystem locale
sottostante, permettono di rilevare e rimuovere eventuali inconsistenze. Essi vengono inoltre
utilizzati per realizzare il fencing, ovvero il rifiuto di nuove richieste di operazioni verso i nodi
non disponibili durante la fase di ripristino. Le condizioni di malfunzionamento sono tipicamente
individuate mediante appositi meccanismi di timeout.
Guasti ad un nodo
Parlando dellarchitettura di Lustre si `e accennato al fatto che allo stato attuale esso prevede
un unico MDS per lintero file system; per ovviare a questo possibile punto critico del sistema
`e per`o prevista la replicazione del MDS principale in una configurazione active/failover.
In pratica un client che si accorga di un problema al MDS attivo pu`o contattare un server LDAP e chiedergli la locazione del MDS di backup, che prender`a il posto del server
malfunzionante.
Anche per gli OST `e previsto qualcosa di simile; ciascun OST pu`o essere dotato di una sua
replica, con la sostanziale differenza che anche in condizioni di funzionamento regolare entrambi
gli OST sono attivi e servono le richieste dei client. Dunque alloccorrenza del crollo di uno degli
OST sar`a necessario instradare tutto il traffico diretto verso il nodo malfunzionante sullOST
replicato; viceversa in seguito al ripristino del sistema sar`a necessario suddividere ugualmente
le richieste dei client sui due OST per bilanciare il carico di lavoro (Fig. 2.14).
Guasti ad un link di comunicazione
Abbiamo accennato al fatto che eventuali malfunzionamenti vengono rilevati tramite appositi meccanismi di timeout. Poiche `e in generale impossibile distinguere eventuali problemi
transitori nella rete dai veri e propri guasti ai server, `e previsto sempre almeno un tentativo di
2.2. LUSTRE
25
Target 1
Target 2
OSS1
OSS2
MDS1
MDS2
Funzionalit`
a aggiuntive
Oltre alle caratteristiche descritte precedentemente, Lustre presenta ulteriori funzionalit`a [14]:
Interoperabilit`
a : Lustre pu`
o essere eseguito su molte architetture (Intel a 32 o 64 bit e
PowerPC), ed i client/server sono interoperabili tra le diverse piattaforme. Inoltre, Lustre
fornisce interoperabilit`
a tra versioni software di release consecutive.
Access Control List (ACL) : Lustre supporta questa tecnica di sicurezza;
Quota : possono essere definite quote per utenti e gruppi;
Aggiunta di OSS : la capacit`
a di aggregazione di Lustre della bandwidth del cluster pu`o essere
incrementata senza interrompere le operazioni, semplicemente aggiungendo nuovi OSS;
Striping controllato : la dimensione ed il numero degli stripe pu`o essere controllato in diversi
modi;
Snapshot : `e possibile creare degli snapshot dei dati utilizzando la tecnologia LVM (Logical
Volume Manager );
26
Tool di backup : la versione 1.6 di Lustre contiene due tool di backup; il primo usa la tecnica
di backup incrementale ed il secondo pu`o effettuare il backup ed il ripristino dei dati degli
stripe di Lustre.
2.3
Global File System (GFS) `e un file system a dischi condivisi implementato per cluster Linux
e originariamente sviluppato da Sistina Software (ora acquisita da Red Hat). Esso `e attualmente
disponibile con la suite Red Hat Cluster.
GFS consente la condivisione dei dati e fornisce una singola e consistente visione del namespace
del file system tra i nodi del cluster. Inoltre, come per i cluster file system precedentemente
descritti, `e completamente trasparente alle applicazioni (POSIX compliant) ed implementa le
feature tipicamente richieste in ambienti enterprise, come, ad esempio, il supporto alle quote.
Questo cluster file system `e rilasciato con licenza libera GNU GPL e fa uso di logging, locking
e algoritmi di recovery simili a quelli utilizzati da GPFS di IBM. Limplementazione attuale del
GFS supporta anche il journaling del file system ed il recupero rapido degli errori [20].
Architettura e caratteristiche
GFS prevede 3 tipologie di architettura:
1. client GFS direttamente connessi allo storage tramite una Storage Area Network (Fig. 2.15);
2. client che accedono ai dati tramite i server Global Network Block Device (GNBD), connessi
alla SAN (Fig. 2.16);
3. client che accedono ai dati tramite i server GNBD, sui quali sono direttamente connessi i
dispositivi di storage (Fig. 2.17).
La prima modalit`
a, nella quale le applicazioni sono in esecuzione direttamente sui nodi GFS,
`e quella che offre maggiori performance ed una migliore scalabilit`a.
Nella seconda modalit`
a, invece, lo storage della SAN viene presentato ai client dai server
GNBD. Dal punto di vista di unapplicazione in esecuzione su di un client, si effettua un accesso
storage come se fosse direttamente connesso al server GNBD. Il cluster file system provvede alle
funzionalit`a di locking e condivisione per ciascun client.
Nella terza modalit`
a, i client possono avvantaggiarsi delluso di una topologia Ethernet per
guadagnare laccesso a tutti i dispositivi di storage. I dati presenti sul file system sono, infatti,
condivisi tra tutti i client GFS [16].
I nodi di un cluster GFS condividono gli stessi dispositivi di storage, accedendo a questi
ultimi a livello block anzich`e a livello di file o directory. Come gi`a accennato, la condivisione dei
dispositivi di storage pu`
o avvenire attraverso luso di collegamenti Fiber Channel, dispositivi
SCSI condivisi o i Global Network Block Devices (GNBD). Per questo motivo, GFS richiede
lutilizzo di driver per i dischi a basso livello invece che daemon tradizionali client/server che
27
Applications
GFS
SAN
Fabric
Shared Files
Clients
Applications
GFS
LAN
GNBD
servers
SAN
Fabric
Shared Files
Figura 2.16: GFS: server GNBD connessi alla Storage Area Network .
28
Applications
GFS
LAN
GNBD
servers
Shared Files
Disk
A
Disk
B
Disk Disk
D
C
Disk
E
Disk
F
Locking e caching
Con GFS, il server NFS viene effettivamente rimpiazzato dalla Storage Area Network e da
un accesso condiviso allo storage. Siccome tutti i server possono leggere e scrivere contempora-
29
neamente dati e metadati del file system, GFS fa uso di uninfrastruttura di cluster membership,
locking e fencing (condivisa con il Red Hat Cluster Manager ) per coordinare laccesso condiviso
a queste strutture.
Ad esempio, prima che un nodo scriva su un file per la prima volta, GFS deve ottenere un
write lock per quel file. Se unaltro nodo (ad esempio, il nodo 2) sta leggendo o scrivendo sullo
stesso file, il lock manager deve informare il nodo 2 di rilasciare il suo lock per il file. Una volta
che il nodo 2 ha rilasciato il suo lock, il lock manager pu`o assegnare un write lock al nodo in
attesa, in modo che questo possa iniziare le sue operazioni di scrittura.
Esistono 3 diverse architetture di locking:
1. Grand Unified Lock Manager (GULM): unarchitettura di lock client/server;
2. Distributed Lock Manager (DLM), il quale, a differenza di GULM, non richiede nessun
nodo configurato come gestore dei lock ;
3. Nolock, utilizzato solo per operazioni di un singolo nodo.
Le nuove versioni di questo cluster file system consentono di utilizzare un ditribuited lock
manager esterno, ma effetuano ancora il locking di singoli blocchi di dati da 4 o 8 KB. Per
questo motivo, laccesso a file di grosse dimensioni tramite GFS comporta un maggiore overhead nel locking, rispetto alla soluzione basata su intervalli di byte adottata da GPFS di
IBM.
Inoltre, come ogni file system ben progettato, GFS utilizza il journaling ed il caching dei
file per migliorare la robustezza e le performance [21].
Striping
Lo striping in GFS viene effettuato nel Network Storage Pool ; una volta creato, comunque,
lo stripe non pu`
o essere modificato (`e possibile aggiungere nuovi subpools, ma lo striping resta
confinato nei subpool creati, cio`e GFS non effettua lo striping tra subpools) [9].
Tolleranza ai guasti
Linfrastruttura del cluster controlla le operazioni di un nodo per assicurarsi il suo funzionamento. Se un nodo o la sua connessione di rete subisce un down in modo tale da disconnetterlo
dal resto del cluster, il membership layer ne viene a conoscenza ed inizia loperazione di fencing.
Questa operazione si occupa di isolare il nodo dallo storage condiviso e di resettarlo. Successivamente, viene recuperato il suo journal ed il nodo isolato viene ricollegato automaticamente
al cluster. Loperazione di fencing, comunque, pu`o durare decine di secondi [21].
30
2.4
HDFS (Hadoop)
Il progetto Hadoop, supportato da Apache Software Foundation, consiste nellimplementazione di software per il calcolo distribuito, affidabile e scalabile, e si compone di [22]:
Hadoop core : il sottoprogetto pi`
u importante, che fornisce il file system distribuito Hadoop
File System (HDFS) ed il supporto per il paradigma map/reduce del calcolo distribuito;
HBase : un database distribuito e scalabile costruito su Hadoop core.
Il principale sviluppatore di Hadoop, Doug Cutting, lavora per Yahoo!, ed `e proprio questultima
societ`a che utilizza HDFS su un cluster composto da pi`
u di 10.000 core e uno storage di pi`
u
di 5 PB complessivi. Altre societ`
a che fanno uso di Hadoop sono Amazon2 , Google ed IBM,
Facebook, Last.FM, ImageShack, Wikia, solo per citarne alcune [23].
Hadoop nasce originariamente come infrastruttura per un motore di ricerca libero (Nutch),
sempre ad opera dello stesso sviluppatore. Attualmente, entrambi Hadoop e Nutch sono parte
del progetto Apache Lucene.
HDSF ha molte affinit`
a con gli esistenti file system distribuiti, anche se presenta alcune
significanti differenze. Questo file system `e progettato per essere utilizzato su hardware lowcost,
`e fault tolerant ed `e implementato interamente in Java.
Ispirato al Google File System, HDFS fornisce un accesso ai dati ad alto throughput ed
`e appropriato per applicazioni che lavorano su grandi set di dati (idealmente di dimensione
maggiore di 64 MB). Inoltre, esso riduce alcuni requisiti POSIX per permettere laccesso in
streaming ai dati del file system [22].
Architettura e caratteristiche
HDFS `e composto da una serie di Data Node, ognuno dei quali fornisce blocchi di dati
attraverso la rete di interconnessione utilizzando un protocollo a blocchi, specifico del file system.
Inoltre, questo file system pu`
o fornire i dati attraverso il protocollo HTTP, consentendo, quindi,
laccesso ai dati da un browser web. I Data Node comunicano tra di loro per ribilanciare i dati,
per spostare delle copie tra di loro e mantenere unalta replicazione dei dati [24].
Come gi`
a accennato, Hadoop implementa un paradigma computazionale chiamato map/reduce, dove lapplicazione `e divisa in piccole unit`a di lavoro, ognuna delle quali pu`o essere eseguita
o rieseguita su qualunque nodo del cluster (Fig. 2.18).
Sia la tecnica map/reduce che il file system distribuito sono stati progettati in maniera
tale che i problemi che possono insorgere sui nodi siano gestiti direttamente dal framework in
maniera trasparente.
In maniera simile al map/reduce di Hadoop, HDFS presenta unarchitettura master/slave.
Uninstallazione HDFS consiste di un singolo nodo, il Name Node: un server principale che
gestisce lo spazio dei nomi del file system e regola laccesso ai file da parte dei client. Inoltre,
2
Amazon utilizza Hadoop per i suoi Web Services: Elastic Compute Cloud (EC2) e Simple Storage Service (S3).
Il New York Times ha utilizzato 100 istanze Amazon EC2 e unapplicazione Hadoop per processare unimmagine
TIFF da 4 TB (memorizzata in S3 ), ottenendo 1,1 milione di PDF in sole 24 ore [24].
31
sono presenti un certo numero di Data Node, uno per ogni nodo del cluster, che gestiscono lo
storage direttamente connesso al nodo dove sono in esecuzione (Fig. 2.19).
In maniera analoga ad un metadata server, il Name Node gestisce il namespace del file
system e le operazioni, come lapertura, la chiusura, la ridenominazione, ecc., di file e directory,
disponibili tramite uninterfaccia RPC3 . Inoltre, esso determina il mapping dei blocchi sui Data
Node. Questi ultimi sono responsabili delle richieste di lettura e scrittura da parte dei client del
file system, ed, inoltre, eseguono compiti come la creazione, rimozione e replicazione dei blocchi,
su comando del Name Node (Fig. 2.20).
HDFS, comunque, non `e limitato a job map/reduce; questo file system, infatti, pu`o essere
utilizzato anche per altre applicazioni come, ad esempio, database (HBase) ed operazioni su
matrici. Lunica caratteristica che le diverse applicazioni hanno in comune consiste nella modalit`a di lavoro batchoriented anziche interattiva, realtime, dataintensive o capace di lavorare
su porzioni di dati in parallelo [24]. Viene posta maggiore enfasi sullalto throughput di accesso
ai dati, invece di una bassa latenza.
Il calcolo richiesto da unapplicazione `e molto pi`
u efficiente se eseguito vicino ai dati sul
quale opera. Questo `e vero ancor di pi`
u se i dati sono di dimensione molto grande. Lassunzione
di HDFS consiste nel comprendere che spesso risulta pi`
u efficiente avvicinare il calcolo ai dati,
piuttosto che spostare i dati dove lapplicazione `e in esecuzione. HDFS, quindi, prevede delle
interfacce per consentire alle applicazioni di spostarsi pi`
u vicino ai dati, minimizzando, in questo
modo, la congestione della rete ed incrementanto il throughput complessivo del sistema [25].
Tutti i protocolli di comunicazione di HDFS sono stratificati in cima allo stack TCP/IP. Un
client stabilisce una connessione verso una porta TCP (configurabile) sul Name Node, utilizzando
il protocollo ClientProtocol. I Data Node, invece, fanno uso del protocollo DatanodeProtocol per
comunicare col Name Node. Inoltre, per come `e stato progettato, il Name Node non inizia mai
3
Lespressione Remote Procedure Call (RPC) o chiamata di procedura remota si riferisce allattivazione di
una procedura o funzione da parte di un programma, nel caso in cui tale funzione venga attivata su un computer
diverso da quello sul quale il programma stesso viene eseguito. In altre parole, lRPC consente a un programma
di eseguire funzioni a distanza su computer remoti (accessibili per`
o attraverso una rete).
32
C luster
NameNode
Secondary
NameNode
Client
Cluster
Data Nodes
33
nessuna chiamata di procedura remota (RPC); egli risponde solo alle richieste ricevute dai Data
Node o dai client.
Locking
Le applicazioni HDFS necessitano di un modello di accesso ai file di tipo writeonceread
many (scritto una volta sola, letto molte volte). Una volta che un file viene creato, scritto e
chiuso, non dovrebbe essere modificato. Questa assunzione semplifica i problemi di coerenza dei
dati e permette un accesso agli stessi ad alto throughput. Unapplicazione map/reduce o uno
spider web sono perfetti per questo modello. Comunque, `e in fase di considerazione laggiunta
di un accesso in scrittura ai file di tipo appendingwrite [25].
Tolleranza ai guasti
Essendo progettato per essere utilizzato su hardware lowcost, uno dei principali obiettivi
di HDFS consiste nella gestione dei failure hardware, che rappresentano la norma, invece che
leccezione [25]. Un istanza di HDFS pu`o consistere di centinaia o migliaia di macchine, ognuna
contenente una parte del file system. Il fatto che esista un numero molto grande di componenti e
considerato che ogni componente ha una probabilit`a non bassa di guastarsi implica che qualche
componente di HDFS sar`
a sempre non funzionante. Per questo motivo, la rilevazione di errori
ed il recupero automatico e veloce degli stessi risulta una degli obiettivi principali di HDFS [25].
Laffidabilit`
a viene raggiunta non attraverso il RAID dello storage su un singolo host, ma
attraverso la replicazione dei dati su molti nodi (Fig. 2.21) [24].
HDFS memorizza ogni file come una sequenza di blocchi: tutti blocchi in un file, eccetto
lultimo, sono della stessa dimensione. Come accennato precedentemente, laffidabilit`a `e ottenuta replicando i blocchi di dati; quella di default (pari a 3) consente ad HDFS di cercare e
memorizzare i dati in zone separate: una replica sul nodo locale e le 2 rimanenti su un rack
remoto [24]. La dimensione dei blocchi ed il fattore di replicazione sono configurabili per ogni
file.
I 3 tipi di failure pi`
u comuni sono [25]:
il failure del Name Node;
il failure del Data Node;
il partizionamento della rete.
Ogni Data Node invia periodicamente dei messaggi di heartbeat al Name Node. Il partizionamento della rete pu`
o causare la perdita della connessione col Name Node da parte di alcuni
Data Node. Il Name Node rileva questa condizione dallassenza dei messaggi di heartbeat e
marca come fuoriuso i Data Node privi di recenti heartbeat. Ogni Data Node che viene marcato
non `e pi`
u parte del file system. Questo evento pu`o causare la diminuzione del fattore di replicazione dei blocchi di dati. Il Name Node, pertanto, individua costantemente quali blocchi di
dati necessitano di ulteriore replicazione e la effettua quando necessario.
34
Limitazioni
HDFS richiede ununico Name Node, che, quindi, rappresenta un singolo pointoffailure: se
il Name Node subisce un down, il file system risulta fuoriuso. Attualmente, il restart automatico
ed il failover del Name Node verso unaltra macchina non `e ancora supportato [25]. Per ridurre
limpatto in questa evenienza, alcune installazioni fanno uso di un Name Node secondario per
consentire una qualche forma di failover [24].
Unaltro limite di HDFS consiste nel non poter essere direttamente montato dal sistema
operativo esistente; lo spostamento dei dati, da e verso HDFS, spesso deve essere eseguito
prima e dopo lesecuzione di un job. Per ovviare a questo inconveniente, `e stato implementato,
almeno per sistemi Unixlike, un file system in userspace (utilizzando FUSE ) [24].
2.5. GlusterFS
2.5
35
GlusterFS
GlusterFS `e un cluster file system capace di scalare fino a diversi peta byte. Questo cluster
file system effettua unaggregazione dei diversi nodi di storage (chiamati bricks) su interconnessioni InfiniBand RDMA o TCP/IP ottenendo un unico grande file system di rete parallelo. Una
delle particolarit`
a di GlusterFS `e che esso presenta un design modulare in userspace, senza che
le performance risultino compromesse. I nodi di storage possono essere composti da commodity hardware, come, ad esempio, server x8664 con dischi SATAII RAID ed interconnessione
InfiniBand HBA [26].
Sviluppato da una societ`
a indiana (Z Research Inc.), GlusterFS `e attualmente utilizzato
da una trentina di societ`
a/organizzazioni tra cui il National Center for Supercomputing Applications (NCSA) dellUniversit`
a dellIllinois, soprattutto per lesecuzione di benchmark essendo
un progetto relativamente giovane, ma viene utilizzato anche in ambienti di High Performance
Computing o in server farm che gestiscono hosting mail e web o ancora per clustered database
con MySQL e PostgreSQL.
Architettura e caratteristiche
Alcune delle caratteristiche di GlusterFS sono elencate di seguito [26]:
Elegante progettazione : GlusterFS `e facile da installare, estendibile, portabile, indipendente dal kernel, a rapido sviluppo e feature avanzate, come la replicazione automatica o
scheduler di I/O pluggabili;
Ad alte performance e scalabile : GlusterFS pu`o scalare fino a diversi peta byte e 100
secondi di GB/s di throughput; GlusterFS pu`o sostenere 1 GB/s per nodo di storage su
InfiniBand RDMA. Le performance subiscono un incremento semplicemente aggiungendo
altri bricks;
Tollerante ai guasti : GlusterFS ha la capacit`a di guarire da solo. Non esiste fsck. Lo storage `e accessibile direttamente come file e directory (nello stile di NFS). Se la replicazione
viene abilitata, GlusterFS `e in grado di gestire i failure hardware;
Free Software : GlusterFS `e Software Libero, rilasciato con licenza GNU GPLv3. Questo
significa che pu`
o essere eseguito, copiato, distribuito o migliorato liberamente.
Larchitettura di GlusterFS, visibile nelle figure 2.22 e 2.23, si compone di:
il modulo server e client;
i transport module;
i translator ;
gli scheduler module.
tS
id
e
36
Compatibility with
MS Windows
and other Unices
Cl
ie
n
Storage Clients
Cluster of Clients (Supercomputer, Data Center)
GLFS Client
GLFS Client
Clustered
Vol Manager
GlusterFS
Client
Clustered Vol Manager
Clustered
I/O Scheduler
Clustered
Vol Manager
Clustered I/O Scheduler
Clustered I/O Scheduler
GigE
GLFS Client
GLFS Client
Clustered
Vol Manager
GlusterFS
Client
Clustered Vol Manager
Clustered
I/O Scheduler
Clustered
Vol Manager
Clustered I/O Scheduler
Clustered I/O Scheduler
NFS / SAMBA
over TCP/IP
Storage Gateway
Storage
Gateway
Storage
Gateway
NFS/Samba
NFS/Samba
NFS/Samba
GLFS Client
GLFS Client
GLFS Client
RDMA
RDMA
Se
rve
r
Sid
e
RDMA
Storage Brick 1
Storage Brick 2
Storage Brick 3
GlusterFS
Volume
GlusterFS
Volume
GlusterFS
Volume
GLFSD4
Storage Brick
GLFSD
Volume
GlusterFS
Volume
Volume
nt
lu
S
rF
te
l ie
C
VFS
Read Ahead
I/O Cache
GlusterFS
Unify
Client
Client
Client
GlusterFS Server
GlusterFS Server
Server
Server
Server
POSIX
POSIX
POSIX
Ext3
Ext3
Ext3
Brick 1
Brick 2
Brick n
2.5. GlusterFS
37
Il server di storage esegue il daemon glusterfsd mentre i client possono effettuare il mount
del file system utilizzando glusterfs (questi ultimi, comunque, necessitano del supporto FUSE
nel kernel). Attualmente il server GlusterFS `e stato testato su Linux, FreeBSD e OpenSolaris,
mentre i client vengono eseguiti solo su macchine Linux. La recente versione 1.3.9 di GlusterFS
consente di eseguire sia il client che il server su Mac OS X Leopard.
GlusterFS `e uno dei pochi progetti che supporta differenti protocolli di comunicazione
(attraverso differenti transport module):
TCP/IP
IBverbs InfiniBand userspace verbs
IBSDP InfiniBand socket direct protocol
Una particolarit`
a di GlusterFS `e che molte sue funzionalit`a sono implementate come translator,
da unidea derivata dal progetto GNU Hurd4 .
I translator sono un meccanismo molto potente fornito da GlusterFS per estendere le funzionalit`a del file system attraverso uninterfaccia ben definita. Le interfacce dei translator di
entrambi server e client sono compatibili, permettendo quindi di eseguire gli stessi translator da
entrambe le parti. I translator sono librerie binarie condivise (.so) caricate a runtime.
Le varie tipologie di translator di GlusterFS sono elencate di seguito:
performance translator, che si occupano di aspetti relativi alle performance ed implementano tecniche, quali il readahead e il writebehind ;
clustering translator, che, invece, gestiscono lo striping di file di grandi dimensioni su diversi nodi di storage e la replicazione automatica degli stessi. Un translator in particolare,
chiamato unify, si occupa di aggregare i diversi bricks fornendo una visione ed un accesso
globale a tutto lo storage. Sotto questo punto di vista, GlusterFS `e differente rispetto ai
cluster file system descritti precedentemente, poiche non fa uso di nessun metadata server,
ma, attraverso unify, gestisce un unico namespace che viene modificato dinamicamente
quando, ad esempio, un server di storage subisce un down improvviso;
scheduling translator, che vengono utilizzati da unify per decidere con quale modalit`
a
distribuire i dati nellintero storage (Fig. 2.24); tra questi troviamo:
Adaptive Least Usage (ALU);
Non-uniform file system architecture (NUFA);
Random;
4
GNU Hurd sostituisce il kernel Unix, allinterno del progetto GNU della Free Software Foundation. Hurd
`e un insieme di server che vengono eseguiti su un microkernel per implementare file system, protocolli di rete,
controlli di accesso ai file, e altre caratteristiche che sono implementate nei kernel UnixLike (come Linux).
`
Un translator `e semplicemente un particolare server che implementa una determinata funzionalit`
a di Hurd. E
chiamato translator poiche traduce le chiamate a lui destinate, in chiamate di sistema, in maniera simile al
Virtual File System (VFS) di Linux.
38
2007 Z RESEARCH
GlusterFS Client
Unified Volume
(Unify / RoundRobin scheduler)
B1A1
B1A2
B1A3
B2A1
B2A2
B2A3
AFR
AFR
AFR
AFR
AFR
AFR
B1D1V1+B2D1V1
B1D2V1+B2D2V1
B1D3V1+B2D3V1
B2D1V2+B1D1V2
B2D2V2+B1D2V2
B2D3V2+B1D3V2
GlusterFS Server
Brick 1
B1D1V1
POSIX
B1D2V1 B1D3V1
POSIX
POSIX
GlusterFS Server
Brick 2
B2D1V1
POSIX
B2D2V1 B2D3V1
POSIX
POSIX
2.6. PVFS2
2.6
39
PVFS2
Architettura e caratteristiche
Dal punto di vista architetturale PVFS2 non si differenzia molto dagli altri file system
paralleli finora esaminati. Anche in questo caso abbiamo una separazione sul piano logico
fra Data Server e MetaData Server ; essi sono entrambi implementati mediante il processo
Unix pvfs2-server, che si specializza in una delle due diverse funzioni in base ad appositi file di
` altres` possibile configurare un nodo affinche esso svolga contemporaneamente
configurazione. E
entrambi i ruoli. In ogni caso `e attualmente possibile configurare pi`
u MetaData Server allo scopo
di permettere una distribuzione del carico di lavoro relativo ai metadati.
Lato client, invece, esiste un processo utente chiamato pvfs2-client il cui compito `e quello
di tradurre i comandi ricevuti dallutente in messaggi della system interface, unAPI di basso
livello che implementa le operazioni fondamentali del file system. Inoltre, un modulo del kernel
viene caricato dai client per utilizzare i comandi nativi Unix (come, ad esempio, ls, rm, mv,
cp, mkdir, ecc.) sul mountpoint PVFS2. Il metodo di accesso al file system da parte dei client
PVFS2 viene esaminato in dettaglio nel capitolo seguente (cfr. sez. 3.3.4).
Per quanto riguarda le interfacce di rete supportate, PVFS2 prevede un apposito livello di
astrazione denominato Buffered Messaging Interface (BMI), il cui compito `e quello di mascherare le differenti tipologie di rete sottostanti esportando uninterfaccia omogenea. Attualmente
esistono implementazioni di BMI funzionanti su TCP/IP, InfiniBand e Myrinet.
In figura 2.25 viene visualizzata larchitettura di PVFS2.
PVFS2 supporta linterfaccia UNIX standard, sebbene alcune delle operazioni da essa previste perdano gran parte del loro significato in un ambiente distribuito. Viene invece caldamente
consigliato luso dellinterfaccia MPIIO nellimplementazione ROMIO; in effetti molte delle
caratteristiche del PVFS2 derivano proprio dalla volont`a di sfruttare al massimo le potenzialit`a di questa interfaccia, realizzando uno stretto accoppiamento fra il file system e le funzioni
MPIIO. In particolare i principali requisiti individuati dai progettisti per realizzare questo
accoppiamento sono [31]:
il supporto ad efficienti operazioni di I/O non contigue;
una semantica della consistenza vicina al modello MPIIO;
lassenza di tecniche di caching dal lato client;
lutilizzo di riferimenti ai file indipendenti dai client.
40
Con il primo punto si vogliono rendere efficienti quelle operazioni di accesso a dati strutturati
ma non sequenziali (ad esempio blocchi di array multidimensionali) che sono piuttosto diffuse
nelle applicazioni scientifiche. Esso viene realizzato mediante lutilizzo dei datatype, speciali
costrutti di MPIIO che permettono di definire accessi strutturati in un unico messaggio di
richiesta. Ad esempio, si immagini unapplicazione che necessita di leggere la colonna di una
matrice memorizzata in un file. Per ottenere quel dato, lapplicazione dovrebbe usare un grande
numero di letture scattered di piccole dimensioni. Invece, se potesse chiedere al file system tutti
gli elementi non contigui con una singola operazione, otterrebbe sicuramente una maggiore
efficienza (Fig. 2.26).
Un altro problema `e quello della semantica della consistenza adottata, dal punto di vista dei
client. I progettisti di PVFS2 ritenevano che implementare la rigida semantica POSIX richiedesse un costo troppo elevato in termini di prestazioni, per via della necessit`a di sincronizzare i
diversi processi operanti in concorrenza su una stessa risorsa. Daltra parte uno dei cardini progettuali di PVFS2 `e quello di realizzare un file system stateless, al fine di facilitare il ripristino
del sistema in situazioni critiche; chiaramente ci`o `e in contrasto con le esigenze della semantica
POSIX.
Per lo stesso motivo non `e possibile implementare un sistema di locking distribuito che permetta il caching dei dati sui client, sebbene sia previsto il caching della struttura gerarchica
delle directory per una finestra di tempo di durata configurabile. In ogni caso niente assicura
2.6. PVFS2
41
x
y=0
x=0...8
y=1
x=0...8
...
Array View of Data
42
performance in ambienti paralleli, ma, al contempo, di non offrire le stesse prestazioni di un file
system locale, se, ad esempio, impiegato per memorizzare le home directory degli utenti. Senza
il caching dei metadati lato client, le operazioni di stat, tipicamente, impiegano molto tempo
per essere eseguite, poiche le informazioni devono essere recuperate interrogando tutti i server,
attraverso la rete di interconnesione. Unoperazione come il listing dei file (tramite il comando
ls), infatti, pu`
o richiedere pi`
u tempo di quello che ci si aspetti.
A causa di questo tipo di limitazioni, PVFS2 risulta, quindi, pi`
u adatto per applicazioni che
richiedono un intenso I/O. PVFS2, inoltre, `e ottimizzato per la lettura e scrittura efficiente di
dati di grosse dimensioni, e, quindi, risulta particolarmente utile per applicazioni scientifiche [4].
2.7
I file system a dischi condivisi sono stati introdotti in maniera predominante nei cluster
VAX/VMS della Digital nei primi anni 80. Essi fanno affidamento sulle tecnologie Fibre Channel , iSCSI o InfiniBand, basate sulle Storage Area Network (SAN). In questa categoria rientrano
General Parallel File System (GPFS) di IBM e Global File System (GFS) di Red Hat.
Larchitettura di questi cluster file system rispecchia quella dei file system locali e le performance per un singolo client sono estremamente buone. Sebbene la concorrenza viene penalizzata
da unarchitettura che non `e ottimizzata per la scalabilit`a, questi sistemi offrono il failover con
vari gradi di robustezza. GPFS ha molto successo per cluster fino a poche centinaia di nodi.
Tipicamente, le performance di una SAN su Fibre Channel `e ragionevole, ma certamente non
pu`o competere con client che fanno uso di reti InfiniBand, Quadrics o Myricom con protocolli
nativi [14].
Per limitare i problemi di scalabilit`a dei file system a dischi condivisi, GPFS e GFS sono
spesso utilizzati in sottocluster che esportano lo storage via NFS (ogni nodo esporta il file
system attraverso NFS versione 2 o 3). Nella versione 4 di NFS, invece, gli export risultano
molto complessi a causa della necessit`
a di condividere le informazioni di stato tra i server NFS.
Sebbene la scalabilit`
a di NFS migliori, questa stratificazione introduce una degradazione delle
performance ed il failover di NFS raramente risulta completamente trasparente alle applicazioni.
NFS, inoltre, non offre ne buone performance, ne segue la semantica definita dagli standard
POSIX [14].
Lustre, pertanto, sembrerebbe unottima soluzione perch`e progettato fin dallinizio per supportare una maggiore scalabilit`
a ed, infatti, viene attualmente utilizzato in cluster dotati di
migliaia di nodi. Daltro canto, GPFS di IBM sembra ottenere buone prestazioni per cluster
con relativamente pochi nodi, mentre PVFS2 risulta particolarmente adatto per dotare il cluster
di uno spazio di scratch molto veloce, per applicazioni scientifiche che lavorano su file di grandi
dimensioni, come quelle tipicamente utilizzate in ambienti High Performance Computing.
43
In tabella 2.2 vengono messi a confronto i cluster file system descritti precedentemente,
evidenziando sinteticamente le loro caratteristiche (dal confronto sono stati esclusi i cluster
file system HDFS e GlusterFS, che, dato il loro recente sviluppo e la relativamente minor
documentazione, non permettono di valutarne in dettaglio le caratteristiche).
44
Lustre
GFS
PVFS2
Licenza
Proprietario
Open Source
(GPL)
GPL (Linux
Kernel)
Open Source
(GPL)
Tipo di
soluzione
Di solito legato
ad hardware
IBM
Software
Software
(distribuito in
Red Hat
Enterprise
Suite)
Software
Scalabilit`
a
(numero di
client)
fino a 1.024
>25.000
300
Reti
supportate
Ethernet,
InfiniBand
Ethernet,
InfiniBand,
Myrinet,
Quadrics ed
altre tecnologie
proprietarie
Ethernet
Ethernet,
InfiniBand e
Myrinet
Architettura
Architettura
tradizionale
VAX cluster file
system
Architettura di
storage a
oggetti
Cluster File
System
Parallel File
System
Nodi
direttamente
connessi allo
storage
nodi NSD
oppure tutti i
nodi, nella
modalit`
a SAN
OST
PVFS2 I/O
server
Tipo di
storage
SAN, RAID
SAN, RAID,
SCSI
SAN, SCSI
RAID, SCSI,
IDE
Metadata
server
nodi NSD
oppure tutti i
nodi, nella
modalit`
a SAN
MDS
metadati
distribuiti su
tutti i nodi
PVFS2
metadata server
Comunicazione TCP/IP
tra daemon
Portals Network
Abstraction
Layer (NAL)
TCP/IP
Buffered
Messaging
Interface (BMI)
Installazione
e amministrazione
IBM Redbook
Difficoltosa
Ben
documentata
Ben
documentata
Ridondanza
(tolleranza ai
guasti)
Replicazione di
dati e metadati,
failure groups
Replicazione
degli OST,
failover di MDS
Limitata
(journaling
distribuito e
tecniche di
fencing)
Limitata
(RAID)
Feature
particolari
Interoperabilit`
a
AIXLinux
Intentbased
locking
ROMIO
(MPIIO)
45
Capitolo 3
3.1
Realizzazione di un minicluster
3.1.1
Come gi`
a accennato, la distribuzione GNU/Linux individuata per la messa in opera del
cluster `e la Rocks: una distribuzione opensource sviluppata dal Rocks Cluster Group del San
Diego Supercomputer Center (Universit`a della California), che permette di configurare e gestire
un cluster in maniera semplice e automatizzata. Rocks 4.2.1 (Cydonia) `e a sua volta basata
sulla distribuzione CentOS 4.3 (Final) e prevede linstallazione e la configurazione del software
pi`
u comunemente utilizzato in ambito cluster, attraverso il sistema dei roll.
Un roll consiste di una serie di pacchetti software ed una collezione di programmi e
script per la configurazione degli stessi. Segue una lista di alcuni dei roll presenti in questa
distribuzione:
base : contiene linsieme dei pacchetti software che formano il sistema base
kernel : contiene il kernel linux
ganglia : un sistema di monitoraggio del cluster
hpc : compilatori e librerie per lHigh Performance Computing
area51 : tool e servizi usati per analizzare lintegrit`a dei file del cluster (come Tripwire e
chkrootkit)
46
3.1.2
Il cluster realizzato si compone di 7 nodi HP Integrity rx2600 Server (Fig. 3.2) originariamente appartenenti al cluster HP XC6000 Sigma. I nodi HP rx2600 sono dotati delle seguenti
caratteristiche:
R
R
Processore: 2 CPU Intel
Itanium
2 a 1.4GHz
47
48
/dev/sda /dev/sdb
/dev/sda /dev/sdb
/dev/sda /dev/sdb
/dev/sda /dev/sdb
io37
io38
io39
io40
Gigabit Ethernet
leonardo
c0-0
c0-2
/dev/sda
/dev/sda
compute nodes
49
ruolo in PVFS2
leonardo
frontend
metadata server
io37
I/O node
I/O server
io38
I/O node
I/O server
io39
I/O node
I/O server
io40
I/O node
I/O server
c0-0
compute node
client PVFS2
c0-2
compute node
client PVFS2
3.1.3
Installazione di Rocks
La prima fase consiste nellinstallazione di Rocks sul nodo frontend. Nella schermata iniziale
(Fig. 3.5) digitare frontend al prompt di ELILO, per avviare uninstallazione su tale nodo.
50
51
Nelle due successive schermate (Fig. 3.10) verranno inseriti i dati relativi alla configurazione
delle interfacce di rete del nodo frontend.
52
53
device
file system
/dev/sda1
vfat
/boot/efi
/dev/sda2
ext3
/dev/sda3
swap
/dev/sda4
ext3
/var
/dev/sda5
ext3
/export
18GB
/dev/sdb1
ext3
/mnt/pvfs2
68GB
/dev/sdc1
ext3
/export2
68GB
mountpoint
dimensione
500MB
8GB
4GB
4GB
Dopo aver completato linstallazione del frontend sar`a necessario effettuare linstallazione
di Rocks sui nodi di calcolo: questultima avviene in maniera completamente automatica utilizzando un apposito tool fornito dalla distribuzione. Al prompt di bash del frontend baster`
a
digitare insert-ethers per avviare lo script di installazione automatica, scegliendo Compute
come tipologia di nodo da preparare (Fig. 3.12).
54
device
file system
mountpoint
/dev/sda1
vfat
/boot/efi
/dev/sda2
ext3
/dev/sda3
swap
/dev/sda4
ext3
dimensione
500MB
8GB
4GB
/var
4GB
device
file system
mountpoint
/dev/sda1
vfat
/boot/efi
/dev/sda2
ext3
/dev/sda3
swap
/dev/sdb1
ext3
dimensione
500MB
30GB
4GB
/mnt/pvfs2
68GB
3.2
55
3.2.1
Requisiti software
3.2.2
Compilazione e installazione
Di seguito, sono indicati i passi necessari per la compilazione e linstallazione di PVFS2 sul
frontend leonardo [29]:
[ root@leonardo ~]# cd / usr / src
[ root@leonardo src ]# wget http :// mirror . anl . gov / pub / pvfs2 / pvfs -2.7.1. tar . gz
[ root@leonardo src ]# tar xvzf pvfs -2.7.1. tar . gz
[ root@leonardo src ]# ln -s pvfs -2.7.1 pvfs2
[ root@leonardo src ]# cd pvfs2
[ root@leonardo pvfs2 ]# ./ configure \\
-- with - kernel =/ lib / modules / uname -r / build / -- disable - kernel - aio
***** Displaying PVFS2 Configuration Information *****
-----------------------------------------------------PVFS2 configured to build karma gui
: no
PVFS2 configured to use epoll
: yes
56
PVFS2
PVFS2
PVFS2
PVFS2
PVFS2
PVFS2
PVFS2
PVFS2
PVFS2
PVFS2
:
:
:
:
:
:
:
:
:
:
no
yes
yes
no
no
no
yes
no
no
yes
Solo per i client inoltre, `e necessaria la compilazione e installazione aggiuntiva di un modulo del
kernel:
[ root@c0 -0 pvfs2 ]# make kmod
[ root@c0 -0 pvfs2 ]# make kmod_install
Per verificare la corretta installazione del modulo basta lanciare il seguente comando:
[ root@c0 -0 ~]# modprobe -l | grep pvfs2
/ lib / modules /2.6.9 -42.0.3. EL / kernel / fs / pvfs2 / pvfs2 . ko
3.3
3.3.1
57
Il primo passo consiste nel generare il file di configurazione dei server PVFS2 (/etc/pvfs2-fs.conf )
tramite il comando pvfs2-genconfig:
[ root@leonardo ~]# pvfs2 - genconfig / etc / pvfs2 - fs . conf
**********************************************************************
Welcome to the PVFS2 Configuration Generator :
This interactive script will generate configuration files suitable
for use with a new PVFS2 file system . Please see the PVFS2 quickstart
guide for details .
**********************************************************************
You must first select the network protocol that your file system will use .
The only currently supported options are " tcp " , " gm " , " mx " , " ib " , and " portals ".
( For multi - homed configurations , use e . g . " ib , tcp ".)
* Enter protocol type [ Default is tcp ]:
Choose a TCP / IP port for the servers to listen on . Note that this
script assumes that all servers will use the same port number .
* Enter port number [ Default is 3334]:
Choose a directory for each server to store data in .
* Enter directory name : [ Default is / pvfs2 - storage - space ]:
Choose a file for each server to write log messages to .
* Enter log file location [ Default is / tmp / pvfs2 - server . log ]:
/ var / log / pvfs2 - server . log
Next you must list the hostnames of the machines that will act as
I / O servers . Acceptable syntax is " node1 , node2 , ..." or " node {# -# ,# ,#}".
* Enter hostnames [ Default is localhost ]: io37 , io38 , io39 , io40
Now list the hostnames of the machines that will act as Metadata
servers . This list may or may not overlap with the I / O server list .
* Enter hostnames [ Default is localhost ]: leonardo
Configured a total of 3 servers :
4 of them are I / O servers .
1 of them are Metadata servers .
* Would you like to verify server list ( y / n ) [ Default is n ]? y
58
****** I / O servers :
io38
io37
io40
io39
****** Metadata servers :
leonardo
* Does this look ok ( y / n ) [ Default is y ]? y
Writing fs config file ... done
Il passo successivo consiste nel copiare il file di configurazione appena creato (/etc/pvfs2-fs.conf )
in tutti i nodi server, ovvero leonardo, io37, io38, io39, io40:
[ root@leonardo ~]# for SERVER in io37 io38 io39 io40 ; do \\
scp / etc / pvfs2 - fs . conf $ { SERVER }:/ etc / \\
done
3.3.2
La prima volta che si avvia il server, bisogna prima inizializzare lo storage su tutti i metadata
e I/O server (nel nostro caso: leonardo, io39, io40) con il seguente comando:
[ root@leonardo ~]# pvfs2 - server -f / etc / pvfs2 - fs . conf
[ S 06/30 19:38] PVFS2 Server on node leonardo version 2.7.1 starting ...
pvfs2 - server (10885): unaligned access to 0 x2000000001632467 , ip =0 x40000000000b3fb1
pvfs2 - server (10885): unaligned access to 0 x2000000001632467 , ip =0 x40000000000b3fb1
pvfs2 - server (10885): unaligned access to 0 x2000000001632467 , ip =0 x40000000000b3fb1
pvfs2 - server (10885): unaligned access to 0 x2000000001632467 , ip =0 x40000000000b3fb1
[ D 06/30 19:38] PVFS2 Server : storage space created . Exiting .
[ root@io37 ~]# pvfs2 - server -f / etc / pvfs2 - fs . conf
[ S 06/30 19:39] PVFS2 Server on node io37 version 2.7.1 starting ...
[ D 06/30 19:39] PVFS2 Server : storage space created . Exiting .
[ root@io38 ~]# pvfs2 - server -f / etc / pvfs2 - fs . conf
[ S 06/30 19:39] PVFS2 Server on node io38 version 2.7.1 starting ...
[ D 06/30 19:39] PVFS2 Server : storage space created . Exiting .
[ root@io39 ~]# pvfs2 - server -f / etc / pvfs2 - fs . conf
[ S 06/30 19:39] PVFS2 Server on node io39 version 2.7.1 starting ...
[ D 06/30 19:39] PVFS2 Server : storage space created . Exiting .
[ root@io40 ~]# pvfs2 - server -f / etc / pvfs2 - fs . conf
[ S 06/30 19:39] PVFS2 Server on node io40 version 2.7.1 starting ...
[ D 06/30 19:39] PVFS2 Server : storage space created . Exiting .
59
Per avviare il server PVFS2 in maniera automatica allavvio della macchina, bisogna utilizzare
lo script di init fornito nei sorgenti di PVFS2:
[ root@leonardo ~]# cp / usr / src / pvfs2 / examples / pvfs2 - server . rc \\
/ etc / rc . d / init . d / pvfs2 - server
[ root@leonardo ~]# chmod + x / etc / rc . d / init . d / pvfs2 - server
[ root@leonardo ~]# cd / etc / rc runlevel | cut -d -f2 . d /
[ root@leonardo rc3 . d ]# ln -s ../ init . d / pvfs2 - server S50pvfs2 - server
[ root@leonardo ~]# cd / etc / rc0 . d /; ln -s ../ init . d / pvfs2 - server K50pvfs2 - server
[ root@leonardo ~]# cd / etc / rc6 . d /; ln -s ../ init . d / pvfs2 - server K50pvfs2 - server
OK
Ovviamente, `e necessario ripetere i suddetti comandi su tutti i server PVFS2 (in questo caso su
io37, io38, io39 e io40).
3.3.3
60
Nel file pvfs2tab, vengono memorizzati i vari mountpoint PVFS2, seguendo la stessa sitassi del
file /etc/fstab:
# PVFS2 I / O server ######### mountpoint # file system type # options
tcp :// leonardo :3334/ pvfs2 - fs / mnt / pvfs2
pvfs2
defaults , noauto 0 0
3.3.4
Una volta avviato il daemon client di PVFS2, occorre montare il file system:
[ root@compute -0 -0 ~]# mount -t pvfs2 tcp :// leonardo :3334/ pvfs2 - fs / mnt / pvfs2
[ root@compute -0 -0 ~]# mount | grep pvfs2
tcp :// leonardo :3334/ pvfs2 - fs on / mnt / pvfs2 type pvfs2 ( rw )
Per verificare il corretto funzionamento del sistema, si pu`o utilizzare il tool pvfs2-ping:
[ root@compute -0 -0 ~]# pvfs2 - ping -m / mnt / pvfs2
(1) Parsing tab file ...
(2) Initializing system interface ...
(3) Initializing each file system found in tab file : / etc / mtab ...
PVFS2 servers : tcp :// leonardo :3334
Storage name : pvfs2 - fs
Local mount point : / mnt / pvfs2
/ mnt / pvfs2 : Ok
(4) Searching for / mnt / pvfs2 in pvfstab ...
PVFS2 servers : tcp :// leonardo :3334
Storage name : pvfs2 - fs
Local mount point : / mnt / pvfs2
meta servers :
tcp :// leonardo :3334
data servers :
tcp :// io37 :3334
tcp :// io38 :3334
tcp :// io39 :3334
tcp :// io40 :3334
(5) Verifying that all servers are responding ...
meta servers :
61
Ok
Ok
Ok
Ok
NOTA: per la diversa configurazione dei nodi io37, io38, io39 e io40 (equipaggiati con CentOS
4.6 ), `e stato necessario modificare i file /etc/hosts di tutti i nodi del cluster, aggiungendo gli
hostname mancanti.
Un tool per verificare lo spazio disponibile nei vari server di PVFS2 `e pvfs2-statfs:
[ root@compute -0 -0 ~]# pvfs2 - statfs -H -m / mnt / pvfs2 /
aggregate statistics :
--------------------------------------fs_id : 25712395
total number of servers ( meta and I / O ):
handles available ( meta and I / O ):
handles total ( meta and I / O ):
bytes available :
bytes total :
5
9223372036854775790
9223372036854775800
109.0 G
109.0 G
NOTE : The aggregate total and available statistics are calculated based
on an algorithm that assumes data will be distributed evenly ; thus
the free space is equal to the smallest I / O server capacity
multiplied by the number of I / O servers . If this number seems
unusually small , then check the individual server statistics below
to look for problematic servers .
meta server statistics :
--------------------------------------server : tcp :// leonardo :3334
62
4.2 G
3.5 G
6 hours , 47 minutes
448 992 7072
1844674407370955150
1844674407370955160
4.4 G
7.8 G
metadata
I / O server statistics :
--------------------------------------server : tcp :// io37 :3334
RAM total
:
RAM free
:
uptime
:
load averages
:
handles available :
handles total
:
bytes available :
bytes total
:
mode : serving only
4.2 G
4.0 G
6 hours , 32 minutes
0 0 672
1844674407370955160
1844674407370955160
27.2 G
29.4 G
I / O data
4.2 G
4.0 G
6 hours , 35 minutes
0 0 32
1844674407370955160
1844674407370955160
27.2 G
29.4 G
I / O data
4.2 G
4.0 G
6 hours , 37 minutes
0 0 0
1844674407370955160
1844674407370955160
27.3 G
29.4 G
I / O data
: 4.2 G
: 4.0 G
3.4
63
6 hours , 40 minutes
0 0 0
1844674407370955160
1844674407370955160
27.3 G
29.4 G
I / O data
Benchmark di PVFS2
Per valutare le performance di PVFS2, `e necessario effettuare del benchmarking, che per`
o
risulta particolarmente complesso, in quanto riguarda lanalisi di file system e sistemi di storage.
Complesse interazioni tra i dispositivi di I/O, cache, kernel ed altri componenti del sistema
operativo hanno come risultato un comportamento che spesso risulta difficile da analizzare.
Inoltre, i sistemi hanno diverse caratteristiche ed ottimizzazioni, per cui, spesso, nessun singolo
benchmark risulta appropriato. A questa difficolt`a, si aggiunge anche il fatto che i sistemi,
durante lutilizzo di tutti i giorni, sono sottoposti ad una grande variet`a di carico.
Nonostante ci`
o, negli anni sono stati sviluppati numerosi tool per il benchmarking dei file
system. Fra quelli comunemente utilizzati in ambienti Unixlike vi sono [35]:
Bonnie++
IOR (Interleaved or Random)
IOzone
Bonnie++ `e una suite di benchmark che permette di eseguire diversi semplici test per misurare le performance di file system e harddisk. Questo tool permette di eseguire 2 tipologie
di operazioni: la prima viene utilizzata per misurare il throughput di I/O simulando luso di
unapplicazione che opera su database, mentre la seconda effettua dei test di creazione, lettura
e rimozione di molti file di piccola dimensione. Sebbene molto diffuso, Bonnie++ risulta utile
solo per testare file system locali e non risulta molto adatto per il benchmarking di cluster o
parallel file system.
IOR, al contrario, viene utilizzato per misurare le performance di parallel file system, visto
che `e in grado di simulare diversi pattern di accesso ai dati ed utilizza MPI per la sincronizzazione
dei processi. Inoltre, lI/O viene eseguito utilizzando le estensioni MPIIO.
IOZone `e un tool per il benchmarking di file system che genera una moltitudine di operazioni
sui file. Questo tool misura le performance di I/O per le seguenti operazioni: read, write, re
read, rewrite, read backwards, read strided, fread, fwrite, random read/write, pread/pwrite
variants, aio read, aio write ed mmap.
Oltre ai tool precedentemente citati, ne esistono diversi altri, ognuno volto a misurare particolari caratteristiche di un file system. In questo documento, comunque, si `e scelto di effettuare
una serie di test su PVFS2 ed NFS, ispirandosi agli stessi utilizzati in [35].
64
no test
Descrizione
Copia del tarball del kernel da una partizione esterna alla partizione di test
10
11
12
13
14
15
16
17
18
19
20
21
22
65
66
1020
PVFS2
960
900
840
780
720
Tempo [s]
660
600
540
480
420
360
300
240
180
120
60
0
1
10 11 12 13 14 15 16 17 18 19 20 21 22
Num. Test
Figura 3.14: Benchmark tra NFS e PVFS2 (2 I/O server) con 1 client.
67
NFS
1020
PVFS2
960
900
840
780
Tempo [s]
720
660
600
540
480
420
360
300
240
180
120
60
0
1
10 11 12 13 14 15 16 17 18 19 20 21 22
Num. Test
Figura 3.15: Benchmark tra NFS e PVFS2 (4 I/O server) con 1 client.
68
Tempo [s]
NFS
PVFS2
10 11 12 13 14 15 16 17 18 19 20 21 22
Num. Test
Figura 3.16: Benchmark tra NFS e PVFS2 (2 I/O server) con 2 client.
69
Tempo [s]
NFS
PVFS2
10 11 12 13 14 15 16 17 18 19 20 21 22
Num. Test
Figura 3.17: Benchmark tra NFS e PVFS2 (4 I/O server) con 2 client.
70
1020
960
900
840
780
Tempo [s]
720
660
600
540
480
420
360
300
240
180
120
60
0
1
10 11 12 13 14 15 16 17 18 19 20 21 22
Num. Test
71
Tempo [s]
10 11 12 13 14 15 16 17 18 19 20 21 22
Num. Test
72
NFS
1020
960
900
840
780
Tempo [s]
720
660
600
540
480
420
360
300
240
180
120
60
0
1
10 11 12 13 14 15 16 17 18 19 20 21 22
Num. Test
Figura 3.20: Benchmark tra NFS, PVFS2 (2 o 4 I/O server) con 1 client.
73
Tempo [s]
NFS
PVFS2 - 2 I/O server
PVFS2 - 4 I/O server
10 11 12 13 14 15 16 17 18 19 20 21 22
Num. Test
Figura 3.21: Benchmark tra NFS, PVFS2 (2 o 4 I/O server) con 2 client.
74
1 client: NFS, PVFS2 (2 I/O server), PVFS2 (4 I/O server) - Test 13..18
600
NFS
540
480
420
Tempo [s]
360
300
240
180
120
60
0
13
14
15
16
17
18
Num. Test
Figura 3.22: Benchmark tra NFS, PVFS2 (2 o 4 I/O server) con 1 client: particolare dei test
13..18.
75
2 client: NFS, PVFS2 (2 I/O server), PVFS2 (4 I/O server) - Test 13..18
1080
1020
NFS
960
900
840
780
720
Tempo [s]
660
600
540
480
420
360
300
240
180
120
60
0
13
14
15
16
17
18
Num. Test
Figura 3.23: Benchmark tra NFS, PVFS2 (2 o 4 I/O server) con 2 client: particolare dei test
13..18.
76
Bibliografia
Bibliografia
[1] Wikipedia: List of file systems
http://en.wikipedia.org/wiki/List_of_file_systems
[2] D.A. Heger, An Introduction to File System Technologies in a Cluster Environment,
Fortuitous Technology, Austin, TX, 2006
[3] Cluster File Systems, Inc., Selecting a Scalable Cluster File System, Nov 2005
[4] R. Latham, N. Miller, R. Ross, P. Carns, A NextGeneration Parallel File System
for Linux Clusters, Linux World, Gen 2004
[5] B. ONeill, File Systems: The state of the art, Storage Magazine, Nov 2005
[6] M.W. Margo, P.A. Kovatch, P. Andrews, B. Banister, An Analysis of Stateof
theArt Parallel File Systems for Linux, University of California, San Diego, CA, 2004
[7] IBM General Parallel File System (GPFS)
http://www-03.ibm.com/systems/clusters/software/gpfs/index.html
[8] S. Fadden, An Introduction to GPFS Version 3.2, IBM, Set 2007
[9] F. Schmuck, R. Haskin, GPFS: A Shared-Disk File System for Large Computing
Clusters, Proceedings of the FAST 2002 Conference on File and Storage Technologies,
Monterey, CA, Gen 2002
[10] A. Brunengo, General Parallel File System: caratteristiche, prestazioni ed esempi di
utilizzo in produzione, Presentazione al Workshop CCR, Otranto, Mag 2006
[11] Sun Microsystems LUSTRE wiki
http://wiki.lustre.org
[12] Wikipedia: Lustre file system
http://en.wikipedia.org/wiki/Lustre_%28file_system%29
[13] P. Braam, Lustre, Sun HPC Consortium, Nov, 2007
[14] Lustre File System White Paper, Dic, 2007
Bibliografia
77
[15] E. J. Felix, K. Fox, K. Regimbal, J. Nieplocha, Active Storage Processing in a Parallel File System, 6th LCI International Conference on Linux Clusters: The HPC Revolution,
North Carolina, Apr, 2005.
[16] Red Hat Global File System for RHEL 4.6, Nov, 2007
http://www.redhat.com/docs/manuals/csgfs/pdf/Global_File_System-4_6.pdf
[17] GFS 6.1 Administrators Guide, Mar, 2006
http://www.redhat.com/docs/manuals/csgfs/pdf/rh-gfs-en-6_1.pdf
[18] S. Liang, W. Yu, D. K. Panda, High Performance Block I/O for Global File System
(GFS) with InfiniBand RDMA, International Conference on Parallel Processing, Aug, 2006.
[19] K. W. Preslan, A. P. Barry, J. Brassow, R. Cattelan, A. Manthei, E. Nygaard, S. Van Oort, D. Teigland, M. Tilstra, M. OKeefe, G. Erickson, M.
Agarwal, Implementing Journaling in a Linux Shared Disk File System, Seventeenth
IEEE Symposium on Mass Storage Systems, pag. 351378, Mar, 2000
[20] M. Davini e I. Lisi, Cluster: uno sguardo ai filesystem distribuiti, Linux&C. #15, pag. 40
45, Apr, 2001
[21] M. OKeefe, P. Kennedy, Enterprise data sharing with Red Hat Global File System,
Red Hat Magazine #9, Lug, 2005
[22] Apache Hadoop Project
http://hadoop.apache.org/
[23] Hadoop Wiki
http://wiki.apache.org/hadoop/
[24] Wikipedia: Hadoop
http://en.wikipedia.org/wiki/Hadoop
[25] D. Borthakur, The Hadoop Distributed File System: Architecture and Design, 2007
[26] GlusterFS webpage
http://www.gluster.org
[27] GlusterFS User Guide v1.3
http://www.gluster.org/docs/index.php/GlusterFS_User_Guide_v1.3
[28] Clusters with GlusterFS video
http://videolectures.net/dc08_marinov_gfs/
[29] PVFS2 Development Team, A Quick Start Guide to PVFS2, 16 Apr 2008
[30] Parallel Virtual File System, version 2
http://www.pvfs.org/pvfs2/pvfs2-guide.html
78
Bibliografia
[31] R. Latham, R. Ross, R. Thakur, The Impact of File Systems on MPI-IO Scalability, in
Proceedings of the 11th European PVM/MPI Users Group Meeting, Budapest, Hungary,
2004
[32] PVFS2 download page
http://pvfs.org/download/
[33] Distribuzione Rocks Cluster
http://www.rocksclusters.org
[34] Distribuzione CentOS
http://www.centos.org
[35] J. Piszcz, Benchmarking Filesystems Part II,
http://linuxgazette.net/122/piszcz.html