File system clusterizzato su Linux: OCFS how to

Con questo how to creeremo un mini cluster di 4 macchine che condividono una partizione, magari esposta da una macchina che fa da storage.

Perchè non NFS? perchè nfs va bene per condividere una cartella in una rete, che è ben differente da utilizzare un file system dedicato al clustering.

Con OCFS i nodi del cluster hanno accesso pieno alla partizione, come se fosse una partizione interna del disco, qualunque macchina può leggere/scrivere nella partizione senza doversi preoccupare che magari un altro nodo sta facendo la stessa cosa; ed ovviamente qualsiasi cambiamento all’interno della partizione, verrà visto in real time da tutti i nodi del cluster.

OCFS è l’acronicmo di Oracle Cluster File System, come è facile immaginare è un file system scritto e mantenuto da oracle, e distribuito liberamente sotto licenza GPL.

Per l’esempio attuale terremo come riferimento, per l’appunto, 4 macchine:

S1: 192.168.1.1
S2: 192.168.1.2
S3: 192.168.1.3
S4: 192.168.1.4

De seguito verranno spiegate tutte le singole operazioni, che sono da ripetersi su tutti i nodi, salvo diversamente specificato, partiamo con l’installazione.

#~: apt-get install ocfs2-tools

Installeremo cosi due demoni gestibili via init scripts, o2cb che si occupa di parsare il file di configurazione del cluster e effettuare il join al cluster stesso, e ocfs2 che si occupa di parsare il file fstab e montare in automatico le partizioni ocfs2.

Adesso dobbiamo preparare la partizione che ci interessa, nel mio caso specifico ho usato una partizione esposta da uno storage via iSCSI, pertanto una volta loggato al volume ed individuato il dispositivo visto dalla macchina (/dev/sdb nel mio caso) si da:

#~: mkfs.ocfs2 -b 4k -N 10 -L "Cluster OCFS" /dev/sdb

Questo comando ovviamente, è da eseguire solo su un solo nodo del cluster. Le opzioni usate indicano rispettivamente: la dimensione dei blocchi della partizione, il numero di nodi che parteciperanno al cluster e un etichetta da appendere alla partizione. Infine è da aggiungere su /etc/fstab:

/dev/sdb /punto/di/mount ocfs2 defaults,auto,_netdev 0 0

Finito il partizionamento dobbiamo passare alla configurazione vera e propria del cluster ocfs, innanzitutto dobbiamo abilitare il demone o2cb perchè di default su debian è disabilitato.

#~: vi /etc/default/o2cb

e dentro controllare che le seguenti voci siano come descritte:

O2CB_ENABLED=true
O2CB_BOOTCLUSTER=nomecluster
O2CB_HEARTBEAT_THRESHOLD=31
O2CB_IDLE_TIMEOUT_MS=30000
O2CB_KEEPALIVE_DELAY_MS=2000

O2CB_RECONNECT_DELAY_MS=200

I parametri che ci interessano sono i primi due, il primo naturalmente serve ad attivare il demone, il secondo definisce il nome del cluster ocfs.

Il prossimo file da creare è /etc/ocfs2/cluster.conf il cui contenuto deve essere:

node:
ip_port = 7777
ip_address = 192.168.1.1
number = 0
name = S1
cluster = nomecluster

node:
ip_port = 7777
ip_address = 192.168.1.2
number = 1
name = S2
cluster = nomecluster

node:
ip_port = 7777
ip_address = 192.168.1.3
number = 2
name = S3
cluster = nomecluster

node:
ip_port = 7777
ip_address = 192.168.1.4
number = 3
name = S4
cluster = nomecluster

cluster:
node_count = 4
name = nomecluster

Il file è molto semplice ed intuitivo, contiene i dati realtivi a tutti i nodi del cluster, e deve essere uguale in ogni nodo che deve parteciparvi.

Cosi com’è la configurazione di ocfs2 è completata, riavviando prima o2cb e dopo ocfs2 i nodi joinano il cluster, peccato che al reboot mi sono ritrovato la macchina freezata con un bel kernel panic! la causa del kernel panic è open-iscsi che su debian oltre che buggato è gestito proprio male; per risolvere il problema dobbiamo rimuovere open-iscsi dai demoni di rc.d:[fn]Ovviamente questo vale per chi usa open-iscsi, chi usaaltri metodi non è afflitto da questo bug[/fn]

#~: update-rc.d -f open-iscsi remove

e gestire il demone in fase di re-boot tramite il file /etc/network/interfaces, aggiungendo queste righe appena dopo la definizione dell’interfaccia:

post-up echo "Waiting for network to come up before starting iSCSI#" && sleep 5
post-up /etc/init.d/open-iscsi start
post-up /etc/init.d/o2cb start
post-up /etc/init.d/ocfs2 start
pre-down /etc/init.d/ocfs2 stop
pre-down /etc/init.d/o2cb stop
pre-down /etc/init.d/open-iscsi stop

N.B. La procedura di start/stop dei demoni ocfs/o2cb non è messa li a caso, per evitare ulteriori lockup della macchina, i demoni vanno riavviati nel modo sopra descritto.

I problemi non sono finiti, in fase di reboot/shutdown infatti il nostro caro rc.d ha il vizio di killare tutte le connessioni prima di stoppare i demoni che ne fanno uso, tra i quali indovinate un pò, c’è proprio open-iscsi. Per risolvere il problema bisogna cambiare la priorità dello script "sendsigs":

mv /etc/rc6.d/S20sendsigs /etc/rc6.d/S39sendsigs
mv /etc/rc0.d/S20sendsigs /etc/rc0.d/S39sendsigs

fine della storia, adesso possiamo riavviare le macchine come meglio crediamo senza dover tremare di pajura.


Altri articoli che potrebbero interessarti

File system clustering su debian: odi et amo 3° parte (La soluzione finale) E cosi venne il giorno dopo, tornando in ufficio cercai di pensare ad una qualche soluzione sperando...
File system clustering su debian: odi et amo 1° parte (l’incubo del kernel panic) Scenario di un pò di tempo fa: nasce una nuova rete televisiva sul digitale terrestre, la mia...
Apre il mini-forum del blog logubuntu A seguito del sondaggio svoltosi fino ad oggi, concluso con una parità, ho deciso di aprire un mini-forum,...
HP rilascia advFS sotto GPL2 La community open source ha acquisito dall' altroieri, grazie ad hp, un notevole passo in avanti riguardo...
Alta Affidabilità (HA) su Linux con HeartBeat Da Wikipedia: Nell'ambito scientifico, con il termine cluster si intende un gruppo di unità simili...

About the Author

M0rF3uS al secolo Alex è un ggiovine 25enne appassionato di informatica e linux. Lavora come Network and System Administrator e nel tempo libero gioca un pò con la sua fotocamera (Canon EOS 1000D) riuscendo a volte, per sbaglio, a fare qualche scatto decente. Completano il corredo, degli hobbies "vorrei ma non posso" ossia l'astronomia e l'astronautica....si è uno di quelli che da grande vorrebbe fare l'astronauta (povero coglione vero?).