13 maggio 2010

Linux - Lustre - Installazione del Filesystem Lustre

Lustre è un filesystem parallelo distribuito, è in grado di gestire filesystem fino a 10PByte con un thrghtoup aggregato di 100 Gbyte/sec. Supporta nativamente reti Ethernet, 10 GbE, Infiniband, Elan, Myrinet. E' il filesystem più utilizzato fra i Top500 cluster più potenti al mondo. Lustre è un progetto Open Source basato su licenza GPL che gira su sistema operativo Linux.

Le componenti principali di una soluzione Lustre sono:
  • MGS - E' il servizio che tiene conto di tutte le configurazioni di un cluster Lustre
  • MDS - E' il servizio che gestisce i metadati di un singolo filesystem distribuito
  • OSS - E' il servizio che gestisce gli storage server dove vengono salvati i dati
  • Client - E' la componente che permette l'accesso al cluster
  • LNET - E' il sottosistema di rete nativo di Lustre

Tutte le componenti sono state sviluppate come moduli del kernel, le configurazioni vengono scritte durante la fase di formattazione del filesystem e passate al MGS, non esistono a livello del filesystem alcun file da configurare o configurazione da gestire.

Lustre necessita per le componenti MGS, MDS e OSS il patching del kernel partendo dai sorgenti, per il client è possibile scegliere tra un client patched o patchless, la differenza è in qualche punto percentuale di degrado delle performance. Se non si desidera ricompilare il kernel, vengono resi disponibili gli RPM pre-compilati e già  pronti per le distribuzioni Oracle Linux, Red Hat Enterprise Linux e Suse Linux.


A titolo didattico partiamo con una soluzione, rappresentata in figura, con un unico server Lustre contenente le componenti MGS, MDS e OSS. Tale server dotato di una distribuzione Red Hat Enterprise Linux con kernel 2.6.18-164.11.1.el5 è agganciata a uno storage esterno iSCSI dove verranno ricavate 4 partizioni secondo il seguente schema:
  • Target del MGS: partizione /dev/sdb1 da 1 GB
  • Target del MDS: partizione /dev/sdb4 da 1 GB
  • Due target per la componente di Storage: OST0 /dev/sdb2 da 10GB e OST1 /dev/sdb3 da 10GB
La configurazione appena proposta permetterà  al client di accedere ad un unico filesystem di 20GB composto da due Storage Target in Striping che quindi aggregheranno la banda dei due canali iSCSI e permetteranno migliori performance al client.

La versione di Lustre utilizzata è la 1.8.3, sul client utilizzeremo la configurazione patchless.

Lato server installeremo i seguenti pacchetti con il comando:
rpm -ivh e2fsprogs-1.41.10.sun2-0redhat.rhel5.i386.rpm 
kernel-2.6.18-164.11.1.el5_lustre.1.8.3.i686.rpm  
lustre-1.8.3-2.6.18_164.11.1.el5_lustre.1.8.3.i686.rpm  
lustre-ldiskfs 3.0.9-2.6.18_164.11.1.el5_lustre.1.8.3.i686.rpm 
lustre-modules-1.8.3-2.6.18_164.11.1.el5_lustre.1.8.3.i686.rpm  --force

e aggiungeremo al file /etc/modprobe.conf la seguente riga per abilitare il sistema LNET su ethernet:
options lnet networks=tcp

riavviamo il server con il kernel appena installato e iniziamo a formattare / configurare Lustre con i seguenti comandi:
  • MGS:  mkfs.lustre --mgs /dev/sdb1 
  • MDS:  mkfs.lustre --mdt --mgsnode=192.168.2.20 --fsname=prova /dev/sdb4
  • OSS0: mkfs.lustre --ost --mgsnode=192.168.2.20 --fsname=prova /dev/sdb2
  • OSS1: mkfs.lustre --ost --mgsnode=192.168.2.20 --fsname=prova /dev/sdb3
Per avviare i servizi di lustre sarà  sufficiente montare i relativi filesystem, prima ci creiamo l'alberatura di mount:

mkdir -p /lustre/mgs_prova
mkdir -p /lustre/mdt_prova
mkdir -p /lustre/ost0_prova
mkdir -p /lustre/ost1_prova


e quindi montiamo:

mount -t lustre /dev/sdb1 /lustre/mgs_prova
mount -t lustre /dev/sdb4 /lustre/mdt_prova
mount -t lustre /dev/sdb2 /lustre/ost0_prova
mount -t lustre /dev/sdb3 /lustre/ost1_prova


ATTENZIONE: I filesystem appena montati NON devono essere acceduti, questa operazione serve solamente per avviare i moduli dei servizi server di Lustre.

Lato client installeremo i seguenti pacchetti:
rpm -ivh lustre-client-1.8.3-2.6.18_164.11.1.el5_lustre.1.8.3.i686.rpm lustre-client-modules-1.8.3-2.6.18_164.11.1.el5_lustre.1.8.3.i686.rpm

e aggiungeremo al file /etc/modprobe.conf la seguente riga per abilitare il sistema LNET su ethernet:
options lnet networks=tcp

per maggiore sicurezza facciamo un bel reboot del client e proviamo ad accedere al nostro filesystem "prova":
mkdir /prova
modprobe lustre
mount -t lustre 192.168.2.20@tcp:/prova /prova


dovreste vedere il vostro filesystem /prova montato e delle dimensioni di 20GB.

La procedure corretta di stop del cluster Lustre sarà :
  1. dal client: umount /prova
  2. dal server: umount /lustre/ost1_prova
  3. dal server: umount /lustre/ost0_prova
  4. dal server: umount /lustre/mdt_prova
  5. dal server: umount /lustre/mgs_prova


Devo ringraziare per la collaborazione Roberto.

Nessun commento: