Premier Training & Business Partner Red Hat

Gestire i nodi di un cluster contemporaneamente con ClusterShell

Alessandro Lorenzi
Ti piacerebbe diventare anche tu uno di noi e
pubblicare i tuoi articoli nel blog degli RHCE italiani?

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.

Info about author

Alessandro Lorenzi

RHCE Consultant at Extraordy