apr 222011
 

Quando si ha a che fare con più server, sicuramente prima o poi nascerà l’esigenza di avere un unico posto dove salvare i propri dati, in modo da poterci accedere contemporaneamente da più server. Questo è uno dei problemi più difficili da affrontare quando si progetta un sistema di server, in quanto esistono moltissimi metodi per arrivare allo scopo ma ciascuno ha le sue peculiarità che lo rendono più o meno adatto ad essere sfruttato in determinate applicazioni.
Diciamo che fare un confronto non è cosa semplice, anche perchè in alcuni casi è possibile avere situazioni ibride di due sistemi concatenati (ad es. NFS su GlusterFS)

NFS
NFS è il sistema di condivisione file classico del modo Unix: è senza ombra di dubbio il più usato, il più conosciuto ed il più semplice da implementare. Per quanto riguarda il funzionamento, il server NFS ha accesso ad uno spazio fisico a blocchi che può essere formattato utilizzando un qualsiasi FileSystem con funzionalità POSIX. Il server NFS ha il compito di gestire l’accesso contemporaneo ai dati contenuti all’interno del dispositivo a blocchi, oltre ovviamente a gestire i permessi utente. I client NFS (gli altri server della rete) potranno montare la directory condivisa (in gergo esportata) come se fosse un disco locale, un po’ come avviene con la condivisione di windows CIFS/SAMBA.
I punti a favore di questo sistema sono senza dubbio la facilità di implementazione, la stabilità del protocollo e, tutto sommato, discrete velocità di rete.
I punti debili di questo sistema sono la totale impossibilità di scalare “on line” aggiungendo nuovo storage nel momento in cui se ne ha la necessità, il fatto di avere un SPoF (Single Point of Failure) costituito dal server NFS che è suscettibile a guasti e che rischia di sovraccaricarsi in maniera considerevole all’aumentare di richieste di rete.

OCFS2 e GFS
OCFS2 e GFS sono due FileSystem concettualemente simili in quanto prevedono nativamente l’accesso contemporaneo ai file: OCFS2 è sviluppato da Oracle mentre GFS2 è sviluppato da RedHat. La teoria di funzionamento è identica: ogni server che ha accesso allo storage deve avere attivo un demone che dialoga continuamente con gli altri server in modo da conoscere esattamente lo stato dello storage. Il disco condiviso viene montato in locale deve essere formattato con il suo filesystem, non è possibile utilizzare un filesystem tradizionale (ext3, xfs, ecc); la cosa interessante è che, trattandosi della formattazione di un disco, questo può essere di qualsiasi tipo, basta che sia accessibile da tutti i server: quindi può essere un disco di rete iSCSI o AoE, ma anche una partizione locale replicata su un secondo server attraverso DRBD8 configurato in modalità Attivo/Attivo o un disco FireWire collegato a più server.
Da un confronto tra i due filesystem, GFS è il più semplice da configurare dato che utilizza i tools di alta affidabilità di RedHat, mentre OCFS2 è più macchinoso. OCFS2 è però nettamente più veloce anche se non supporta le quote in nessun modo (è una delle cose in implementazione).
I maggiori pregi di questo sistema è che non serve un server che faccia da tramite e quindi non si ha un SPoF e le prestazioni sono le migliori in assoluto (specie con OCFS2).
Il difetto principale, deriva direttamente dal pregio: non avendo un server che gestisce la condivisione dei file, ogni nuovo nodo che entra a far parte del cluster comporta un riconfigurazione di tutto il cluster. Anche la scalabilità del sistema è relativa: anche ammettendo di avere un dispositivo di storage che consente di “aggiungere dischi”, è necessario eseguire un resize della partizione con rischi, annessi e connessi.

