Clustering con PVM: differenze tra le versioni

m
versioni compatibili
Nessun oggetto della modifica
m (versioni compatibili)
 
(5 versioni intermedie di 3 utenti non mostrate)
Riga 1: Riga 1:
{{stub}}
{{Versioni compatibili|Wheezy|Jessie}}
__TOC__


== Installazione PVM ==
== Introduzione ==
*Installare pvm e pvm-dev
PVM (Parallel Virtual Machine) è un software che permette a diversi computer in rete di essere utilizzati come se fossero uno solo, aggregando le risorse di ognuno per ottenere una capacità computazionale maggiore.<br />
È una soluzione molto più economica e modulare che incrementare la dotazione hardware (CPU, RAM, etc.) di una singola macchina e permette di risolvere problemi molto complessi a costi molto contenuti.<br />
root@insanelab-cluster:apt-get install pvm
Utilizzato oggi su larga scala, è considerato lo standard per quanto riguarda il calcolo parallelo.
root@insanelab-cluster:apt-get install pvm-dev


*modificare <code>/etc/profile</code> aggiungendo: <br>
Lo schema di funzionamento è abbastanza semplice: dato un insieme di macchine che si vogliono aggregare in cluster, su ognuna di esse si installerà e configurerà PVM. Ad installazione e configurazione completata, da ciascuna di queste macchine sarà possibile creare una vm cluster aggregando i nodi desiderati.


#variable for PVM
In questa guida verrà trattata la realizzazione di un cluster composto da due macchine: ''node0'' e ''node1''
PVM_ROOT=/usr/lib/pvm3
export PVM_ROOT<br>
PVM_ARCH=`$PVM_ROOT/lib/pvmgetarch`
export PVM_ARCH<br>
PVM_RSH=/usr/bin/ssh
export PVM_RSH<br>
PVM_TMP=/tmp
export PVM_TMP<br>
#Add pvm binary to PATH
PATH=$PVM_ROOT/bin:$PATH
export PATH<br>


*Modificare il file <code>LINUX.def</code> inserendo il modo che usiamo per connetterci (ssh)
== Installazione e configurazione ==
PVM è presente nel ramo ''main'' dei [[repository]] di Debian e può essere installato semplicemente con:
<pre>
# apt-get install pvm pvm-dev
</pre>


nano /usr/lib/pvm3/conf/LINUX.def
Per poterlo utilizzare correttamente si dovrà modificare il file <code>/etc/profile</code> di ogni nodo aggiungendo:
<pre>
#variable for PVM
PVM_ROOT=/usr/lib/pvm3
export PVM_ROOT
PVM_ARCH=`$PVM_ROOT/lib/pvmgetarch`
export PVM_ARCH
PVM_RSH=/usr/bin/ssh
export PVM_RSH
PVM_TMP=/tmp
export PVM_TMP
#Add pvm binary to PATH
PATH=$PVM_ROOT/bin:$PATH
export PATH
</pre>


#LINUX.def
Si dovrà anche modificare il file <code>/usr/lib/pvm3/conf/LINUX.def</code> per specificare il metodo che si desidera utilizzare per connettersi (in questo caso SSH):
ARCHCFLAGS      =      -DSYSVSIGNAL -DNOWAIT3 -DRSHCOMMAND=\'''"/usr/bin/ssh\"''' \
                                -DNEEDENDIAN -DFDSETNOTSTRUCT -DHASERRORVARS \
                                -DCTIMEISTIMET -DSYSERRISCONST


== Configurazione sistema ==
<pre>
#LINUX.def
ARCHCFLAGS = -DSYSVSIGNAL -DNOWAIT3 -DRSHCOMMAND=\'''"/usr/bin/ssh\"''' \
                  -DNEEDENDIAN -DFDSETNOTSTRUCT -DHASERRORVARS \
                  -DCTIMEISTIMET -DSYSERRISCONST
</pre>


*Editare <code>/etc/hosts</code> '''commentando localhost''' e aggiungendo i nodi
I nodi che faranno parte del cluster dovranno essere specificati nel file <code>/etc/hosts</code> di ogni nodo:
<pre>
127.0.0.1    localhost
127.0.1.1    debian


#/etc/hosts
192.168.100.1  node0
#127.0.0.1      localhost.localdomain  localhost      insanelab-cluster
192.168.100.8 node1
  192.168.100.69 insanelab-cluster
</pre>
  192.168.100.3 node3
''(Si faccia attenzione ad impostare i corretti [[hostname]])''<br />
  192.168.100.5  node5
<br />
  192.168.100.2  node2
