11 Capitolo 1 - Introduzione 
1 - INTRODUZIONE 
 
Il presente documento descrive la realizzazione di un cluster di sistemi Linux per 
l’erogazione di un servizio NFS attraverso l’uso di una tecnologia sviluppata da Red 
Hat. Tutto questo è stato implementato in ambito virtuale, utilizzando come 
hypervisor KVM. 
 
Lo sviluppo di questo progetto è avvenuto durante un periodo di stage, della durata di 
quattro mesi, svolto nella sede centrale del Consiglio Nazionale delle Ricerche. Lo 
svolgimento di codesto stage è stato necessario per il conseguimento della laurea 
triennale in Ingegneria Informatica presso l’università di Roma ‘La Sapienza’. 
L’obiettivo dello stage è stato l’acquisizione di esperienza nella progettazione e 
realizzazione d’infrastrutture complesse di elaborazione in ambito gestionale. Il suo 
svolgimento ha previsto una fase iniziale di apprendimento delle tecnologie da 
utilizzare (Linux, KVM, Clustering, NFS) cui è seguita successivamente analisi, 
progettazione, implementazione e testing del sistema. 
 
Lo sviluppo di questo progetto ha riguardato, prima di tutto, lo studio dei sistemi 
Linux così da ottenere una maggiore familiarità con essi. Si è studiato in particolare 
il funzionamento della shell Linux. Dopodiché sono stati creati e configurati i sistemi 
virtuali e, su di essi, sono state affrontate delle problematiche relative alla rete, quali 
la configurazione delle interfacce di rete e la gestione del traffico dei dati tra le 
macchine virtuali. Dopo uno studio approfondito del concetto di cluster, e in 
particolare della tecnologia sviluppata da Red Hat, si è configurato l’ambiente 
virtuale in modo da poter lavorare in cluster. Il cluster non è altro che un sistema di 
due o più macchine che cooperano per fornire uno o più servizi. In questo progetto si 
è sviluppato un cluster di sole due macchine che lavorano in modalità Active – 
Passive. Di conseguenza solo una di esse eroga il servizio NFS mentre l’altra rimane 
in attesa di prenderlo in carico nell’eventualità che il primo vada in errore. Questo 
porta all’associazione del concetto di alta affidabilità al cluster sviluppato. Con alta 
affidabilità s’intende un sistema informatico che fornisce un servizio in maniera
12  
continuativa o comunque con un minimo di downtime. L’obiettivo di un tale sistema 
è di rendere il servizio costantemente utilizzabile dagli host che lo richiedono. Il 
servizio offerto quindi, si basa sul paradigma client-server. Il cluster, in particolare, è 
visto come un'unica entità da parte degli host cioè come una singola macchina. Il 
sistema operativo installato nelle macchine è stato CentOS, una distribuzione di Red 
Hat, che mantiene un’alta compatibilità con essa. Di conseguenza è stato possibile 
utilizzare la tecnologia sviluppata da Red Hat per il clustering, la Red Hat Cluster 
Suite. In base ad essa si è riuscito a configurare, tramite interfaccia web, il servizio di 
NFS. NFS sta per “Network File System” ed è un protocollo di rete utilizzato per 
condividere un file system (o una sua parte) tra più computer che appartengono a una 
stessa rete. E’ un protocollo che si basa sul paradigma client- server. In questo caso il 
cluster è il server che implementa tale protocollo. In questa maniera, tutti gli host che 
richiedono il servizio NFS (e che quindi sono i client del protocollo), possono 
accedere al filesystem esportato in rete come se fosse locale a essi e condividere tra 
loro file o directory. 
La struttura che si è data al presente documento è la seguente: Nel secondo capitolo 
viene data una prima spiegazione del concetto di clustering, viene descritto 
l’obiettivo che si vuole raggiungere, i problemi intrinsechi in un sistema di questo 
genere e le relative soluzioni. Infine viene analizzato il progetto più da vicino, 
specificando la struttura della rete e dello storage su cui il cluster si basa per fornire il 
proprio servizio. Nel terzo capitolo sono stati specificati i sistemi operativi installati 
nelle macchine virtuali e la conseguente tecnologia utilizzata per sviluppare il 
cluster. Nel quarto capitolo viene descritto, in maniera più specifica, quali sono i 
componenti software che fanno parte della tecnologia utilizzata per creare il cluster, 
il loro funzionamento e come si relazionano tra di loro. Nel quinto capitolo vengono 
descritti i vari passi che sono stati fatti per configurare l’ambiente virtuale in modo 
tale da poter lavorare in cluster. Nel sesto capitolo viene descritta la metodologia con 
cui il cluster deve essere creato e configurato tramite l’interfaccia web resa 
disponibile dalla tecnologia di Red Hat. Nel settimo capitolo vengono descritte le 
prove utilizzate per testare il cluster e i risultati ottenuti. Infine, nell’ottavo capitolo, 
viene descritto l’uso che verrà fatto di questo progetto da parte del Consiglio 
Nazionale delle Ricerche. In appendice si trova il file di configurazione del cluster. 
Esso rappresenta la situazione finale in cui si trova.
13 Capitolo 2 – Descrizione del progetto 
2 - DESCRIZIONE DEL PROGETTO 
 
