Installazione di test di un cluster storage con MooseFS

MooseFS è un filesystem  di rete che può essere montato attraverso il protocollo FUSE, con il quale è possibile creare uno storage ridondato e scalabile utilizzando una batteria di “commodity server” (cioè PC senza particolari caratteristiche di potenza).

Il sistema si compone di 3 elementi: il master server che fungerà da proxy e che ha la “mappa” delle posizione di tutti i dati all’interno del cluster, il metalogger server con una copia della “mappa” del server principale che può essere promosso a master in caso di necessità e una serie di “chunk server” che formetanno il vero e proprio storage.

Riguardo all’hardware, è consigliato avere due server robusti sia in termini di tolleranza ai guasti sia in termini di quantità di RAM per il master e il metalogger, mentre i chunk hanno bisogno, ovviamente, solo di parecchio spazio su disco.

In questo howto, installeremo un sistema semplificato formato solamente da un master e un chunk.

Partiamo da una installazione pulita della vostra distribuzione Linux preferita e installate i tools per la compilazione.

Quindi scarichiamo i sorgenti e scompattiamoli:

wget http://pro.hit.gemius.pl/hitredir/id=0sWa0S8ft4sTAHF1bGAAEZPcP3ziyq7f9SdhoQf7oeT.c7/url=moosefs.org/tl_files/mfscode/mfs-1.6.20-2.tar.gz
tar zxvf mfs-1.6.20-2.tar.gz
cd mfs-1.6.20-2

E creiamo un utente per eseguire il demone:

useradd moose

Installazione del master server
Sul master server, per comodità, installeremo anche l’opzione di mount del filesystem, per cui è necessario avere installato FUSE.
Su Gentoo è possibile installare il pacchetto con:

emerge sys-fs/fuse

Ora passiamo alla compilazione dei sorgenti. Innanzi tutto lanciamo il comando configure con le dovute opzioni:

./configure --disable-mfschunkserver --enable-mfsmount --with-default-user=moose --with-default-group=moose

Quindi passiamo alla compilazione vera e propria con:

make && make install

A questo punto il pacchetto è installato in /usr/local in modo da essere isolato dal resto del setup.

E’ necessario creare il file di configurazione /usr/local/etc/mfsmaster.cfg; io sono partito da quello di default.

<strong>/usr/local/etc/mfsmaster.cfg</strong>
WORKING_USER = moose
WORKING_GROUP = moose
SYSLOG_IDENT = mfsmaster
LOCK_MEMORY = 0
NICE_LEVEL = -19

EXPORTS_FILENAME = /usr/local/etc/mfsexports.cfg

DATA_PATH = /usr/local/var/mfs

BACK_LOGS = 50

REPLICATIONS_DELAY_INIT = 300
REPLICATIONS_DELAY_DISCONNECT = 3600

MATOML_LISTEN_HOST = *
MATOML_LISTEN_PORT = 9419

MATOCS_LISTEN_HOST = *
MATOCS_LISTEN_PORT = 9420

MATOCU_LISTEN_HOST = *
MATOCU_LISTEN_PORT = 9421

CHUNKS_LOOP_TIME = 300
CHUNKS_DEL_LIMIT = 100
CHUNKS_WRITE_REP_LIMIT = 1
CHUNKS_READ_REP_LIMIT = 5

REJECT_OLD_CLIENTS = 0

Inoltre bisogna creare il file con gli export /usr/local/etc/mfsexports.cfg. Io ho semplicemente tutto a tutti in lettura e scrittura:

/usr/local/etc/mfsexports.cfg
*           /   rw,alldirs,maproot=0
*           .   rw

Infine, trattandosi di una nuova installazione, bisogna creare il metadata:

mv /usr/local/var/mfs/metadata.mfs.empty /usr/local/var/mfs/metadata.mfs

A questo punto avviamo il servizio master e la console di stato con:

/usr/local/sbin/mfsmaster
/usr/local/sbin/mfscgiserv

Ricordiamoci di aggiungerlo all’avvio automatico, ad esempo modificando il file rc.local o /etc/conf.d/local.start a seconda della distrinuzione in uso.

Attraverso il servizio mfscgiserv si ha a disposizione una interfaccia web per controllare lo stato del proprio cluster storage. Ecco qui di seguito alcuni screenshot per stuzzicavi l’appetito.

Installazione del Chunk Server
Innanzi tutto formattiamo una partizione del nostro disco e montiamola in una directory dedicata

mke2fs -j /dev/sda4
mount /dev/sda4 /public

Ora passiamo alla compilazione di moose:

./configure --disable-mfsmaster --disable-mfsmount --with-default-user=moose --with-default-group=moose
make
make install

Assegnamo all’utente moose i privilegi di scrittura:

chown -R moose:moose /public

Creiamo il file di configurazione del demone:

<strong>/usr/local/etc/mfschunkserver.cfg</strong>
WORKING_USER = moose
WORKING_GROUP = moose
SYSLOG_IDENT = mfschunkserver
LOCK_MEMORY = 0
NICE_LEVEL = -19

DATA_PATH = /usr/local/var/mfs

MASTER_RECONNECTION_DELAY = 5

BIND_HOST = *
MASTER_HOST = master
MASTER_PORT = 9420

MASTER_TIMEOUT = 60

CSSERV_LISTEN_HOST = *
CSSERV_LISTEN_PORT = 9422

HDD_CONF_FILENAME = /usr/local/etc/mfshdd.cfg
HDD_TEST_FREQ = 10

e il file mfshdd.cfg con l’elenco dei dischi condivisi:

<strong>/usr/local/etc/mfshdd.cfg</strong>
/public

e avviamo il demone con:

/usr/local/sbin/mfschunkserver

Dato che sul master abbiamo installato anche il mfsmount, possiamo collaudare il funzionamento montando il disco con:

mfsmount /mnt/moose/ -H 192.168.0.100 -P 9421

Nel prossimo Howto aggiungeremo a questo setup un metalogger server attraverso il quale garantiremo alta affidabilità al master.