Intro
Xen is an OpenSource Hypervisor (virtual machine monitor) that allow the execution of different operating systems at the same time on the same phisical machine.
A virtualization system based on Xen is based on the Hypervisor that runs at the lowest and most privileged execution level and one or more virtual machines (guests): the schedule of the vms on the phisical CPU is handled by the hypervisor; the first operating system in execution, called "Domain 0", differs from all the others because it can do administrative tasks; in other words: all the virtual machines are handled running commands from the Dom 0.
L'avvio di un sistema di virtualizzazione Xen consiste quindi nell'avvio da parte del bootloader (grub) dell'Hypervisor che provvederà poi ad eseguire il kernel del sistema operativo Dom 0; fatta eccezione per le prime righe di output, il boot di un sistema Xen corrisponde quasi identicamente al tradizionale boot del kernel.
Xen offre 2 modalità di virtualizzazione:
- paravirtualization
- full virtualization
La paravirtualization non richiede alcun hardware particolare e consente l'esecuzione di macchine virtuali il cui kernel deve però essere opportunamente modificato per essere eseguito in ambiente Xen.
La full-virtualization, al contrario, richiede processori che offrono features di virtualizzazione, flag 'vmx' e 'svm' rispettivamente per CPU Intel e AMD, e consente l'esecuzione di qualsiasi macchina virtuale non modificata.
In sostanza: se si ha a disposizione un processore che offre estensioni per la virtualizzazione hardware, Xen consente di gestire qualsiasi sistema operativo non modificato, alternativamente, grazie alla paravirtualizzazione, con Xen è possibile eseguire macchine virtuali opportunamente modificate, in cui il sistema operativo guest "è conscio" di essere eseguito all'interno dell'ambiente Xen.
Xen 3.2 con Debian Etch
Installazione software
Per avere un sistema Xen funzionante è necessario installare:
- Xen Hypervisor
- Kernel opportunamente patchato
- libc6-xen
- Xen utils
L'attuale versione stable di Debian (4.0 - Etch) fornisce la versione 3.0.3 di Xen, un po' datata considerando che la latest release disponibile su xen.org è la 3.2: pertanto è a mio avviso opportuno utilizzare la versione 3.2 disponibile nei backports.
Dopo aver modificato la configurazione di apt come spiegato presso la pagina di documentazione dei backports si procede con l'installazione dei pacchetti necessari:
apt-get -t etch-backports install xen-hypervisor-3.2-1-i386 \ linux-image-2.6.18-6-xen-686 \ libc6-xen \ xen-utils-3.2-1
L'installazione provvede a modificare la configurazione del bootloader Grub includendo il necessario per avviare la macchina con Xen. E' necessario a questo punto effettuare il reboot della macchina avendo cura di scegliere dal menù di Grub la voce relativa a Xen: il sistema, fatta eccezione per i primi messaggi generati dall'hypervisor, procedere come un normale boot con kernel linux.
Configurazione di xend
Affinchè un sistema Xen funzioni correttamente è necessario che sia in esecuzione xend: il demone che svolge funzioni di management delle virtual machines e indispensabile per lo start,stop e gestione delle macchine virtuali.
La configurazione avviene modificando il file /etc/xen/xend-config.xsp; questo un esempio (tolti i commenti):
(xend-http-server yes) (xend-unix-xmlrpc-server yes) (xend-relocation-server yes) (xend-port 8000) (xend-relocation-port 8002) (xend-address '') (xend-relocation-address '') (xend-relocation-hosts-allow '') (network-script network-bridge) (vif-script vif-bridge) (dom0-min-mem 196) (dom0-cpus 0) (vnc-listen '0.0.0.0') (vncpasswd '')
Anche la configurazione del networking del sistema di virtualizzazione è gestita dal xend.
Configurazione del networking
Ed ora una parte particolarmente spinosa della faccenda (soprattutto se si stanno muovendo i primi passi): il networking.
Come spiegato in modo abbastanza chiaro presso wiki.kartbuilding.net Xen offre le seguenti possibilità per interconnettere le macchine virtuali alla rete:
- Bridging: viene configurato un bridge sul Dom 0 e le macchine virtuali risiedono nella stessa rete L2 del Dom 0
- NAT: una o più reti dedicate alle macchine virtuali. Opportune regole di NAT sul Dom 0 consentono di raggiungere dalla rete le macchine virtuali
- Routing: una o più reti dedicate alle macchine virtuali col Dom 0 che implementata funzionalità di routing
Configurazione del networking: bridging
Se si intende "far apparire" le macchine virtuali sullo stesso vostro segmento di rete è necessario utilizzare il bridging.
Per configurare il networking è necessario metter mano al file di configurazione di xend; questa è la parte di configurazione da me utilizzata per ottenere una configurazione in bridging:
... (network-script network-bridge) (vif-script vif-bridge) ...
Dopo ogni modifica al file fi configurazione è necessario restartare xend:
syneus:~# /etc/init.d/xend restart
Gestione di macchine virtuali
Concetti base
Le macchine virtuali sono definite con Xen da un semplice file di configurazione testuale che specifica le proprietà della macchina:
- kernel da utilizzare
- memoria assegnata
- dischi visti dalla vm
- hostname
- impostazioni del networking
- ...
Per creare ed eseguire una macchina virtuale è necessario pertanto avere a disposizione il kernel appropriato, e almeno 2 device che verranno utilizzati dalla vm come:
- Filesystem di root
- Swap
Lo storage può essere reso disponibili alle vm in svariati modi, fra i quali:
- Disco o partizione fisica
- Loopback file image: un singolo file sul Dom 0 che conterrà il filesystem della vm
- Volume LVM
Rimando alla documantazione di Xen relativa allo storage per maggiori dettagli.
Uso del tool di gestione: xm
Il principale tool di gestione delle macchine virtuali Xen è xm; con questo comando, che si interfaccia col demone xend, è possibile avviare,stoppare e gestire il sistema di virtualizzazione.
Questi i principali comandi:
list List information about all/some domains. create Create a domain based on. console Attach to 's console. destroy Terminate a domain immediately. shutdown Shutdown a domain. migrate Migrate a domain to another machine. info
Per avviare una macchina virtuale:
syneus:~# xm create /etc/xen/xen-vm1.cfg Using config file "/etc/xen/xen-vm1.cfg". Started domain xen-vm1 syneus:~#
Per visualizzare le macchine virtuali correntemente in esecuzione sul sistema:
syneus:~# xm list Name ID Mem VCPUs State Time(s) Domain-0 0 867 2 r----- 531.3 xen-vm1 1 128 1 -b---- 3.7 syneus:~#
Per connettersi alla console di una vm:
xm console 1
NB: per disconnettersi utilizzare i tasti CTRL+5
Creazione di macchine virtuali con gli xen-tools
La creazione di macchine virtuali può essere fatta manualmente: si sceglie il tipo di storage da utilizzare, lo si prepara, si installa un sistema operativo base sul filesystem e si crea un file di configurazione valido per xen; nulla di male se non che, per Debian GNU/Linux, queste operazioni possono essere fatte in modo automatico con gli xen-tools: un set di scripts che consentono di creare facilmente nuovi xen guest domains su un Dom 0 Debian.
Questo è un esempio di creazione di una vm con filesystem su una loopback image:
xen-create-image --hostname=vm-test1 \ --size=2Gb --swap=128Mb --dir=/home/xen \ --ip=192.168.1.1 --netmask=255.255.255.0 --gateway=192.168.1.1 \ --dist=etch \
Questo è un esempio di creazione di una vm con filesystem su un volume LVM:
xen-create-image --hostname=vm-test1 \ --size=2Gb --swap=128Mb \ --lvm=gr01 \ --ip=10.1.2.142 --netmask=255.255.240.0 --gateway=10.1.0.10 \ --dist=etch
Al termine del lavoro che si può seguire in diretta con un tail -f sull'opportuno logfile in /var/log/xen-tools/) si avrà a disposizione un file di configurazione (in /etc/xen) utilizzabile per avviare, la macchina virtuale appena definita.
Migration
Una funzionalità a mio avviso estremamente interessante offerta da Xen è la possibilità di migrare una macchina virtuale da una macchina fisica ad un'altr. Il tutto, se si utilizza la live migration, senza necessità di spegnere la macchina fisica e quindi per gli utenti finali, senza alcuna percezione di disservizio.
Per effettuare la live-migration è necessario che:
- entrambe le macchine stiano eseguendo Xen
- la macchina di destinazione deve avere sufficienti risorse
- entrambe le macchine fisiche devono risiedere nella stessa rete L2
- sia disponibile una soluzione di storage appropriata: in particolare i filesystems della vm in migrazione devono essere disponibili sulla macchina fisica di destinazione
Convirt: una GUI di management
Da completare...