I figli di FUSE
FUSE è l’acronimo di File System in Userspace ed è un nuovo metodo di utilizzo di dispositivi di rete. Molti filesystem di nuova generazione utilizzano questo sistema per gestire i dischi di rete. L’utilizzo di un ulteriore layer per la comunicazione tra disco e client va nella direzione opposta rispetto all’utilizzo di un filesystem cluster come OCFS2 o GFS, cosa che porta una maggiore flessibilità e stabilità a discapito di una leggera perdita in termini di prestazioni.
Analizziamo due filesystem che fanno affidamento a FUSE: GlusterFS e MooseFS.

GlusterFS
GlusterFS è un filesystem che in questo momento va molto “di moda”. Consente di unire più “commodity computer” per realizzare un cluster di storage server: è possibile realizzare uno stripe (unire lo storage di più server, simile concettualmente al raid 0) o un mirror (avere lo stesso dato copiato su più server, simile concettualmente al RAID 1). Lo storage ove viene creato il filesystem Gluster è, come per NFS, un filesystem comune (EXT3, XFS, ecc,)
Una volta creato lo storage, è possibile accedevi sia utilizzando il protocollo NFS, sia il protocollo CIFS (Samba), sia, come dicevo pocanzi, usando il protocollo nativo attraverso FUSE: questo sistema è quello che garantisce le migliori performance.
Il pregio maggiore di questo protocollo è a mio avviso che non esiste alcun SPoF: tutti i server sono autoritativi allo stesso modo, quando un client monta la partizione attraverso FUSE seve specificare un server, ma poi la comunicazione avviene direttamente con tutto il cluster. Altro pregio è la diffusione: essendo molto diffuso e mantenuto, è anche molto stabile.
Il difetto maggiore a mio avviso è la complessità concettuale: Gluster è formato da tanti layer ciascuno dei quali assove una sua funzione: comprenderli e tarali non è semplicissimo e l’ordinaria manutenzione (aggiungere un nodo ecc.) è spesso fonte di problemi. Le prestazioni del sistema sono buone in lettura se configurato in modalità mirror (le letture possono avvenire contemporaneamente da più nodi), però in scrittura non sono esaltanti.

MooseFS
Operativamente è simile a GlusterFS in quanto condivide FUSE per il montaggio dei dischi in rete, MooseFS è però diverso in quanto a sistema di gestione che lo rende simile a Openstack Swift. In Moose, a differenza di Gluster, i nodi non sono paritetici, ma si compone di un Master Server, un Metalogger server (che può essere promosso a Master in caso di guasto) e di X nodi dati.
Il Master fa da Proxy e conosce esattamente dove sono salvati i dati all’interno dei nodi dati; i dati possono essere replicati su un numero arbitrario di zone in modo da avere sia un sistema tollerante ai guasti sia un sistema di lettura parallelo. Purtroppo, al contrario di OpenStack Swift, anche le scritture avvengono in parallelo, cosa che di fatto lo rende un po’ lento in questo frangente.
Due cose interessanti di questo FileSystem sono l’interfaccia web per il controllo dello stato del cluster e il plugin appena rilasciato per l’integrazione diretta con OpenNebula.
Il principale pregio di questo sistema è la facilità di implementazione e di scalabilità, unita a una velocità generale di tutto rispetto.
Il principale difetto è la quantità di server necessari ad implementare un sistema funzionante: almeno 3 per ambienti di test, almeno 5 per ambienti in produzione.

Ceph
Ceph è l’ultimo Filesystem che prendiamo in considerazione. Diciamo che promette bene e, non a caso, è stato già introdotto nella mainline del kernel linux. Ultima cosa che mi sarei aspettato, quindi, è di avere problemi di sorta, cosa che puntualmente è avvenuta cercando di creare un ambiente misto di nodi a 32 e a 64 bit.
Concettualmente è simile a MooseFS, però introduce due feature interessanti: il driver nel kernel è in grado di lavorare a diretto contatto con lo storage del cluster, senza quindi necessitare di FUSE, pertanto dovrebbe garantire prestazioni superiori; inoltre introduce un proxy in grado di esporre una interfaccia REST API compatibile con Amazon S3.
Diciamo che è ancora un prodotto giovane e, a causa delle limitazioni di gioventù, non ho potuto sperimentarlo in maniera approfondita, peranto ritornerò a provarlo sicuramente in futuro.