2.1.  Scenario applicativo e obiettivo del progetto 
 
Il progetto sviluppato descrive la realizzazione di un cluster su sistemi Linux il cui 
scopo è di offrire un servizio di condivisione file via rete. 
Con il termine cluster s’intende un sistema di due o più computer, connessi tramite 
una rete locale, che lavorano congiuntamente come se rappresentassero un singolo 
sistema. 
Esistono varie tipologie di cluster che si differenziano in base di diversi criteri. 
 In base alle funzionalità offerte si distinguono: 
o Cluster per l’alta affidabilità (HA, High Availability) 
Per alta affidabilità s’intende la capacità di un sistema informatico di 
erogare un determinato servizio in modo continuo e quindi di essere 
costantemente utilizzabile dai propri utenti. 
o Cluster per il bilanciamento del carico (LB, Load Balancing) 
In questo caso l’obiettivo è di aumentare il throughtput del servizio 
cioè servire il maggior numero di richieste da parte degli utenti che si 
connettono al cluster. Il cluster è impostato in modo tale che, in base 
al numero di richieste ricevuto, distribuisce il carico di lavoro tra i 
vari computer in modo da farli lavorare in concomitanza
1
. 
o Cluster per alte prestazioni (HPC, High Performance Computing) 
E’ un cluster che esegue processi computazionalmente complessi e 
che richiedono molto tempo di elaborazione (calcoli scientifici o 
computer graphics). In tal caso, il processo è suddiviso in più sotto-
                                                 
 
1
 Cioè è svolto attraverso l’uso di vari algoritmi, ognuno con politiche diverse per la scelta della 
distribuzione del carico.
14 2.1 Scenario applicativo e obiettivo del progetto 
processi e ognuno di essi sarà eseguito in parallelo da un computer del 
cluster
2
. 
Un cluster può anche fornire una combinazione tra le suddette tipologie. 
 In base all’architettura hardware/software dei computer che lo compongono, 
si distinguono: 
o Cluster con architettura omogenea (hw/sw identico) 
o Cluster con architettura eterogenea (hw/sw diverso) 
 In base al tipo di storage che utilizzano, si distinguono: 
o Cluster shared-everything 
Tutta l’infrastruttura lavora su un’area comune di storage (es. SAN). 
In particolare, nel cluster è presente un componente software che si 
occupa esclusivamente di regolare l’accesso concorrente ai dati da 
parte dei computer, per evitare l’inconsistenza dei dati stessi. 
o Cluster shared-nothing 
Ogni computer lavora su una propria area di storage. In tal caso il 
componente software del cluster, adibito al controllo dell’accesso allo 
storage, si occuperà di mantenere aggiornati i dati tra i vari computer 
così da renderli sempre coerenti. 
Nel nostro caso il raggruppamento di questi computer, che in particolare sono 
chiamati nodi del cluster, ha come scopo quello di poter fornire un servizio ad alta 
disponibilità (cluster HA). 
Gli host che si connettono a un cluster per usufruire dei servizi che esso offre, sono 
indicati più comunemente come client del cluster. 
L’obiettivo del progetto è stato la realizzazione di un cluster che fornisse un servizio 
di NFS (Network File System) ad alta disponibilità. L’utente che richiede il servizio 
deve poter usufruire di esso in ogni momento, per tutto il tempo necessario e 
possibilmente senza interruzioni. Se per vari motivi il servizio non risulta 
disponibile, esso verrà ripristinato il prima possibile dal cluster stesso. 
                                                 
 
2
 Molti studi sono incentrati sulla teoria del calcolo parallelo e sulla sua ottimizzazione.
