Realizzazione di un cluster Condor su macchine virtuali Davide Petturiti Sistemi Operativi Avanzati Prof. Osvaldo Gervasi A.A. 2007/2008 Corso di Laurea Specialistica in Informatica Facoltà di Scienze Matematiche, Fisiche e Naturali Università degli Studi di Perugia
1 Introduzione Senza scendere eccessivamente nei dettagli, per i quali si rimanda alle dispense del docente [1], Condor è un sistema batch sviluppato dall Università del Wisconsin, che consente di implementare High Throughput Computing (HTC) clusters. Più precisamente, Condor si occupa della gestione del carico computazionale di jobs che richiedono grandi risorse di calcolo. Esso fornisce un meccanismo di coda per i jobs, consente la scelta della politica di scheduling e dello schema di priorità, inoltre, Condor permette la gestione ed il monitoraggio delle risorse. Semplicemente, gli utenti sottomettono i loro jobs paralleli o seriali a Condor, il quale li posiziona in coda, sceglie dove e quando eseguire i jobs basati su una certa politica, e controlla attentamente il loro avanzamento; in fine, Condor informa gli utenti del completamento dei jobs. Condor può essere usato per gestire sia un cluster di nodi dedicati (come un cluster Beowulf) che per sfruttare la potenza di calcolo non utilizzata nei momenti di idle di sistemi desktop. In questo ultimo caso, Condor può essere configurato per usare solo le workstations nelle quali sia il mouse che la tastiera sono in uno stato di quiescenza; nel momento in cui una macchina uscirà dallo stato di idle, Condor produrrà un checkpoint e migrerà il job su un altra macchina in idle. Il meccanismo del ClassAd costituisce una struttura molto flessibile con la quale coniugare le richieste di risorse (da parte dei jobs) con le offerte di risorse (da parte dei nodi): sia i jobs che i nodi sono in grado di esprimere le loro richieste e preferenze in termini di risorse. Condor (citando le parole del docente) è anche aperto alla grid, nel senso che la tecnologia flocking permette a più installazioni Condor di lavorare insieme. Inoltre, Condor racchiude in sé molti dei più recenti protocolli per Grid, come ad esempio Globus. Sottolineiamo in fine, come già premesso all inizio, che Condor è un software open-source sviluppato dal Condor Research Project, e disponibile per più piattaforme, assieme ad una dettagliata documentazione, al sito [2]. 2 Macchine Virtuali Come nella precedente esperienza per l implementazione di un cluster open- Mosix, anche in questo caso, è stato necessario affidarsi ad un software per la realizzazione di macchine virtuali, vista la non disponibilità di macchine reali su cui lavorare. Perciò, anche in questa seconda prova è stato utilizzato il software open- 1
source, innotek VirtualBox, disponibile (assieme ad una nutrita documentazione) al sito [3]. Nello specifico, sono state create due macchine virtuali sulle quali è stata installata la distribuzione Linux, debian 4.0 - etch, reperibile al sito [4]. Una delle due macchine è stata configurata come server (installando i demoni dei vari servizi di rete), mentre l altra è stata configurata come client. Chiaramente, le due macchine virtuali devono essere collegate in rete tra di loro, in modo da poter dialogare ; ciò è possibile impostando l interfaccia di rete virtuale di ciascuna macchina come Rete interna, tramite l apposito wizard di VirtualBox 1. A questo punto, si dovranno configurare le due interfaccie di rete a livello di kernel: per semplicità si è scelto di associare all interfaccia di rete del server, l indirizzo IP 192.168.1.1, mentre a quella del client, l indirizzo IP 192.168.1.2. 3 Installazione di Condor Premettiamo che, siccome lavoreremo in una sottodirectory della home e poichè Condor non richiede i privilegi di root, tutta la parte che segue sarà svolta da normale utente: nel caso specifico davide. L installazione di Condor ha inizio, ovviamente, scaricando l ultima release di Condor dal sito [2]. Sul sito sono disponibili diverse release per i diversi sistemi operativi supportati. Nel nostro caso, scaricheremo la release per debian 4.0, che si presenta come un file compresso.tar.gz. Al momento della scrittura di questo documento, la versione più recente di Condor è condor-6.8.8-linux-x86-debian40.tar.gz Una volta scaricato il file nella macchina virtuale, occorre, innanzitutto, copiarlo nella directory home (se non vi è già posizionato): nel caso particolare, esso verrà posto nella cartella /home/davide Il file scaricato deve essere decompresso, eseguendo il comando tar -zxvf condor-6.8.8-linux-x86-debian40.tar.gz 1 Sottolineiamo che, in ogni macchina virtuale, durante l installazione del sistema opereativo, l interfaccia di rete è stata impostata come NAT (sempre usando l apposito wizard di VirtualBox) in modo da usufruire della connessione ad Internet del computer host. 2
Ora, occorre creare una cartella condor in /home/davide dove riporre tutti i file relativi a Condor, eseguendo il comando mkdir /home/davide/condor Fatto ciò, ci si sposta nella cartella ottenuta dalla decompressione del file.tar.gz, con il comando cd /home/davide/condor-6.8.8-linux-x86-debian40 Una volta dentro alla cartella, si esegue lo script di installazione./condor configure --install=/home/davide/condor-6.8.8-linux-x86-debian40/release.tar --install-dir=/home/davide/condor --local-dir=/home/davide/condor Per semplificarci la vita nel lavorare con Condor, aggiungiamo in fondo al file /home/davide/.bashrc, i seguenti comandi per esportare le variabili d ambiente che interessano Condor export CONDOR CONFIG=/home/davide/condor/etc/condor config export PATH=$PATH:/home/davide/condor/sbin/ export PATH=$PATH:/home/davide/condor/bin/ export PATH=$PATH:/home/davide/condor/etc/examples/ Andiamo avanti modificando il file /etc/hosts nel modo seguente 127.0.0.1 localhost 192.168.1.1 condormaster 192.168.1.2 condorslave A questo punto, è necessario modificare il file con le impostazioni locali di condor, cioè /home/davide/condor/condor config.local. In esso, supponendo, di lavorare sulla macchina virtuale slave, aggiungiamo all inizio NETWORK INTERFACE=192.168.1.2 NETWORK HOST=condorslave CONDOR HOST=condormaster FULL HOSTNAME=condorslave 3
Sempre nello stesso file, occorre modificare il valore di alcune variabili come segue UID DOMAIN=$(FULL HOSTNAME) FILESYSTEM DOMAIN=$(FULL HOSTNAME) CONDOR IDS=1000.1000 DAEMON LIST=MASTER, SCHED, STARTD Come premesso, le modifiche apportate fin ora al file, riguardano la macchina slave; per quanto riguarda il master, il procedimento è del tutto analogo tranne che per la prima parte (in cui si devono usare il nome e l indirizzo IP del master) e per il valore della seguente variabile DAEMON LIST=MASTER, SCHED, STARTD, COLLECTOR, NEGOTIATOR Adesso, sarà necessario modificare il file con le impostazioni generali di condor, cioè /home/davide/condor/etc/condor config. Il file deve essere modificato allo stesso modo, sia sul master che sullo slave, come segue RELEASE DIR=/home/davide/condor UID DOMAIN=$(FULL HOSTNAME) FILESYSTEM DOMAIN=$(FULL HOSTNAME) COLLECTOR NAME=My Pool FLOCK FROM=* FLOCK TO=* HOSTALLOW READ=* HOSTALLOW WRITE=* L ultima operazione da fare è modificare il file che contiente gli script per l esecuzione di Condor, cioè /home/davide/condor/etc/examples/condor.boot, nel quale occorre cambiare il valore della seguente variabile MASTER=/home/davide/condor/sbin/condor master 4 Avvio di Condor Eseguita la configurazione, sarà possibile avviare Condor (sia sul master che sullo slave) con lo script condor.boot start 4
A questo punto, attendendo alcuni secondi per dar tempo ai vari demoni di partire, si potrà visualizzare lo stato di condor con il comando condor status La Figura 1 riporta il risultato a video dell esecuzione del comando prima citato quando sia il client che lo slave sono attivi e connessi. Figura 1: Esecuzione del comando condor status sul master L attività di Condor può essere cessata eseguendo lo script condor.boot stop 5 Esempio di sottomissione di jobs In questa sezione verrà mostrata, a titolo puramente esemplificativo, la sottomissione di due jobs in modo tale da vedere la loro distribuzione nei due nodi del nostro piccolo cluster. Anche se è indifferente in quale dei due nodi eseguire la sottomissione, supponiamo di lavorare sullo slave. Innanzitutto, creiamo un sorgente in linguaggio C che realizzi un loop infinito, come nel Listato 1. #include <s t d i o. h> Listato 1: Sorgente foo.c int main ( int argc, char argv ){ for ( ; ; ) p r i n t f ( Ciao \n ) ; return 1 ; } 5
Scritto questo banalissimo programma, compiliamolo con il comando gcc -o foo foo.c Adesso non ci rimane che creare il file di sottomissione, come quello riportato nel Listato 2. Listato 2: File di sottomissione foo.sub Executable=foo Universe=v a n i l l a output=foo. out e r r o r=foo. e r r Log=foo. l o g s h o u l d t r a n s f e r f i l e=yes w h e n t o t r a n s f e r o u t p u t=on EXIT Fatto ciò, si sottometterà il job con il comando condor submit foo.sub La Figura 2 riporta il risultato a video dell esecuzione del comando sopra riportato. Figura 2: Esecuzione del comando condor submit sullo slave Si può visualizzare a video lo stato della coda con il comando condor q Tale comando produrrà il risultato mostrato in Figura 3. Il flag R visibile in Figura 3, indica che il job è in esecuzione. Eseguendo adesso il comando condor status, si ottiene il risultato riportato in Figura 4. Per poter apprezzare la distribuzione dei job sui due nodi, occorre sottomettere un nuovo job: nel nostro caso eseguiremo nuovamente il comando condor submit con il file di sottomissione foo.sub. L esecuzione del comando condor q dopo aver sottomesso anche il secondo job, produrrà il risultato di Figura 5. 6
Figura 3: Esecuzione del comando condor q sullo slave Figura 4: Esecuzione del comando condor status sul master, dopo la sottomissione di un job Figura 5: Esecuzione del comando condor q sullo slave, dopo la sottomissione di due jobs 7
Come ultima cosa, l esecuzione del comando condor status ci permette di vedere la distribuzione dei due jobs sottomessi a Condor, in quanto entrambi i due nodi risultano busy, come appare in Figura 6. Figura 6: Esecuzione del comando condor status sullo slave, dopo la sottomissione di due jobs 8
Bibliografia e Sitografia [1] O. Gervasi, Dispense del corso di Sistemi Operativi Avanzati. Disponibili al sito http://ogervasi.unipg.it/sysopiii/. Contattare il docente alla mail osvaldo@unipg.it per le credenziali di accesso al sito. [2] Condor Research Project - Università del Wisconsin-Madison, sito ufficiale, http://www.cs.wisc.edu/condor/. [3] Innotek VirtualBox, sito ufficiale, http://www.virtualbox.org/. [4] Debian, sito ufficiale, http://www.debian.org/. 9