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.
/usr/local/etc/mfsmaster.cfg
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:
/usr/local/etc/mfschunkserver.cfg
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:
/usr/local/etc/mfshdd.cfg
/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.