Infine, sempre su ogni nodo, si dovrà creare un utente specifico:
<pre>
root@nodeX:~# adduser pvmuser
</pre>


*Creare un utente per ogni nodo
{{Suggerimento|È possibile evitare il dover ripetere le configurazioni effettuate su ciascun nodo a patto di disporre di home directory condivise. }}
root@nodeX:adduser user


== Evitare la password con ssh ==
== Connessione SSH senza password ==
*Bisogna generare una chiave nel server (insanelab-cluster)
Openssh-server dovrà essere installato su tutti i nodi interessati.<br />
Affinché i nodi riescano a comunicare senza che sia necessario ogni volta inserire la password di login al momento della connessione SSH si dovrà generare una chiave nel server (si abbia cura di non inserire alcuna password...):
<pre>
pvmuser@node0:~$ ssh-keygen -t rsa
</pre>


user@insanelab-cluster: ssh-keygen -t rsa
e trasferirla sui nodi:
<pre>
pvmuser@node0:~$ ssh-copy-id pvmuser@192.168.100.8
</pre>


*entrare nella directory <code>/home/user/.ssh/</code>
== Identificazione dei nodi ==
Gli hostname degli host "partecipanti" al cluster dovranno essere inseriti nel file <code>.rhosts</code> presente nella home di ''pvmuser'' (creare il file se non esiste):
<pre>
pvmuser@node0:~$ cat /home/pvmuser/.rhosts
node1 pvmuser
node0 pvmuser
</pre>
Questa operazione dovrà essere fatta su ciascun nodo del cluster.


user@insanelab-cluster: cd /home/user/.ssh
== Avvio di PVM ==
PVM è pronto per essere lanciato da uno qualsiasi dei nodi:
<pre>
pvmuser@node0:~$ pvm


*copiare <code>id_rsa.key</code> in tutti i nodi
pvm> conf
conf
1 host, 1 data format
                    HOST    DTID    ARCH  SPEED      DSIG
                  node0    40000    LINUX    1000 0x00408841
pvm> add node1
add node1
1 successful
                    HOST    DTID
                  node1    80000
pvm> conf
conf
2 hosts, 1 data format
                    HOST    DTID    ARCH  SPEED      DSIG
                  node0    40000    LINUX    1000 0x00408841
                  node1    80000    LINUX    1000 0x00408841
pvm> quit
quit


user@insanelab-cluster: scp id_rsa user@nodeX://home/user/.ssh
Console: exit handler called
pvmd still running.
</pre>


Come si può notare tutte le operazioni sono state effettuate dentro la console di pvm.<br />
Nello specifico:


*Loggarsi nei nodi
* '''conf''': mostra la configurazione attuale
* '''add <hostname>''': aggiunge l'host all'elenco di pvm
* '''delete <hostname>''': rimuove l'host dall'elenco
* '''quit''': esce dalla console (pvm continua ad agire in background)
* '''halt''': per interrompere pvm


ssh user@nodeX
Se si vuole evitare di dover ogni volta inserire gli hostname delle macchine appartenenti al cluster è possibile richiamare un file appositamente creato che contenga l'elenco degli host desiderati:
<pre>
root@node0:~# cat /etc/pvm.nodes
node0
node1
</pre>


*Entrare nella directory <code>.ssh</code> e copiare la chiave in authorizedkey2
Detto file dovrà essere richiamato in questo modo:
<pre>
pvmuser@node0:~$ pvm /etc/pvm.nodes
</pre>


cd .ssh
== Test di esempio ==
cat id_rsa.key >> authorizedkey2
Nei repository sono presenti dei test di esempio che possono essere avviati dalla console di PVM:
rm id_rsa.key
<pre>
root@node0:~# apt-get install pvm-examples
</pre>


*Riavviare ssh ed è fatta!
Per eseguirli dalla console di PVM si utilizzerà il comando ''spawn -> <program name>'':
<pre>
pvmuser@node0:~$ pvm


--[[Utente:J3no|J3no]] 12:58, 22 Feb 2007 (CST)
pvm> spawn -> hello
spawn -> hello
[5]
1 successful
t4000c
pvm> [5:t4000c] i'm t4000c
[5:t4000c] from t80008: hello, world from node0
[5:t4000c] EOF
[5:t80008] EOF
[5] finished
</pre>
 
Happy clustering!
 
{{Autori
|Autore= [[Utente:Pmate|pmate]]
(originariamente scritta da [[Utente:J3no|J3no]])
|Estesa_da=
|Verificata_da=
|Numero_revisori=0
}}


[[Categoria:Cluster]]
[[Categoria:Cluster]]
3 581

contributi