ClusterShell e’ un framework python pensato per la gestione contemporanea di piu’ nodi di un cluster attraverso ssh. E’ possibile utilizzare questo strumento all’interno di uno script in python, oppure attraverso clush, uno strumento utilizzabile in command line.
Installazione
ClusterShell utilizza python ed e’ possibile utilizzarlo sui sistemi *nix: Linux, BSD, MacOSX. Per accedere ai sistemi remoti il sistema migliore e’ utilizzare una connessione SSH.
L’installazione su Red Hat e CentOS richiede l’installazione dei repository EPEL, mentre in Fedora e’ contenuto nei repository ufficili. Se utilizziamo vim e’ una buona idea installare anche vim-clustershell, un pacchetto che contiene la sintassi dei files di configurazione di ClusterShell.
yum install -y clustershell vim-clustershell |
Se non abbiamo una chiave ssh la generiamo e la copiamo attraverso il comando ssh-copy-id su tutti i server che dovremo amministrare.
ssh-keygen ssh-copy-id http01 ssh-copy-id http02 # etc etc... |
ClusterShell da linea di comando
Immaginiamoci ora di avere un cluster con 4 nodi, due dedicati ai server http (http01 e http02) e due dedicati al database PostgreSQL (psql01 e psql02). Per gestire facilmente insiemi di nodi possiamo creare dei “gruppi” nel file di configurazione /etc/clustershell/groups
http: http[01-02] psql: psql[01-02] |
Come vedete e’ possibile abbreviare la lista degli host utilizzando range numerici. Per aiutarci ad ottimizzare il nome degli host possiamo usare il tool nodeset:
# nodeset -f http01 http02 http[10-20] http30 psql01 http[01-02,10-20,30],psql01 |
I due gruppi creati sono quindi @http e @psql. Passiamo ora a dare comandi alle macchine del cluster. L’opzione -b indica a clush come mostrare l’output mentre -w indica la lista dei server o dei gruppi.
clush -b -w @http uname -r clush -b -w http01,psql02 reboot |
Questo comando ci permette di utilizzare clush in modalita’ one-shot: invia il comando, riceve la risposta e chiude la connessione. Se non diamo alcun comando alla fine della riga entriamo in modalita’ interattiva:
clush -b -w @http # clush> |
Dalla shell di clush possiamo dare i comandi contemporaneamente a tutte le macchine. i comandi speciali ?, + e – ci permettono invece di avere una lista dei nodi su cui stiamo lavorando e aggiungerne o rimuoverne altri.
Scriptiamo in python
Una volta capito come funziona clush possiamo passare a scrivere il primo semplice script python.
from ClusterShell.Task import task_self # L'oggetto task ci permette di eseguire i "task" remoti task = task_self() # Prepariamo il comando "uname -r" da eseguire sulle macchine httpd e psql... task.shell("uname -r", nodes="@http,@psql") # ... e facciamo partire l'esecuzione con il metodo .resume() task.resume() # stampiamo il risultato dell'operazione for buf, nodes in task.iter_buffers(): print (nodes, buf) |
Altre info
Questo articolo da’ solo una panoramica introduttiva delle potenzialita’ di ClusterShell, ma sarete in grado di esegure le operazioni piu’ comuni per cui questo tool e’ pensato. Se avete bisogno di approfondire l’uso di questo ottimo strumento e’ disponibile un manuale scaricabile liberamente in PDF.