apr 042011
 

Quando abbiamo la necessità di collegare uno storage a blocchi ad una batteria di server, ci viene spontaneo soffermarci sul protocollo iSCSI.
Questo protocollo permette di incapsulare le istruzioni SCSI su una connessione IP e promette di raggiungere prestazioni simili a SAN in Fibre Channel ad un costo nettamente inferiore. Il protocollo è largamente diffuso sia sul mondo Linux, sia sul mondo proprietario (VMWare, Windows, ecc).
iSCSI, però, manifesta i sui limiti in caso di intenso traffico in quanto carica la CPU del server durante le operazioni di incapsulamento e decapsulamento dei pacchett SCSI nel/dal pacchetto IP. Quando il traffico aumenta, quindi, per mantenere prestazioni adeguate si rende necessario acquistare costose schede ethernet dedicate in grado di compiere direttamente questa operazione, senza caricare la CPU dello storage.

Se la nostra SAN dovrà servire esclusivamente sistemi Linux, però, c’è una valida alternativa ad iSCSI: AoE.
AoE è l’acronimo di ATA over Ethernet ed è un protocollo concettualmente simile all’iSCSI, però molto più “light”: basti solo pensare che l’intera specifica del protocollo risiede in sole 9 pagine!
AoE è in grado di inviare direttamente i comadi ATA su Ethernet, senza però incapsularli all’interno di un pacchetto IP, pertanto l’overhead del protocollo iSCSI con l’annesso maggior carico della CPU viene scongiurato: le comunicazioni avvengono sfruttando direttamente il MAC Address, pertanto hanno il limite (che non ha iSCSI) di non essere routabili.
In caso di più device all’interno della stessa rete, il protocollo AoE permette di identificarli assegnando due valori: shelf e slot che sono assegnabili liberamente alla creazione del device, ma che concettualmente sono simili all’idea dell’identificativo del disco (shelf) e della partizione (slot).

Qualsiasi distribuzione linux è adatta ad utilizzare questo protocollo: l’introduzione a livello kernel è arrivata già con la release 2.6.11 e due pacchetti (vblade e aoetools) permettono di gestire il protocollo.

Configurazione di uno storage AoE
Sul server che fungerà da storage (in gergo chiamato “target”) è necessario installare il pacchetto vblade che permette di trattare i device AoE analogamente al Coraid Etherdrive. Una volta installato il pacchetto, è necessario esportare il drive; ad esempio:

./vbladed 0 0 eth0 /dev/sda4

Così facendo, esporteremo il disco /dev/sda4 attraverso l’interfaccia di rete eth0 assegnando lo shelf 0 e lo slot 0. Il comando restituirà in output una striga simile alla seguente:

pid 12905: e0.0, 436614507 sectors

Questa indica il PID del processo (12905), il valore di shelf e slot (e0.0) e il numero di settori del disco esportato.

 

Configurazione di un client AoE
Per collegarsi ad un disco esportato attraverso un client linux, innanzi tutto è necessario caricare il modulo del kernel con:

modprobe aoe

Quindi, per montare il disco nello userspace, bisogna installare il paccheto aoetools. Con il seguente comando è possibile eseguire una scansione della rete per identificare i drive AoE e creare automaticamente il device:

aoe-discover;aoe-stat

Seguendo il nostro esempio, troverete un nuovo device in /dev/etherd/e0.0

A questo punto potete formattare il disco e montarlo proprio come se si trattasse di un disco locale:

mkfs.ext3 /dev/etherd/e0.0;mount /dev/etherd/e0.0 /mnt

Per semplicità ho usato ext3, nulla vieta ovviamente di utilizzare un filesystem cluster come ocfs2 o gfs e montare il disco su più client.