15 Capitolo 2 – Descrizione del progetto 
Lo scopo del cluster, infatti, è quello di far percepire il meno possibile la mancanza 
del servizio al client che lo ha richiesto. Il cluster interviene e risolve il problema 
senza rendere visibile questa disfunzione all’utente. 
Il funzionamento di un cluster HA può essere così riassunto. In generale, se un 
cluster è formato da N nodi, ognuno di essi può fornire un certo servizio. 
I servizi che un cluster può offrire sono molteplici. Oltre a quello di uno storage 
condiviso in rete, altri possono essere ad esempio: 
 Server Web 
 Server Mail 
 FTP 
 E-commerce 
 Caching dei nomi (associati agli utenti, agli IP, ecc.) 
 Database 
 Simulatori 
 Calcoli scientifici 
 Rendering, computer graphics 
Se uno di questi nodi ha un problema e non riesce più a fornire il servizio a lui 
assegnato, tale servizio è semplicemente spostato su un altro nodo il quale 
provvederà a fornire entrambi i servizi (il suo e quello preso in carico). 
Questo processo di spostamento del servizio tra due nodi è detto failover. In 
particolare, dal punto di vista del nodo che prende in carico il servizio, tale processo 
è detto più precisamente takeover. 
Ogni servizio si basa sull’utilizzo di varie risorse che possono essere ad esempio un 
indirizzo IP, un filesystem condiviso o locale, uno script, un database MySQL, ecc. 
Per consentire al cluster di eseguire il failover, queste risorse devono essere gestite 
dal cluster stesso e non dal sistema operativo dei nodi. 
Ci possono essere casi in cui alcuni nodi del cluster forniscono dei servizi mentre 
altri non ne forniscono nessuno. Questi ultimi, detti in particolare nodi di standby, 
rimangono in attesa di prendere in carico i servizi eseguiti dai nodi che 
eventualmente incontreranno dei problemi. 
I nodi che invece eseguono dei servizi, ed eventualmente sono pronti a compiere il 
takeover di altri, sono detti nodi di backup.
16 2.1 Scenario applicativo e obiettivo del progetto 
Quando è risolto il problema su un nodo che era andato in errore, si può decidere se 
il servizio che è stato spostato in precedenza debba tornare a essere eseguito sul nodo 
“originale” oppure continuare a essere fornito dal nodo che l’ha preso in carico. Il 
processo per cui un servizio torna a essere eseguito sul nodo originale è detto 
failback. 
Il processo di failover e di failback, così come tutte le altre operazioni svolte nel 
cluster, sono eseguite da un software di gestione del cluster. In base alle diverse 
tecnologie utilizzate per la realizzazione del cluster, il software di gestione è 
composto da diverse componenti che lavorano insieme rispettando determinate 
modalità d’interazione. 
L’approccio più comune con cui s’inizia ad affrontare il concetto del clustering è di 
creare cluster formati da soli due nodi. Questo perché è la dimensione minore che 
permette la ridondanza dei servizi
3
 e mantiene una semplicità di gestione del cluster. 
In genere però i cluster sono formati da molti più nodi, secondo le esigenze da 
soddisfare. 
Nel caso di cluster di due nodi, esistono due possibili tipi di configurazioni dette 
Active – Passive o Active – Active. La prima indica che un nodo è attivo, cioè 
fornisce uno o più servizi mentre l’altro è in standby. La seconda invece indica che 
entrambi i nodi che formano il cluster forniscono uno o più servizi. 
Come già è stato detto, il servizio offerto dal cluster è un filesystem condiviso in rete 
secondo la tecnologia NFS. Essa si basa sul fatto che uno dei nodi del cluster 
“monta” nel proprio sistema un filesystem che risiede in uno storage condiviso da 
entrambi (il cluster quindi è in configurazione shared-everything). Tale filesystem 
sarà reso accessibile ai client attraverso la rete. Ogni client, per accedere al 
filesystem e utilizzarlo per i propri scopi, deve collegarsi al cluster attraverso 
l’indicazione di un indirizzo IP
4
. Collegandosi a tale IP riesce a utilizzare il 
filesystem come se fosse locale al proprio sistema
5
. 
                                                 
 
3
 Cioè se il servizio non può essere fornito da un nodo, ne esiste almeno un altro pronto a farlo al suo 
posto. 
4
 Essendo l’NFS un servizio basato sulla rete. 
5
 Questo è uno dei motivi principali per cui si utilizza la tecnologia NFS.
