CREAZIONE CLUSTER OPENMOSIX
Lo scopo di questo scritto é la tracciatura passo-passo delle operazioni necessarie alla creazione di un cluster openMosix, da adesso in poi indicato con i termini 'cluster' o 'pool'; i computer costituenti il cluster saranno chiamati 'nodi'.
A CHI SI RIVOLGE QUESTO DOCUMENTO
In giro per la Rete si possono trovare HOW-TO più o meno chiari, in italiano o in inglese, ma sono sempre dedicati a RedHat o altre distribuzioni. Poiché utilizzo Debian, ho deciso di scrivere questo documento che spiega come installare un cluster per la debian Woody.
Non ho la pretesa di spiegare per filo e per segno la storia di Mosix prima e openMosix poi, per queste informazioni, mi limito a rimandare il lettore allo "openMosix-HOWTO" ( www.openmosix.org) ed alla documentazione reperibile in rete.
COSA E' OPENMOSIX? openMosix é la versione GPL di Mosix: col tempo si è evoluto diventando un progetto a sè stante,
replicando, migliorando ed espandendo le caratteristiche di Mosix. |
COSA E' UN CLUSTER? La definizione più generale di cluster é un insieme componenti hardware
e software dedicati all'ottenimento di: |
Qui prenderemo in esame le PRESTAZIONI, verrà cioé creato un CLUSTER DI CALCOLO
Basandosi sul concetto che "l'unione fa la forza" due o più PC correttamente configurati eseguiranno una serie di compiti in un tempo minore rispetto al singolo PC.
VANTAGGI DATI DALL'USO DI OPENMOSIX
CONSIDERAZIONI SU OPENMOSIX (sul clustering in generale e cenni di programmazione)
Compilazioni, rendering, modellazione 3D, conversioni audio/video, analisi/elaborazione di grosse masse di dati...
Sono tutti compiti che richiedono un enorme numero di calcoli e che richiedono ore ed ore di elaborazione
su una singola macchina, possono essere rapidamente eseguite in poche decine di minuti su di un cluster oM.
Uno dei punti di forza di oM é che non richiede che i programmi vengano scritti (o riscritti) appositamente per
sfruttare la capacità di migrazione: é infatti oM che si incarica di ripartire i processi tra i vari nodi, in
modo totalmente trasparente all'utente.
Al momento attuale (Kernel 2.4.20/21) oM permette la migrazione tra i
nodi unicamente per i programmi che non fanno uso di memoria condivisa (shared memory); questo limita il numero
dei processi migrabili. Per fare un esempio, mozilla e openoffice non migrano, per cui se avete in casa 4 o 5
vecchi Pentium 1 a 133Mhz e sperate di metterli in cluster per migliorare le prestazioni di KDE+mozilla, etc,
scordatevelo :-)
Inoltre, c'è da tenere in considerazione il fatto che oM lavora a livello di 'processo': ogni processo è considerato
una entità 'atomica' cioè NON ulteriormente suddivisibile.
Facciamo un esempio per chiarire la situazione, (assumendo che i processi richiedano la stessa potenza di calcolo e
che i nodi del cluster siano uguali tra loro).
Se ci sono 8 processi che richiedono 60 minuti l'uno per essere eseguiti, un cluster di 8 PC potra'
eseguire gli 8 processi in parallelo (uno per nodo del cluster) e alla fine gli 8 processi saranno completati in 60
minuti o poco più. Però se ho un unico processo che necessita di 8 ore (480 minuti) per essere completato,
in questo caso il cluster non porterà nessun vantaggio poichè il processo in questione è 'atomico' cioè oM non
può spezzarlo in più sottoprocessi da migrare su altri nodi. L'unico beneficio che oM può fornire è quello di
individuare quale è la macchina più potente del cluster (nel caso di nodi non identici) ed inviare su questa
macchina il processo più pesante, togliendo al contempo altri eventuali processi, per dedicare all'unico processo
pesante tutta la capacità elaborativa del nodo.
A volte, occorre una decisione 'umana' su COME far eseguire determinati compiti al cluster: meglio lanciare
tanti piccoli processi in parallelo (che verranno migrati su altri nodi) piuttosto che un unico grande processo
(che NON beneficerà della potenza del cluster).
PREREQUISITI
Parto dal presupposto che le macchine abbiano tutte un indirizzo IP statico,
con indirizzi che vanno da 192.168.1.10 a 192.168.1.17 e che siano connesse
in rete tramite un HUB da 10Mbit/s. Il sistema operativo é GNU/Linux Debian Woody.
I nodi devono avere tutti lo stesso kernel e relativa patch oM, altrimenti non funzioneranno.
Prima di proseguire, é bene tenere a mente che l'utilizzo di questo cluster comporterà una diminuzione della sicurezza delle singole macchine, in quanto saranno vulnerabili ad azioni di craking sia dall'esterno che da una macchina verso l'altra. Il sistema nasce per essere stand-alone e dedicato allo studio ed ai test di oM. Pur essendo questo cluster paritetico (ogni macchina può far lavorare le altre), per comodità durante i test userò una macchina come master e le altre come slave in attesa di ordini dal master. Rammento che la cosa che ora interessa é solo la messa in funzione del cluster di calcolo: non saranno prese in considerazione altre problemematiche come la diminuita sicurezza, il fatto che non vada la scheda audio o la presa USB, etc.
Qui si avranno un massimo di 8 nodi e avranno i seguenti nomi ed indirizzi IP:NODO NOME INDIRIZZO IP FUNZIONE 1 master 192.168.1.10 Master 2 nodo2 192.168.1.11 nodo slave 3 nodo3 192.168.1.12 nodo slave 4 nodo4 192.168.1.13 nodo slave 5 nodo5 192.168.1.14 nodo slave 6 nodo6 192.168.1.15 nodo slave 7 nodo7 192.168.1.16 nodo slave 8 nodo8 192.168.1.17 nodo slave
SOFTWARE NECESSARIO
servono i sorgenti PULITI, cioé senza patch. I sorgenti del kernel delle varie
distribuzioni (Debian, slackware, etc) NON vanno bene, occorre procurarsi i sorgenti originali.
Il sito da cui scaricare é (www.kernel.org).
Il kernel che verrà usato é l'ultimo dichiarato stabile, cioé il 2.4.20. Il file si chiama
linux-2.4.20.tar.bz2.
La patch per abilitare il kernel al clustering é
openMosix-2.4.20-1.gz reperibile partendo dal sito
(www.openmosix.org) ; sempre nello stesso sito, procuratevi le utility per amministrare
il cluster: l'ultima versione del file si chiama openMosixUserland-0.2.4.tgz
Anche se il cluster verrà configurato per 8 nodi, qui ne verranno creati solo 3 nodi, identici tra loro:
si tratta di 3 portatili. Il motivo per cui verranno usati solo 3 computer é semplice: non ne ho di più :-)
MODELLO : IBM ThinkPad TP600
CPU : Pentium2 266Mhz
RAM : 128M o superiore
DISCO : 1G o superiore
RETE : Scheda a 10 o 100Mbit/s
Non starò qui a riportare quali opzioni attivare nel kernel, né mi occuperò della risoluzione di eventuali problemi di networking. Dò per scontato che il lettore abbia già una certa esperienza nell'uso di Debian, della ricompilazione del kernel: comunque, indico qui di seguito i passi necessari a ricompilare il kernel e modificare il lilo.
Ora darò di seguito tutta la lista di comandi per creare il kernel
# mv /directory_di_partenza/linux-2.4.20.tar.bz2 /usr/src/
[*] openMosix process migration support
[ ] Support clusters with a complex network topology
[*] Stricter security on openMosix ports
(3) Level of process-identity disclosure (0-3)
[*] openMosix File-System
[ ] Poll/Select exceptions on pipes
[ ] Disable OOM Killer
Configurate il resto del kernel, salvate ed uscite. Ora occorre compilare il kernel
# make cleanIl kernel é compilato e messo nella directory /boot, ora occorre modificare
il /etc/lilo.conf ed assicuratevi che contenga una riga con la parola
prompt
senza il # davanti. Inoltre il file deve contenere queste righe, per abilitare il kernel ricompilato:
image=/boot/linux-2.4.20-oM
label=linux-2.4.20-oM
read-only
optional
INSTALLAZIONE SCRIPT
Debian ci viene in aiuto, poiché esiste gia un pacchetto contenente lo script dal nome 'openmosix'
che verrà installato in /etc/init.d/ e i link per attivare/disattivare il nodo alla partenza/stop.
E' sufficiente installare col solito comando:
RICOMPILAZIONE COMANDI
Esistono dei comandi senza i quali il cluster non può essere configurato, monitorato ed amministrato.
Qui di seguito le operazioni per crearli dai sorgenti.
# mv /directory_di_partenza/openMosixUserland-0.2.4.tgz /usr/src/
# cd /usr/src
# tar zxvf openMosixUserland-0.2.4.tgz
# cp openMosixUserland-0.2.4
# mcedit configuration
Assicuratevi che il file contenga queste scritte:
OPENMOSIX=/usr/src/linux
MONNAME=mmon
CC=gcc
INSTALLBASEDIR=/
INSTALLEXTRADIR=/usr
INSTALLMANDIR=$(INSTALLEXTRADIR)/share/man
CFLAGS = -Wall -I/m/include -I./ -I/usr/include -I$(OPENMOSIX)/include \
-Wpointer-arith --pedantic -Wcast-qual -Wconversion \
-Wwrite-strings -Wredundant-decls -O2
INSTALL=/usr/bin/install
A questo punto, digitate:
# make all
...e i comandi verranno compilati.
Ci saranno molti 'warning' in fase di compilazione: comunque, dovrebbe procedere tutto bene ed alla fine dovrebbe comparire un simpatico messaggio cher augura buon lavoro.
Ecco alcuni dei comandi creati, posti nella directory /bin:
mmon : monitorizza lo stato del cluster mosctl : tool di amministrazione del cluster mosrun : esegue un comando su un particolare nodo del cluster
INSTALLIAMO MPS (e mtop)
Installatelo tramite:
# apt-get install mps
Il comando 'mps' é una versione potenziata di 'ps'. Questo comando aggiunge una colonna chiamata 'NODE'
alla lista delle altre informazioni fornite da ps.
La colonna NODE sta ad indicare quale nodo del cluster il processo sta girando.
NOTA: con 8 nodi il NODE varierà da 1 a 8, però il nodo su cui è attivo mps o mtop, verrà sempre indicato come
nodo numero zero.
#questa e' l'interfaccia di loopback
auto lo
iface lo inet loopback
#questa e' l'interfaccia di rete
auto eth0
iface eth0 inet static
address 192.168.1.10
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
assicuratevi che questo file contenga questa riga, che abilita il file-system oM.
mfs /mfs mfs odfsa=1 0 0
assicuratevi che questo file contenga gli indirizzi dei vari nodi: per comodità lo allego integralmente.
1 192.168.1.10 1 2 192.168.1.11 1 3 192.168.1.12 1 4 192.168.1.13 1 5 192.168.1.14 1 6 192.168.1.15 1 7 192.168.1.16 1 8 192.168.1.17 1
Adesso fate uno shutdown e al reboot scegliete linux-2.4.20-oM
PARTENZA CLUSTER
A questo punto, se non é attiva, configurate la scheda di rete con:
Bene! Eseguite le modifiche del caso, spegnete e riaccendete i pc, e
alla partenza, scegliete il kernel con oM (potete renderlo di default modificando oppurtunatamente
il file /etc/lilo.conf).
Per verificare il funzionamento del nodo, (sto lavorando sul master) digitate in comando:
# /etc/init.d/openmosix status
La risposta che ottengo é la seguente: (sto lavorando sul master)
This is OpenMosix node #1
Network protocol: 2 (AF_INET)
OpenMosix range 1-1 begins at master
OpenMosix range 2-2 begins at 192.168.1.11
OpenMosix range 3-3 begins at 192.168.1.12
OpenMosix range 4-4 begins at 192.168.1.13
OpenMosix range 5-5 begins at 192.168.1.14
OpenMosix range 6-6 begins at 192.168.1.15
OpenMosix range 7-7 begins at 192.168.1.16
OpenMosix range 8-8 begins at 192.168.1.17
Total configured: 8
Notate il fatto che oM viene attivato PRIMA che ci si logghi al sistema, quindi la potenza di calcolo dei nodi nodi sarà disponibile appena accesi, poiché oM funziona come un qualsiasi processo che gira in background.
ATTENZIONE!!!
Nel caso vi apparisse un messaggio di errore tipo:
"this is not MOSIX!!", non dovrete fare altro che ricompilare i comandi, vedi piu' sopra il punto
RICOMPILAZIONE COMANDI
ACCESSO AI FILESYSTEM DEI NODI
Esiste la possibilità di accedere al file-system presente sui nodi.
Se per esempio voglio rendere accessibile a tutti i nodi del pool il file-system del nodo X,
allora dovrò editare, sul nodo X, il file /etc/default/openmosix ed abilitare la variabile in questo modo:
MFS=yes
Alla successiva partenza, il nodo X esporterà verso tutti gli altri nodi il proprio file-system.
Gli altri nodi del pool potranno accedere al file-system del nodo X attraverso la directory /mfs/X.
Questa possibilità é comoda, nel caso si voglia condividere dei file (sorgenti kernel o altro),
oppure amministrare e configurare i nodi da qualunque altro nodo ma é potenzialmente pericolosa in
quanto c'é la possibilità di cancellare i nodi.
Di default, l'opzione é disabilitata, al lettore la scelta di abilitarla o meno in funzione delle
proprie necessità.
MONITORIAMO IL CLUSTER
Ci sono vari comandi (quelli che abbiamo compilato prima) che aiutano a monitorare, amministrare
ed eseguire una fine taratura del sistema. Rimando al solito openmosix-HOWTO per una lettura
approfondita.
Qui prenderemo in considerazione solo il comando
mmon
(nelle altre distribuzioni, questo comando viene chiamato 'mosmon') il quale permette di monitorizzare visivamente
lo stato del cluster.
Dopo aver lanciato il comando, appare un grafico
che indica il carico (load) dei nodi. I nodi attivi sono indicati dal numero
ad essi corrispondente. E' possible avere informazioni premendo dei tasti:
q or Q Quit program
w/v/V/a horizontal (wide), vertical, super-vertical (tight) or
automatic selection of numbering
s show processor speeds, rather than loads
m show memory (used out of total) rather than loads
r show memory (raw used/free out of total) rather than loads
u show utilizability percentage rather than loads
l mostra il carico (default)
d mostra i nodi morti (configurati ma non operativi)
D l'opposto del tasto 'd'
t mostra/toglie il numero dei nodi/CPU (opzione lenta, sconsigliata su cluster grandi)
y mostra lo yardstick in uso (eg. velocita della CPU)
Enter ridisegna lo schermo
Se ci sono troppi nodi e non tutti stanno nella schermata:
freccia destra/sinistra muove di un nodo a destra/sinistra
n or p muove di una pagina a destra/sinistra
TESTIAMO IL CLUSTER
Occorre creare uno script di esempio, eccone uno che lancia 10 processi indipendenti (dei semplici cicli for-next).
(Per chiarezza, rammento che sto sempre lavorando sul nodo master).
#!/bin/bash
#lancia 10 processi awk indipendenti
for n in 0 1 2 3 4 5 6 7 8 9 ; do
awk 'BEGIN { for (i=0;i<10000;i++) for (j=0;j<10000;j++);}' &
done
Salvate lo script, rendetelo eseguibile e lanciatelo.
Il programma mmon vi pervetterà di vedere i 10 processi 'sparpagliarsi' per i vari nodi del cluster.
Viene ora utile il comando:
mps a
che permette di vedere quanti processi girano e su quali nodi. Notate come nella colonna NODE i numeri varino
da 0 a 3, indice del fatto che i processi sono ripartiti tra i 4 nodi del cluster.
PID TTY NODE STAT TIME COMMAND
281 2 0 S 0:00 /sbin/getty 38400 tty2 282 3 0 S 0:00 /sbin/getty 38400 tty3 283 4 0 S 0:00 /sbin/getty 38400 tty4 284 5 0 S 0:00 /sbin/getty 38400 tty5 286 6 0 S 0:00 /sbin/getty 38400 tty6 377 ? 0 S 0:00 /bin/cat 378 1 0 S 0:00 -bash 430 ? 0 S 0:00 /bin/bash 442 ? 0 S 0:00 /bin/bash 453 ? 0 R 0:00 awk BEGIN { for (i=0;i<10000;i++) for (j=0;j<10000;j++);} 454 ? 1 R 0:00 awk BEGIN { for (i=0;i<10000;i++) for (j=0;j<10000;j++);} 455 ? 2 R 0:00 awk BEGIN { for (i=0;i<10000;i++) for (j=0;j<10000;j++);} 456 ? 3 R 0:00 awk BEGIN { for (i=0;i<10000;i++) for (j=0;j<10000;j++);} 457 ? 3 R 0:00 awk BEGIN { for (i=0;i<10000;i++) for (j=0;j<10000;j++);} 458 ? 2 R 0:00 awk BEGIN { for (i=0;i<10000;i++) for (j=0;j<10000;j++);} 459 ? 1 R 0:00 awk BEGIN { for (i=0;i<10000;i++) for (j=0;j<10000;j++);} 460 ? 1 R 0:00 awk BEGIN { for (i=0;i<10000;i++) for (j=0;j<10000;j++);} 461 ? 0 R 0:00 awk BEGIN { for (i=0;i<10000;i++) for (j=0;j<10000;j++);} 462 ? 0 R 0:00 awk BEGIN { for (i=0;i<10000;i++) for (j=0;j<10000;j++);} 463 ? 1 R 0:00 mps a
PID USER PRI NI SIZE RSS SHARE STAT N# %CPU %MEM TIME COMMAND 528 root 20 0 456 456 376 R 3 19.2 0.2 0:05 awk 530 root 20 0 456 456 376 R 2 18.2 0.2 0:05 awk 531 root 19 0 456 456 376 R 2 19.2 0.2 0:05 awk 532 root 19 0 456 456 376 R 3 19.1 0.2 0:05 awk 529 root 20 0 456 456 376 R 1 18.2 0.2 0:05 awk 508 root 14 0 904 904 716 R 0 1.1 0.4 0:03 mtop 429 root 9 0 9232 9232 7900 R 0 0.9 4.8 0:30 kdeinit
ESEMPIO TIPICO DI CREAZIONE CLUSTER Supponiamo che abbiate a disposizione una dozzina di PC (aula didattica o ufficio di medie dimensioni) connessi in LAN tramite un HUB (meglio se uno switch): questi PC sono rapidamente (mezza giornata) convertibili in un cluster openMosix a costo zero! Ogni PC può avere il suo kernel con openMosix attivato, e l'utente del PC, tramite la manipolazione del file /etc/default/openmosix, è in grado di decidere se:- abilitare o no il proprio PC come membro del cluster - richiedere 'potenza elaborativa' al cluster - fornire 'potenza elaborativa' al cluster - rendere o no disponibile (esportare) il proprio file-system al cluster (molto comodo per condividere i sorgenti del kernel o altro, ma anche MOLTO pericoloso in quando da remoto possono agire sul filesystem del vostro PC, quindi: MOLTA ATTENZIONE) |
CONCLUSIONI
Siamo arrivati alla fine di questo scritto e in cluster é attivo. Abbiamo visto come oM permetta di 'aggregare'
un certo numero di computer per poter ottenere un cluster.
Questa molteplicità di macchine viene vista come una unità singola dal punto di vista della potenza elaborativa.
Come avevo detto all'inizio, alcuni punti dell'argomento oM sono stati solo accennati, ma sarebbe bene che venissero
approfonditi attingendo ai rimandi a cui ho fatto riferimento all'interno di questo documento.
NOTE SULL'AUTORE Mi chiamo Roberto Premoli ed ho cominciato ad interessarmi a GNU/Lnux dal 1999.
|
RINGRAZIAMENTI Varie sono state le componenti che hanno contribuito alla realizzazione di questo scritto. kahuna, un frequentatore assiduo della chat presente sul server irc.oltrelinux.com, canale #oltrelinux che mi ha fornito una prima bozza incompleta della traduzione italiana dell'how-to di openMosix per redhat, la quale mi ha causato la frustrazione di non avere disponibile un how-to per debian, e il conseguente desiderio di scriverlo :-). Kahuna mi scusera' se lo cito solo per nick, ma non mi ricordo il suo vero nome. Chi vuole contattarlo, lo cerchi in chat. Un "grazie" speciale alla determinante
collaborazione di Fabrizio G. Ficca, reperibile all'indirizzo fab@openlabs.it.
Da solo ero riuscito ad implementare un cluster di due nodi didattico, Fabrizio mi ha aiutato a implementare
un cluster di 4 nodi di cui 3 con una scheda compact flash (quelle delle macchine fotografiche digitali)
al posto dell'hard disk (la configurazione flash l'ha fatta tutta lui): inoltre, mi e' stato di supporto per
la parte di configurazione delle connessioni di rete. |