In IT virtualizarea a ajuns sa ocupe un loc important in infrastructura oricarei companii care foloseste tehnologia de server in mod intensiv. Avand in vedere ca sistemele de calcul sunt tot mai performante cu ajutorul unui sistem de virtualizare putem imparti un singur server in mai multe masini virtuale, actiune care reduce considerabil costurile de implementare a diferitelor solutii software.
Datorita avantajelor oferite de sistemul de paravirtualizare, Xen ocupa un loc de frunte in cadrul platformelor de virtualizare. Principalul motiv pentru care sistemul de paravirtualizare este preferat de multe persoane, in mod deosebit de firmele care ofera web hosting si servicii dedicate, este faptul ca se pot impune restrictii foarte clare in ceea ce priveste consumul de resurse. Existenta restrictiilor reprezinta un atu important mai ales datorita mediului in care un sistem virtual urmeaza sa ruleze. Cand pe un server ruleaza mai multe sisteme virtuale consumul de resurse nu mai poate fi oferit pe baza bunului simt, ci necesita impunerea unor reguli stricte pentru ca fiecare sistem virtual sa poata functiona in parametri normali fara a deranja si fara a prelua resursele de care are nevoie sistemul virtual vecin.
Revenind la subiect, cu Xen putem crea astfel de sisteme virtuale cu restrictii foarte clare. Ca platforma software Xen poate folosi mai multe distributii Linux dar prefer Ubuntu pentru simplitatea instalarii. Versiunea care o folosesc si o recomand este Ubuntu Server 8.04 LTS datorita stabilitatii, ultimul LTS de la Ubuntu la ora actuala.
Daca aveti de gand sa urmati tutorialul presupun ca aveti pregatit un sistem cu o configuratie hardware acceptabila – un CPU de min. 2GHz cu tehnologie IntelVT sau asemanatoare, 1GB RAM si un HDD decent – pe care ati instalat Ubuntu Server 8.04 si aveti acces ca root.
Inainte de a face orice altceva trebuie sa oprim AppArmor care, cu toate ca e o ustensila buna, ne incurca cand vine vorba de rularea mai multor sisteme virtuale:
[root@xen ~]# /etc/init.d/apparmor stop Unloading AppArmor profiles : done. [root@xen ~]# update-rc.d -f apparmor remove Removing any system startup links for /etc/init.d/apparmor ... /etc/rcS.d/S37apparmor
Urmatorul pas ar fi sa instalam pachetul “ubuntu-xen-server“:
[root@xen ~]# apt-get install ubuntu-xen-server -y
Pachetul “ubuntu-xen-server” va instala tot ce ne trebuie pentru a pregati sistemul virtual, inclusiv pachetele “xen-hypervisor“, “xen-tools” si “xen-utils” de care vom avea nevoie pentru gestionarea masinilor virtuale.
In mod normal pachetul “ubuntu-xen-server” instaleaza si kernelul necesar pentru rularea sistemelor virtuale dar datorita unui bug in Ubuntu 8.04 pot sa apara probleme de retea. Pentru a rezolva problema vom folosi versiunile de kernel modificate de Hirano Takahito care vin in format .deb si sunt usor de instalat. In cazul de fata voi descarca si instala pachetul “linux-image-2.6.24-19-xen_2.6.24-19.33~zng1_amd64.deb“:
[root@xen ~]# wget http://www.il.is.s.u-tokyo.ac.jp/%7Ehiranotaka/linux-image-2.6.24-19-xen_2.6.24-19.33~zng1_amd64.deb Resolving www.il.is.s.u-tokyo.ac.jp... 133.11.233.21 Connecting to www.il.is.s.u-tokyo.ac.jp|133.11.233.21|:80... connected. Length: 18,986,452 (18M) [application/x-debian-package] 100%[====================================>] 18,986,452 403.56K/s ETA 00:00 17:13:48 (381.71 KB/s) - 'linux-image-2.6.24-19-xen_2.6.24-19.33~zng1_amd64.deb' saved [18986452/18986452] [root@xen ~]# dpkg -i linux-image-2.6.24-19-xen_2.6.24-19.33~zng1_amd64.deb Selecting previously deselected package linux-image-2.6.24-19-xen. (Reading database ... 18979 files and directories currently installed.) Unpacking linux-image-2.6.24-19-xen (from linux-image-2.6.24-19-xen_2.6.24-19.33~zng1_amd64.deb) ... Done. Setting up linux-image-2.6.24-19-xen (2.6.24-19.33~zng1) ... Running depmod. update-initramfs: Generating /boot/initrd.img-2.6.24-19-xen Running postinst hook script /sbin/update-grub. Searching for GRUB installation directory ... found: /boot/grub Searching for default file ... found: /boot/grub/default Testing for an existing GRUB menu.lst file ... found: /boot/grub/menu.lst Searching for splash image ... none found, skipping ... Found Xen hypervisor 3.2, kernel: /boot/vmlinuz-2.6.24-24-xen Found Xen hypervisor 3.2, kernel: /boot/vmlinuz-2.6.24-19-xen Found kernel: /boot/vmlinuz-2.6.24-24-server Found kernel: /boot/memtest86+.bin Replacing config file /var/run/grub/menu.lst with new version Updating /boot/grub/menu.lst ... done [root@xen ~]#
E important sa fiti atenti la arhitectura care o descarcati. Daca folositi arhitectura gresita e posibil sa nu mai porneasca sistemul. Pe arhitectura “i386” e necesar un pas in plus si anume dezactivarea TLS:
[root@xen ~]# mv /lib/tls /lib/tls.bak
Ca sa putem monta discurile virtuale care urmeaza sa fie folosite ca discuri pentru instalarea sistemelor de operare in cadrul masinilor virtuale se va folosi modulul loop. In mod implicit se permit pana la opt dispozitive de tip loop. Putem mari numarul de dispozitive, si chiar e recomandat, modificand in fisierul “/etc/modules” linia “loop” sa arate astfel:
loop max_loop=32
Daca avem un sistem foarte puternic putem inlocui 32 cu 64 sau cu orice numar care sa depaseasca putin numarul de sisteme virtuale care le putem instala in sistem.
In momentul acesta avem sistemul pregatit pentru crearea de masini virtuale. Pentru a vedea ce sisteme de operare putem instala pe masinile virtuale putem verifica directorul “/usr/lib/xen-tools“:
[root@xen ~]# ls /usr/lib/xen-tools centos-4.d dapper.d etch.d fedora-core-6.d gentoo.d lenny.d centos-5.d debian.d fedora-core-4.d fedora-core-7.d gutsy.d sarge.d common.sh edgy.d fedora-core-5.d feisty.d hardy.d sid.d [root@xen ~]#
Dupa cum se vede, putem instala mai multe distributii. Nu sunt toate distributiile care pot fi instalate in Xen ci doar cateva care s-au dovedit a fi foarte folosite. O lista mai mare de distributii poate fi gasita pe pagina XenWiki DistributionSupport.
Mai departe vom crea un director in care urmeaza sa fie pastrate sistemele virtuale. In cazul de fata voi crea directorul “/home/xen” dar e recomandat ca imaginile sa fie pastrate pe un RAID 10 sau un alt mediu de stocare capabil sa ofere atat performanta cat si redundanta pentru a proteja datele.
[root@xen ~]# mkdir /home/xen
Inainte sa cream sisteme virtuale e bine sa scapam de de introducerea unor parametri. Deschidem cu un editor de texte fisierul “/etc/xen-tools/xen-tools.conf” si incercam sa il personalizam astfel incat la crearea unei imagini sa rulam mai putine comenzi. Un exemplu ar fi urmatorul:
dir = /home/xen install-method = debootstrap size = 4Gb memory = 256Mb swap = 512Mb fs = ext3 dist = hardy image = sparse gateway = 192.168.2.1 netmask = 255.255.255.0 broadcast = 192.168.2.255 dhcp = 0 passwd = 1 kernel = /boot/vmlinuz-`uname -r` initrd = /boot/initrd.img-`uname -r` arch=amd64 mirror = http://archive.ubuntu.com/ubuntu/ ext3_options = noatime,nodiratime,errors=remount-ro ext2_options = noatime,nodiratime,errors=remount-ro xfs_options = defaults reiser_options = defaults disk_device = xvda
Semnificatia fiecarei linii care poate fi adaugata este explicata prin comentarii in fisierul “/etc/xen-tools/xen-tools.conf“. Liniile care merita explicate sunt:
- dir – directorul in care vor fi salvate masinile virtuale create;
- size – spatiul implicit pentru un sistem virtual;
- memory – cantitatea de memorie alocata;
- swap – marimea partitiei de swap;
- dist – distributia implicita pentru masinile virtuale noi;
- gateway, netmask, broadcast – parametri de configurare a retelei;
- dhcp – utilizarea DHCP pentru configurarea automata a parametrilor de retea;
- passwd – specificarea interactiva a unei parole de root pentru un sistem nou;
- arch – arhitectura sistemului de operare utilizat in masina virtuala;
- mirror – mirrorul implicit pentru instalarea distributiilor; optional se pot specifica mai multe mirroruri pentru distributiile bazate pe Debian: mirror_sarge, mirror_edgy, mirror_gutsy etc;
Dupa ce am facut toate aceste instalari si modificari sistemul este pregatit pentru a crea masini virtuale dar inainte de asta trebuie sa il restartam pentru a boota de pe kernelul Xen. Dupa restart verificam daca kernelul s-a incarcat corect:
[root@xen ~]# uname -a Linux xen 2.6.24-24-xen #1 SMP Sat Aug 22 02:23:48 UTC 2009 x86_64 GNU/Linux [root@xen ~]#
Daca totul e in regula putem crea prima masina virtuala folosind urmatoarea comanda:
[root@xen ~]# xen-create-image --hostname=hardy.lamp.ro --ide --ip=192.168.2.200 --force General Information -------------------- Hostname : hardy.lamp.ro Distribution : hardy Partitions : swap 512Mb (swap) / 4Gb (ext3) Image type : sparse Memory size : 256Mb Kernel path : /boot/vmlinuz-2.6.24-24-xen Initrd path : /boot/initrd.img-2.6.24-24-xen Networking Information ---------------------- IP Address 1 : 192.168.2.200 [MAC: 00:16:3E:E2:C0:E3] Netmask : 255.255.255.0 Broadcast : 192.168.2.255 Gateway : 192.168.2.1 Creating partition image: /home/xen/domains/hardy.lamp.ro/swap.img Done Creating swap on /home/xen/domains/hardy.lamp.ro/swap.img Done Creating partition image: /home/xen/domains/hardy.lamp.ro/disk.img Done Creating ext3 filesystem on /home/xen/domains/hardy.lamp.ro/disk.img Done Installation method: debootstrap Done Running hooks Done No role scripts were specified. Skipping Creating Xen configuration file Done Setting up root password Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully All done Logfile produced at: /var/log/xen-tools/hardy.lamp.ro.log [root@xen ~]#
Crearea unei noi imagini dureaza de obicei 3-4 minute sau poate mai mult daca se foloseste un sistem slab sau unul incarcat. Observam ca am rulat comanda “xen-create-image“, comanda pentru crearea unei imagini, folosind doar patru parametri. Restul datelor au fost preluate automat din fisierul “/etc/xen-tools/xen-tools.conf” care l-am modificat inainte de restart.
Parametri folositi sunt dupa cum urmeaza:
- –hostname – specifica numele sistemului virtual creat;
- –ide – foloseste conventia de nume IDE pentru discurile create (hda, nu sda, chiar sistemul ruleaza pe HDD-uri SATA sau SCSI;
- –ip – specifica adresa IP a sistemului virtual, restul parametrilor de retea fiind preluati din fisierul” /etc/xen-tools/xen-tools.conf“;
- –force – forteaza crearea imaginii ceea ce inseamna, de fapt, suprascrierea imaginii in cazul in care aceasta exista deja;
Pentru fiecare sistem virtual creat se creaza un fisier in directorul “/etc/xen” in care se vor pastra setarile sistemului. In cazul sistemului nostru, fisierul va fi “/etc/xen/hardy.lamp.ro.cfg“. Inainte de a porni sistemul virtual creat trebuie sa verificam fisierul de configurare pentru a face o mica corectura. Vom cauta urmatorul bloc:
disk = [ 'file:/home/xen/domains/hardy.lamp.ro/swap.img,hda1,w', 'file:/home/xen/domains/hardy.lamp.ro/disk.img,hda2,w', ]
Aici se da locatia celor doua discuri virtuala, stocare si swap, care vor fi folosite. Directiva “file” nu mai este folosita, desi utilitarul “xen-create-image” o foloseste. Pentru a evita erorile va trebui sa inlocuim directiva “file” cu “tap:aio“. Fisierul rezultat va fi urmatorul:
disk = [ 'tap:aio:/home/xen/domains/hardy.lamp.ro/swap.img,hda1,w', 'tap:aio:/home/xen/domains/hardy.lamp.ro/disk.img,hda2,w', ]
Dupa ce am facut aceasta corectura si am salvat modificarile putem, in sfarsit, sa pornim sistemul virtual proaspat creat folosind comanda “xm create“:
[root@xen ~]# xm create /etc/xen/hardy.lamp.ro.cfg Using config file "/etc/xen/hardy.lamp.ro.cfg". Started domain hardy.lamp.ro [root@xen ~]#
Pentru a verifica daca sistemul virtual a fost pornit vom folosi comanda “xm list“:
[root@xen ~]# xm list Name ID Mem VCPUs State Time(s) Domain-0 0 1739 2 r----- 81.0 hardy.lamp.ro 1 256 1 -b---- 2.6 [root@xen ~]#
Putem vedea aici o lista a tuturor masinilor virtuale create. In cazul nostru avem doar Domain-0 (dom0) care este masina gazda si “hardy.lamp.ro” care este singura masina virtuala creata. Pentru a verifica toate masinile virtuale create, chiar si cele care nu sunt pornite, vom folosi comanda “xen-list-images“:
[root@xen ~]# xen-list-images Name: hardy.lamp.ro Memory: 256 IP: 192.168.2.200 [root@xen ~]#
Din nou, vom vedea o singura masina virtuala pentru ca singura creata e “hardy.lamp.ro“. Daca ar fi mai multe le-am vedea pe toate listate pe ecran.
Acum ca avem o masina virtuala creata ar trebui sa intram in ea sa o pregatim pentru productie. Intrarea in masina virtuala se face cu ajutorul comenzii “xm console“:
[root@xen ~]# xm console hardy.lamp.ro hardy.lamp.ro login: root Password: Linux hardy.lamp.ro 2.6.24-24-xen #1 SMP Sat Aug 22 02:23:48 UTC 2009 x86_64 root@hardy:~#
Dupa ce am terminat pregatirea masinii virtuale o putem opri folosind in sistemul gazda (dom0) comanda “xm shutdown“:
[root@xen ~]# xm shutdown hardy.lamp.ro
Daca dorim ca un sistem virtual sa fie pornit odata cu sistemul gazda (dom0) va trebui sa cream un link catre fisierul de configurare in directorul “/etc/xen/auto“:
[root@xen ~]# ln -s /etc/xen/hardy.lamp.ro.cfg /etc/xen/auto
Acum nu ne mai ramane decat sa lansam sistemul virtual in productie si sa cream altele pe sistemul gazda
Popularity: 10% [?]





Eu as prefera totusi.. sa folosesc un Debian minimal (netinstall) decat Ubuntu, numai sa existe xen in repo-urile debian (n-am incercat).
In ultima perioada am folosit mult Ubuntu. Asta e motivul pentru care am facut articolul pentru Ubuntu. Pe Debian nu am incercat, dar observ ca se poate. Diferenta foarte mare nu ar trebui sa fie avand in vedere ca Ubuntu e facut tot pe Debian
Tocmai acum m-am jucat si eu cu XEN. Este foarte tare si stie face destul de multe in ceea ce priveste VPS-ul. Mersi pentru tutorial Sergiu
No problem, dude
Trebuie sa ma joc si eu intr-o zi cu Xen
Incearca-l. La cum te cunosc, sunt sigur ca o sa-ti placa. Isi izoleaza foarte bine resursele. De cateva zile incerc tot felul de traznai in masinile virtuale sa vad cum pot bloca sistemul gazda sau cel putin vreun sistem virtual vecin si inca nu am reusit