17 Capitolo 2 – Descrizione del progetto 
In realtà, il client non si connette propriamente al nodo che fornisce il servizio NFS 
(detto in particolare nodo server) ma al cluster in generale
6
. Questo perché il client 
non conosce l’infrastruttura che c’è dietro alla fornitura del servizio richiesto, non sa 
come funziona e quale nodo sta fornendo il servizio. Esso pensa di interagire con una 
singola macchina e non con un insieme di macchine messe in cluster. Per questo il 
cluster, dal lato del client, è percepito come fosse una singola entità
7
. 
 
                                                 
 
6
 Ciò sarà spiegato più dettagliatamente nel paragrafo 2.4. 
7
 Tale proprietà del cluster è detta SSI (Single System Image).
18 2.2 Problematiche e successive considerazioni 
2.2 Problematiche e successive considerazioni 
 
Il sistema informatico da realizzare deve fornire la capacità di fault-tolerance 
nell'erogazione di un servizio. L'obiettivo (teorico) di un sistema ad alta affidabilità è 
di garantire la disponibilità del servizio 24x7 (24 ore su 24, 7 giorni su 7). Nella 
realtà ciò non è del tutto possibile. Attraverso ingenti investimenti economici è 
possibile avvicinarsi a tale obiettivo ma comunque ci sarà sempre qualche caso in cui 
il servizio potrebbe interrompersi. 
Ad esempio, ciò potrebbe avvenire a causa di: 
 Guasti dell’hardware 
 Malfunzionamenti del Sistema Operativo o delle applicazioni 
 Interventi di manutenzione (pianificati o no) 
 Errori umani 
In genere i requisiti che un sistema ad alta affidabilità deve soddisfare sono legati al 
tempo di disponibilità di un servizio, alle prestazioni globali del sistema e alla sua 
economicità. 
Naturalmente il requisito sulla disponibilità è quello che maggiormente caratterizza 
un sistema informatico altamente disponibile. 
2.2.1 I livelli di disponibilità 
Essi potrebbero essere schematizzati in livelli concentrici, dall’implementazione più 
semplice a quella più complessa. Ad esempio: 
 Livello 1: Disponibilità normale 
L'unica protezione contro l'interruzione del servizio è data dal backup dei dati, 
fatta a discrezione dell'amministratore del sistema. In caso di errore, la ripresa 
dell'erogazione del servizio avverrà solamente dopo il ripristino dei dati del 
backup. Inoltre è possibile che siano ripristinati dati relativamente aggiornati e 
ciò dipende dalla frequenza con cui si esegue l'operazione di backup. Il tempo 
che intercorre tra l'interruzione del servizio e il suo riavvio dipende quindi dai 
"tempi umani" legati all'attività dell'amministratore di sistema.
19 Capitolo 2 – Descrizione del progetto 
 Livello 2: Mirror dello storage 
In tal caso, lo scopo del sistema è la protezione dei dati "nel miglior 
aggiornamento possibile" cioè riguardo quelli più recenti. Ciò è realizzato 
attraverso il mirroring fisico dei dischi utilizzando la tecnologia RAID. Essa è 
una delle soluzioni più economiche per aumentare la tolleranza all'errore per 
l'accesso ai dati. Utilizzando questo livello di disponibilità, il sistema riesce a 
mantenere sempre aggiornati i dati e a ripristinarli (anche a “caldo”) nel caso di 
danni su un dispositivo di memorizzazione. 
 Livello 3: Cluster HA 
Questo livello garantisce la protezione del sistema e dell'erogazione dei servizi. 
 Livello 4: Disaster recovery 
Questo livello è un'evoluzione dell'HA e risulta lo "sforzo massimo" per ottenere 
la continuità di un servizio. Prevede la completa replica del sistema in un'altra 
area geografica più o meno distante dalla prima (ad esempio nello stesso edificio 
o in un altro), a seconda del livello di fault-tolerance che si vuole implementare. 
Con tale soluzione in breve tempo si è di nuovo operativi. 
Naturalmente, più la soluzione è complessa e più la sua implementazione è costosa. 
La scelta di quale soluzione utilizzare dipende dalle esigenze dell’azienda 
nell'erogazione dei propri servizi
1
. 
Il nostro caso naturalmente riguarda il livello 3. 
2.2.2 Storage e integrità dei dati 
Lo storage comprende i dispositivi e i filesystem utilizzati per la memorizzazione dei 
dati condivisi dai nodi. 
I dispositivi di storage, come già è stato descritto, possono essere: 
                                                 
 
1
Ad esempio, se la maggior parte degli introiti di un’azienda sono dati dalla pubblicità, un fermo di un 
ora gli porterebbe via molto denaro. In tal caso per l'azienda ha senso spendere molti soldi (anche di 
più di quelli che perde per l'indisponibilità del servizio) per strutturare un livello di fault-tolerance 
adeguato.
20 2.2 Problematiche e successive considerazioni 
 Locali ai singoli nodi, con replicazione dei dati in tempo reale o a intervalli 
