La virtualizzazione ci espone alla voglia di fare il backup per intero delle nostre VM e non a caso i diversi vendor di hypervisor si sono per la maggior parte attivati in tal senso.
XenServer da questo punti di vista ci ha sempre messo un po’ in difficoltà in tal senso per via del fatto che non si potevano fare fino a poco tempo fa gli snapshot delle VM a caldo a meno di avere storage quali NetApp o Equallogic (su iSCSI). Qualche miglioramento l’avevamo già visto con la versione 5.0 di XenServer che ci permetteva di fare uno snapshot da CLI di una VM posta su uno storage NFS o locale formattato in ext3.
Per le macchine windows sin da allora
c’era la possibilità di effettuare lo snapshot in “quiesce mode” (che
richiede una macchina windows con il servizio Xen VSS abilitato) o “normale”.
Ebbene quello che mi accingo a farvi
vedere è una serie di esempi di semplici batch che opportunamente riadattati e
inseriti in job opportunamente schedulati
vi permetteranno di mettere in piedi un server per fare backup delle
xenVM in maniera centralizzata: per tutto ciò è necessario lo xencenter,
opzionalmente winscp, e un po’ di spazio
disco dove mettere i backup…magari una LUN iSCSI su Openfiler, piuttosto che
un semplice NAS CIFS sulla vostra rete.
Lo script lo posizioniamo nella
cartella di installazione dello xencenter e si compone dei seguenti steps:
1) facciamo lo snapshot della VM e
mettiamo in una variabile d’ambiente l’UUID dello snapshot
xe.exe -s <ip pool master> -u
root -pw <root pwd> vm-snapshot vm=”<name label della
VM>” new-name-label=”<name label dello snapshot>” >
snapuuid.txt
2) scriviamo il contenuto della
variabile in un file
set /P snapuuid=<snapuuid.txt
3) dato che l’output dello snapshot è
un template nascosto, convertiamo il template in una VM in modo da renderne più
immediato il restore
xe.exe -s <ip pool master> -u
root -pw <root pwd> template-param-set is-a-template=false
ha-always-run=false uuid=%snapuuid%
4) esportiamo la VM nel percorso a noi
gradito
xe.exe -s <ip pool master> -u
root -pw <root pwd> vm-export vm=%snapuuid% filename=path\<nome
backup>.xva
5) eliminiamo lo snapshot
xe.exe -s <ip pool master> -u
root -pw <root pwd> vm-uninstall uuid=%snapuuid% –force
6) cancelliamo il file di appoggio
del snapuuid.txt
NB: il comando “vm-snapshot”
del primo step può essere sostituito da “vm-snapshot-with-quiesce” a
patto che sulla VM abbiamo preventivamente abilitato lo XenVssProvider che si attiva all’interno della
VM lanciando il comando
“install-XenProvider.cmd” collocato nella directory di
installazione degli Xentools della VM
Questo script, così com’è, già sarebbe
sufficiente per creare degli script di backup ma ha un inconveniente: qualora
il master del pool cambi è necessario
modificare lo script. Per renderlo un po’ più flessibile sotto questo
punto di vista può essere utile estrapolare l’informazione del master del pool
a runtime come primo step
dell’esecuzione dello script e all’uopo ci può tornare utile winscp puntando
all’ip di una qualunque macchina del pool e relativa hostkey rsa che si usa per
le connessioni SSH all’host (purtroppo o per fortuna il demone del telnet non
c’è su Xenserver).
L’unica cosa che dobbiamo conoscere a
monte è l’UUID del pool di XenServer:
“c:\program files
(x86)\winscp\winscp.exe” root:<root pwd>@<ip xenserver host>
/hostkey=”<hostkey rsa SSH>” /command “call xe pool-param-get
param- name=”master” uuid=<UUID XenServer Farm> >> /uuidmaster.txt”
“c:\program files
(x86)\winscp\winscp.exe” root:<root pwd>@<ip xenserver host>
/hostkey=”<hostkey rsa SSH>” /command “call mkdir
/appoggio”
“c:\program files
(x86)\winscp\winscp.exe” root:<root pwd>@<ip xenserver host>
/hostkey=”<hostkey rsa SSH>” /command “call mount -t cifs
//<xencenter
machine>/<share$> -o username=<dominio>/<username>,password=<password>
/appoggio”
“c:\program files
(x86)\winscp\winscp.exe” root:<root pwd>@<ip xenserver host>
/hostkey=”<hostkey rsa SSH>” /command “call cp
/uuidmaster.txt /appoggio”
set /P uuidmaster=<uuidmaster.txt
“c:\program files
(x86)\winscp\winscp.exe” root:<root pwd>@<ip xenserver host>
/hostkey=”<hostkey rsa SSH>” /command “call xe host-param-get
param- name=”address” uuid=%uuidmaster% >> /ipmaster.txt”
“c:\program files
(x86)\winscp\winscp.exe” root:<root pwd>@<ip xenserver host>
/hostkey=”<hostkey rsa SSH>” /command “call cp
/ipmaster.txt /appoggio”
set /P ipmaster=<ipmaster.txt
xe.exe -s %ipmaster% -u root -pw
<root pwd> vm-snapshot vm=”<name label della VM>”
new-name-label=”<name label dello snapshot>” > snapuuid.txt
set /P snapuuid=<snapuuid.txt
xe.exe -s %ipmaster% -u root -pw
<root pwd> template-param-set is-a-template=false ha-always-run=false
uuid=%snapuuid%
xe.exe -s %ipmaster% -u root -pw
<root pwd> vm-export vm=%snapuuid% filename=path\<nome backup>.xva
xe.exe -s %ipmaster% -u root -pw
<root pwd> vm-uninstall uuid=%snapuuid% –force
del snapuuid.txt
Se poi vogliamo essere sicuri del
risultato dello snapshot, non vogliamo/possiamo usare lo XenVssProvider, e
soprattutto ci possiamo permettere di avere offline la VM per circa un minuto
possiamo pensare di fare un suspend della VM prima dello snapshot per poi farne
subito un resume….come? Ecco fatto:
xe.exe -s %ipmaster% -u root -pw
<root pwd> vm-suspend vm=”<name label della VM>”
xe.exe -s %ipmaster% -u root -pw
<root pwd> vm-snapshot vm=”<name label della VM>”
new-name-label=”<name label dello snapshot>” > snapuuid.txt
xe.exe -s %ipmaster% -u root -pw
<root pwd> vm-resume vm=”<name label della VM>”
set /P snapuuid=<snapuuid.txt
xe.exe -s %ipmaster% -u root -pw
<root pwd> template-param-set is-a-template=false ha-always-run=false
uuid=%snapuuid%
xe.exe -s %ipmaster% -u root -pw
<root pwd> vm-export vm=%snapuuid% filename=path\<nome backup>.xva
xe.exe -s %ipmaster% -u root -pw
<root pwd> vm-uninstall uuid=%snapuuid% –force
del snapuuid.txt
Questo è quanto per ora…spero possa
tornare utile a molti di voi…
Alla prox,
Lorenzo Di Palma