mar 162011
 

Riprendiamo il filone dei test di velocità con ab per capire la differenza che intercorre tra apache ed nginx per servire contenuti statici. Questo è per far capire quanto si migliorano le prestazioni di un sito utilizzando il sistema descritto in questo articolo. I parametri dell’ambiente di test sono gli stessi dell’articolo precedente.

Caso 1

Filesystem: ext3 locale
Contenuto servito tramite Apache
Richieste contemporanee: 10

Time taken for tests:   3.670543 seconds
Requests per second:    272.44 [#/sec] (mean)
Time per request:       36.705 [ms] (mean)
Time per request:       3.671 [ms] (mean, across all concurrent requests)
Transfer rate:          1368.73 [Kbytes/sec] received

Caso 2

Filesystem: ext3 locale
Contenuto servito tramite nginx
Richieste contemporanee: 10

Time taken for tests:   0.689000 seconds
Requests per second:    1451.38 [#/sec] (mean)
Time per request:       6.890 [ms] (mean)
Time per request:       0.689 [ms] (mean, across all concurrent requests)
Transfer rate:          7354.14 [Kbytes/sec] received

Caso 3

Filesystem: DRBD 8/OCFS2
Contenuto servito tramite nginx
Richieste contemporanee: 10

Time taken for tests:   4.439284 seconds
Requests per second:    225.26 [#/sec] (mean)
Time per request:       44.393 [ms] (mean)
Time per request:       4.439 [ms] (mean, across all concurrent requests)
Transfer rate:          1133.07 [Kbytes/sec] received

Da questi testi si evince che la velocità di nginx nel servire contenuti statici rispetto ad apache è notevole, però il filesystem DRBD/OCFS2 è comunque il “collo di bottiglia” della configurazione, cosa che nei test precendenti sui contenuti dinamici non appariva. Seppur da questi test non appaia evidente il beneficio che si ha adottando nginx rispetto ad apache per servire i contenuti statici, questo appare evidente se, durante i test, si lancia sul server il comando “top”: il carico di lavoro sul server prodotto da nginx rispetto ad apache è notevolemte inferiore, per cui visto che i nostri siti si compongono sia di parti statiche sia di parti dinamiche, serverndo i contenuti statici con il “caso 3″ inceve che con il “caso 1″ non si ha un aumento di prestazioni sui singoli contenuti statici, ma lo si ha sulla stabilità del webserver in quanto si lasciano libere più risorse.

mar 152011
 

Faccio seguito agli articoli sui diversi metodi di configurazione del web server per esporvi alcune statistiche realizzate attraverso il comando ab sulla home page di un sito WordPress particolarmente pesante ed esoso di risorse, utilizzando i diversi metodi di esecuzione di php, diversi filesystem e diverse distibuzioni Linux.

Il comando ab permette di calcolare i tempi medi di download di una pagina web settando il numero di richieste totali e la contemporaneità delle stesse. L’ambiente di test prevede una macchina virtuale dedicata su VMWare esxi con assegnati 4 GB di Ram e 4 core CPU. L’hardware fisico è un server Dell PowerEdge R410 con due CPU Xeon E5520 QuadCore a 2.27 GHz. La macchina ospita localmente solo il server Web Apache/PHP, mentre il database MySQL è su un secondo server accessibile sempre in rete locale. Il PC su cui viene lanciato il comando ab è in rete locale e si richiedono 1000 pagine con una contemporaneità di 10 (tranne il caso 9).

(valore più basso, risultato migliore)

 

Caso 1: la situazione iniziale da migliorare

Distribuzione: CentOS 5.5
Posizione file PHP: SAN in rete locale 1 Gbit con FileSystem OCFS2
Metodo di esecuzione PHP: SuPHP
Plugin WordPress attivi: moltissimi tra cui nextgen gallery e WassUp

Time taken for tests:   221.287876 seconds
Requests per second:    4.52 [#/sec] (mean)
Time per request:       2212.879 [ms] (mean)
Time per request:       221.288 [ms] (mean, across all concurrent requests)
Transfer rate:          2.15 [Kbytes/sec] received

Caso 2

Distribuzione: CentOS 5.5
Posizione file PHP: SAN in rete locale 1 Gbit con FileSystem OCFS2
Metodo di esecuzione PHP: mod_PHP
Plugin WordPress attivi: moltissimi tra cui nextgen gallery e WassUp

Time taken for tests:   167.713406 second
Requests per second:    5.96 [#/sec] (mean)
Time per request:       1677.134 [ms] (mean)
Time per request:       167.713 [ms] (mean, across all concurrent requests)
Transfer rate:          2.84 [Kbytes/sec] received

Caso 3

Distribuzione: CentOS 5.5
Posizione file PHP: SAN in rete locale 1 Gbit con FileSystem OCFS2
Metodo di esecuzione PHP: mod_PHP
Plugin WordPress attivi: nessuno

Time taken for tests:   78.987 seconds
Requests per second:    12.66 [#/sec] (mean)
Time per request:       789.875 [ms] (mean)
Time per request:       78.987 [ms] (mean, across all concurrent requests)
Transfer rate:          3.97 [Kbytes/sec] received

I primi 3 test riguardano esclusivamente un ambiente di test standard in cui modifichiamo prima il metodo di esecuzione di PHP passando dal “comodo” suPHP al più performante mod_PHP in modalità prefork (non multithreading, quindi). Il miglioramento di prestazioni si evidenzia, così come “predetto” nel precedente articolo: 6 decimi di secondo per ogni richiesta. Con il test 3, abbiamo disabilitato tutti gli esosi plugin di wordpress e si può notare come le prestazioni aumentino in maniera considerevole su scala di valori immensamente più grande (1,5 secondi a pagina), segno che comunque un buon sistemista non può fare miracoli se il codice da eseguire non è ottimizzato per la velocità.
Purtroppo non possiamo prescindere dall’utilizzo degli esosi plugin di WordPress, per cui proviamo a vedere se cambiando distribuzione le cose migliorano.

Caso 4: come caso 1 con diversa distribuzione

Distribuzione: Gentoo Linux
Posizione file PHP: SAN in rete locale 1 Gbit con FileSystem OCFS2
Metodo di esecuzione PHP: SuPHP
Plugin WordPress attivi: moltissimi tra cui nextgen gallery e WassUp

Time taken for tests:   198.396024 seconds
Requests per second:    5.04 [#/sec] (mean)
Time per request:       1983.960 [ms] (mean)
Time per request:       198.396 [ms] (mean, across all concurrent requests)
Transfer rate:          1.37 [Kbytes/sec] received

Bene, un ambiente “su misura” come quello creato da una distribuzione in cui si compila ogni singolo elemento porta i suoi frutti: circa 2 decimi di secondo in meno a richiesta per un totale di 20 secondi sullo svolgimento del test. Da notare che nel caso di Gentoo, abbiamo attivo anche il sistema Grsecurity che comunque rallenta leggermente i processi, mentre su CentOS abbiamo disabilitato SELinux.

Caso 5: come caso 4 ma con mmm_itk
Distribuzione: Gentoo Linux
Posizione file PHP: SAN in rete locale 1 Gbit con FileSystem OCFS2
Metodo di esecuzione PHP: Apache ITK
Plugin WordPress attivi: moltissimi tra cui nextgen gallery e WassUp

Time taken for tests:   182.14380 seconds
Requests per second:    5.49 [#/sec] (mean)
Time per request:       1820.144 [ms] (mean)
Time per request:       182.014 [ms] (mean, across all concurrent requests)
Transfer rate:          1.49 [Kbytes/sec] received

Il passaggio da suPHP ad Apache compilato in modalità ITK permette di guadagnare altri 2 decimi a richiesta, mantenendo quindi un ambiente del tutto similare per l’utente a quello iniziale con CentOS/suPHP. Non si hanno le prestazioni del mod_php su CentOS (mancano ancora 2 decimi), però la situazione non è poi così diversa e… meglio perdere 2 decimi e guadagnare un cliente!
Abbimo preso per buono il fatto che i file php del sito stiano su una SAN accessibile via rete. Vediamo come si influenzano i tempi spostando i file php in locale ed utilizzando diversi filesystem.

Caso 6

Distribuzione: Gentoo Linux
Posizione file PHP: locale con filesystem ext3
Metodo di esecuzione PHP: Apache ITK
Plugin WordPress attivi: moltissimi tra cui nextgen gallery e WassUp

Time taken for tests:   147.679954 seconds
Requests per second:    6.77 [#/sec] (mean)
Time per request:       1476.799 [ms] (mean)
Time per request:       147.680 [ms] (mean, across all concurrent requests)
Transfer rate:          1.84 [Kbytes/sec] received

Niente da dire, siamo sulla strada giusta. Seppure la SAN sia in rete locale a 1 Gbit, le prestazioni di un filesystem locale sono nettamente superiori guadagnando ben 4 decimi a pagina rispetto al test 5. Seppure questa soluzione rappresenti un buon passo in avanti è però impossibile da utilizzare in produzione in quanto non garantisce il funzionamento in caso di guasto del server; inoltre un sistema in alta affidabilità (acceso/spento) non ci garantisce nel caso di intenso traffico sul sito per cui vogliamo avere almeno due server web in load balancing. Dobbiamo quindi dotare il filesystem locale di un sistema di replica in modo che sia disponibile in due diversi server.

Caso 7

Distribuzione: Gentoo Linux
Posizione file PHP: locale con filesystem GlusterFS
Metodo di esecuzione PHP: Apache ITK
Plugin WordPress attivi: moltissimi tra cui nextgen gallery e WassUp

Time taken for tests:   467.476497 seconds
Requests per second:    2.14 [#/sec] (mean)
Time per request:       4674.765 [ms] (mean)
Time per request:       467.477 [ms] (mean, across all concurrent requests)
Transfer rate:          0.58 [Kbytes/sec] received

Decisamente non ci siamo. Nonostante Gluster ci permetta di accedere localmente ai file e di replicarli tra di loro, il sistema impiega ad eseguire il test un tempo due volte maggiore rispetto alla situazione iniziale. Proviamo quindi ad usare un filesystem cluster come OCFS2 e DRBD 8 configurato in modalità attivo-attivo:

Caso 8

Distribuzione: Gentoo Linux
Posizione file PHP: locale con DRBD su filesystem OCFS2
Metodo di esecuzione PHP: Apache ITK
Plugin WordPress attivi: moltissimi tra cui nextgen gallery e WassUp

Time taken for tests:   149.53515 seconds
Requests per second:    6.71 [#/sec] (mean)
Time per request:       1490.535 [ms] (mean)
Time per request:       149.054 [ms] (mean, across all concurrent requests)
Transfer rate:          1.82 [Kbytes/sec] received

Bene, DRBD 8 in modalità attivo-attivo e il filesystem OCFS2 utilizzato inizialmente sulla SAN iSCSI portano a delle velocità paragonabili a quelle del filesystem locale e alla fine migliori di circa 8 decimi di secondo rispetto alla situazione iniziale. Il sistema evidentemente è meno scalabile in quanto con un filesystem su SAN possiamo aggiungere infiniti nodi di calcolo in load balancing, mentre con DRBD siamo limitati a 2 nodi; questa mancanza di scalabilità migliora di 4 decimi l’output della pagina rispetto al caso 5: non si può dire se è meglio la soluzione 5 o la 8, ciascuno deve trarre le proprie conclusioni in base al tipo di servizio che deve offrire.
Inoltre c’è da dire che l’installazione di wordpress presa in esame è particolarmente pesante e lenta. Giusto a titolo comparatvo, per far felice il mio amico Maurizio del sito www.contaotutorial.com, ecco un test eseguito su un sito da lui realizzato con Contao.

Caso 9

Distribuzione: CentOS 5.5
Posizione file PHP: SAN in rete locale 1 Gbit con FileSystem OCFS2
Metodo di esecuzione PHP: mod_php
ATTENZIONE, in questo caso utilizziamo una contemporaneità di 100 richieste, non 10, quindi per avere un valore della stessa scala, nel grafico iniziale l’abbiamo diviso per 10!

Time taken for tests:   99.116 seconds
Requests per second:    10.09 [#/sec] (mean)
Time per request:       9911.572 [ms] (mean)
Time per request:       99.116 [ms] (mean, across all concurrent requests)
Transfer rate:          128.59 [Kbytes/sec] received

Ribadisco quanto già detto a commento del caso 3: un buon sistemista non può fare i miracoli se il codice è scritto senza alcuna ottimizzazione per la velocità.

mar 132011
 

Negli “HowTo” di OpenStack Swift è dimostrato come creare un ambiente di test utilizzando un singolo server con più partizioni, oppure (situazione consigliata) con più server deidicati allo storage. Troppo semplice: in questo HowTo spieghiamo come realizzare un sistema composto da 2 server con 4 dischi, definendo come zona il disco, quindi una soluzione ibrida tra le due proposte sul sito ufficiale.

Server st01:
IP esterno: 10.1.22.1/16 su eth1
IP interno: 172.16.0.1/24 su eth0/2 in bonding
HD SATA 750 GB: /dev/sda1 da 100 GB in ext4 per la partizione /; /dev/sda2 da 8 GB per lo swap e /dev/sda3 da 500 GB in XFS per la zona 1
HD USB da 500 GB: /dev/sdb1 da 500 GB in XFS per la zona 2

Server st02:
IP esterno: 10.1.22.2/16 su eth1
IP interno: 172.16.0.2/24 eth0/2 in bonding
HD SATA 750 GB: /dev/sda1 da 100 GB in ext4 per la partizione /; /dev/sda2 da 8 GB per lo swap e /dev/sda3 da 500 GB in XFS per la zona 3
HD USB da 500 GB: /dev/sdb1 da 500 GB in XFS per la zona 4

Attacchiamo i cavi e facciamo partire l’installazione base di Ubuntu LTS 10.04 nella versione 64bit. Eseguire una installazione di base, scegliendo solo, per comodità, di installare openssh server.

Configurazione della rete
Sui server abbiamo 3 schede di rete a Gbit, per cui voglio che le schede 0 e 3 siano collegate in bonding tra loro.
Installiamo innanzi tutto il pacchetto ifenslave su entrambi i server:

apt-get install ifenslave

ora creiamo il file /etc/modprobe.d/bonding.conf con le configurazioni del bond (i pacchetti vengono spediti in manera sequenziale tra le interfacce)

alias bond0 bonding
options bonding mode=0 miimon=100 downdelay=300 updelay=300

Quindi andiamo ad editare il file /etc/network/interface su st01

auto eth1
iface eth1 inet static
address 10.1.22.1
gateway 10.1.1.1
netmask 255.255.0.0

auto bond0
iface bond0 inet static
address 172.16.0.1
netmask 255.255.255.0
pre-up modprobe bonding
up ifenslave bond0 eth0 eth2
pre-down ifenslave bond0 -d eth0 eth2
post-down rmmod bonding

e su st02:

auto eth1
iface eth1 inet static
address 10.1.22.2
gateway 10.1.1.1
netmask 255.255.0.0
auto bond0
iface bond0 inet static
address 172.16.0.2
netmask 255.255.255.0
pre-up modprobe bonding
up ifenslave bond0 eth0 eth2
pre-down ifenslave bond0 -d eth0 eth2
post-down rmmod bonding