regolari di tempo 
 Condivisi, fisicamente
2
 o tramite rete 
Uno storage condiviso solitamente è preferibile a uno storage replicato. Per quelli 
che si basano sulla rete, le tecnologie utilizzabili sono NAS (Network-Attached 
Storage) e SAN (Storage Area Network). Le SAN possono essere realizzate con 
Fiber Channel, con ISCSI (Internet SCSI) o IFCP (Internet Fiber Channel Protocol) 
oppure attraverso una rete Ethernet basata sul protocollo AoE (Ata Over Ethernet). 
I dispositivi di storage in genere sono utilizzati in configurazione ridondata per 
poterne aumentare l’affidabilità (configurazioni RAID). 
Per quanto riguarda i filesystem invece è possibile utilizzare filesystem tradizionali, 
filesystem di rete (NFS o CIFS) o addirittura filesystem pensati esclusivamente per i 
cluster (Veritas, GFS, StoreNext). 
Per semplificare la loro gestione spesso si utilizzano sistemi di gestione dei volumi 
logici. Tramite essi è possibile facilitare l’aggregazione, il ridimensionamento, la 
replicazione ed il backup delle aree di storage (volumi). 
Infine per quanto riguarda l’integrità dei dati, aspetto molto importante 
indipendentemente dall’HA o meno, a livello di filesystem il pericolo di 
danneggiamento dei dati può essere risolto tramite il journaling, che consente di 
ripristinare una situazione consistente in seguito ad un crash del sistema, oppure 
tramite il locking, che consente di ridurre i rischi di inconsistenza relativi ad accesi 
concorrenti sui dati dello storage. 
Il cluster utilizza un meccanismo di locking. 
Il progettare bene un sistema HA sta anche nello studio preventivo di tutte queste 
problematiche. Ciò permette di definire bene le attese e il reale utilizzo che si farà del 
sistema. 
                                                 
 
2
 Tipico per un cluster di due nodi perché altrimenti i collegamenti fisici sarebbero molti.
21 Capitolo 2 – Descrizione del progetto 
2.2.3 Misura della disponibilità 
Il concetto di disponibilità di un servizio può essere formalizzato attraverso la misura 
di vari aspetti. Con MTBF (Mean Time Between Failure) s’indica il tempo medio di 
funzionamento di un sistema prima che avvenga un guasto, cioè indica la sua 
affidabilità. Con MTTR (Mean Time To Repair) s’indica il tempo medio di 
downtime (periodo in cui il servizio non è in funzione) a seguito di un 
malfunzionamento del sistema. Detto ciò, la disponibilità di un sistema, indicata con 
A, si può formalizzare come: 
  
    
         
 con A ∈ [0,1] 
In pratica, A misura il tempo di corretto funzionamento di un sistema (uptime). La 
certezza di ottenere un servizio totalmente affidabile (A=1) non può esserci per i vari 
motivi descritti in precedenza. Nella realtà si ha che un servizio è disponibile per 
A=0.9, A=0.99, ecc. Questo introduce un altro tipo di misura che si basa sul numero 
dei 9. Essa indica la percentuale di uptime annuale di un servizio. Tale percentuale si 
ottiene moltiplicando A per 100. Ad esempio: 
Tabella 2.2.33.1 Misura della disponibilità di un servizio HA 
n° di 9 Uptime Tempo di downtime associato 
1 90,00000% 37 giorni 
2 99,00000% 3,7 giorni 
3 99,90000% 8,8 ore 
4 99,99000% 53 minuti 
5 99,99900% 5,3 minuti 
6 99,99990% 32 secondi 
7 99,99999% 3 secondi 
 
Il compito di chi crea un cluster altamente affidabile è quello di rendere 
l'infrastruttura in grado di ottenere il minimo tempo di disservizio possibile. Per fare 
ciò bisogna conoscere bene quali sono i problemi che intervengono negativamente 
nell'erogazione dei servizi, nella gestione dell'infrastruttura e nell'utilizzo delle 
risorse. 
La strategia che consente di raggiungere un elevato livello di disponibilità consiste 
innanzitutto nell'eliminazione degli SPOF.