Administrare server open source

Platforma de hosting cu software liber, gratuit, open source.

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
[email protected]:~#

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 πŸ˜‰

Virtualizare

7 Responses so far.

  1. George Jipa says:

    Eu as prefera totusi.. sa folosesc un Debian minimal (netinstall) decat Ubuntu, numai sa existe xen in repo-urile debian (n-am incercat). πŸ™‚

  2. Sergiu says:

    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 πŸ™‚

  3. StandDuPp says:

    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 πŸ™‚

  4. Sergiu says:

    No problem, dude πŸ˜‰

  5. Cracknel says:

    Trebuie sa ma joc si eu intr-o zi cu Xen πŸ™‚

  6. Sergiu says:

    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 πŸ˜€

  7. Viorel says:

    Salut pot aplica tutorialul tau pe un cetos 5.7 sau sa intalez unbutu dar ce versiune ?
    Sunt un incepator deci au inceput intrebarile prostesti πŸ™‚ !