Xen kasutamine Debian Lenniga
Sisukord
- 1 Xen tarkvara paigaldamine
- 2 Xen tarkvara seadistamine
- 3 Xen domU moodustamine
- 4 domU käivitamine ja seiskamine
- 5 Võrgu kasutamine domU seest
- 6 Serial konsooli kasutamine
- 7 domU konsooli väljundi logimine
- 8 domU liigutamine erinevate dom0 arvutite vahel
- 9 Etch ja Lenny kasutamise ühilduvus dom0 ja domU kasutamisel
- 10 Märkused
- 11 Kasulikud lisamaterjalid
Xen tarkvara paigaldamine
Kaasaegsete Linuxi distributsioonide paketihaldusest on reeglina võimalik Xen tarkvara paigaldada. Nt Debian GNU/Linux v 5.0 puhul AMD64 arhitektuuri jaoks tuleb paigaldada paketid
- Xen hüperviisor - xen-hypervisor-3.2-1-amd64
- Xen tuum - linux-image-2.6.26-2-xen-amd64 (millegipärast nimetatakse seda paketti 'oldstyle Xen support')
- Xen teegid, programmid, skriptid ja dokumentatsioon - xen-docs-3.2, xen-tools, xen-utils-3.2-1, xen-utils-common
- üldkasutatavad abivahendid - bridge-utils
Praktiliselt sobib Xen tarkvara paigaldamiseks öelda
# apt-get install xen-linux-system-2.6.26-2-xen-amd64 xen-tools
Paigaldamise käigus tekivad süsteemi juurde sellised komponendid
- /etc/alternatives/xen-default -> /usr/lib/xen-3.2-1
Peale tarkvara paigaldamist tuleb arvuti bootida kasutades hüperviisorit ning Xeni tuuma, selleks sobib kasutada nt sellise sisuga GRUB menüü faili menu.lst
default 0 timeout 15 color cyan/blue white/blue title Xen root (hd0,0) kernel /boot/xen-3.2-1-amd64.gz dom0_mem=393216 module /boot/vmlinuz-2.6.26-2-xen-amd64 root=/dev/sda1 ro max_loop=255 module /boot/initrd.img-2.6.26-2-xen-amd64
Pange tähele, et privilegeerimata domeeni tuum paikneb väljaspoole privilegeerimata domeeni failisüsteemi ning see asjaolu on iseloomulik paravirtualiseerimisele. Lisaks on piiratud dom0 mälu mahuga 384 MB. Tõsi, on olemas py-grub initsiatiiv, mis võimaldab kasutada domU'ga domU sees paiknevat tuuma.
Peale bootimist saab küsida hüpervisori dmesg'i käsuga
bash# xm dmesg
Xen tarkvara seadistamine
Xen'i tarkvara koosneb kahest osast
- dom0 sees töötab serveri pool, mida kontrollib seadistusfail /etc/xen/xend-config.sxp
- Iga domU omadused on kirjas vastava domU seadistusfailis, /etc/xen/domU-nimi.cfg
Kuigi tundub, et xend-config.sxp failis tehtud muudatuste kehtestamiseks tihti piisab xend doeemoni peatamisest ja startimisest
bash# /etc/init.d/xend stop|start
osutub, et vahel on kõige otsekohesem segaduste vältimiseks peale selle faili muutmist arvuti alglaadida. Pealegi, xend-config.sxp failis tehakse vajalikud muudatused Xeni juurutamise ajal ära ning edaspidi muudetakse seda Xeni kasutamise ajal harva. xend-config.sxp faili muutmise teel saab teha järgmisi otsustusi
- millises režiimis töötab domU'de võrk (bridge, routing, nat)
- kui palju on dom0 sees kasutusel protsessoreid, soovitav on valida kõik, muidu mõnel platvormil süsteem ei tööta stabiilselt (dom0-cpus 0)
- kui palju mälu on tagatud dom0 jaoks, soovitav 196 MB (dom0-min-mem 196)
Xen võimaldab kasutada domU'sid võrgu mõttes kolmel erineval moel, tavaliselt kasutatakse kõiki domU'sid samaagselt ühes ja samas režiimis
- routing - dom0 on võrgu sõlmpunktiks iga domU ja dom0'ga samas subnetis olevate teiste arvutite vahel
- nat - dom0 on võrgu sõlmpunktiks iga domU ja dom0'ga samas subnetis olevate teiste arvutite vahel kusjuures, dom0 teeb NAT teisendusi domU'de jaoks
- bridge - dom0 ja kõik domU'de võrguseadmed asuvad ühes ja samas võrgus etherneti mõttes, kasutatakse sama ip subneti aadresse
Järgnevates punktides käsitletakse eraldi domU'le vastava seadistusfaili kõiki muid omadusi ning kuidas seadistada käima erinevaid võrgus töötamise režiime, alustuseks võiks Debian GNU/Linux 5.0 puhul vaadata üle mainitud dom0-cpus ja dom0-min-mem parameetrite väärtused ning dom0 operatsioonisüsteem alglaadida.
Xen domU moodustamine
domU operatsioonisüsteemi eksemplarile vastava plokkseadmena saab kasutada
- tõmmisfaili dom0 arvuti failisüsteemis
- fdisk partitsiooni
- LVM volume'i
- üle iSCSI (või muul analoogsel moel, nt AOE) dom0 arvutisse ühendatud plokkseadet
- üle FC dom0 arvutisse ühendatud plokkseadet
- üle NFS'i kättesaadavat failisüsteemi
Debian Lenny sisaldab paketti xen-tools, mis hõlbustab Guest domeeni operatsioonisüsteemile vastava failisüsteemi tekitamist, nt võiks sobida kasutada selline seadistusfail /etc/xen-tools/xen-tools.conf
dir = /data debootstrap = 1 size = 4Gb # Disk image size. memory = 512Mb # Memory size swap = 1024Mb # Swap size fs = ext3 # use the EXT3 filesystem for the disk image. dist = lenny # Default distribution to install. image = full # Specify sparse vs. full disk images. passwd = 1 kernel = /boot/vmlinuz-2.6.26-2-xen-amd64 mirror = http://ftp.aso.ee/debian/
ning öelda
# xen-create-image --hostname=xen.loomaaed.tartu.ee --ip=172.16.92.2 \ --gateway=172.16.92.128 --netmask=255.255.255.0
Tulemusena moodustatakse domU seadistusfail
/etc/xen/xen.loomaaed.tartu.ee.cfg
ning juurfailisüseemi ja saaleala tõmmised kataloogi /data/domains/xen.loomaaed.tartu.ee
/data/domains/xen.loomaaed.tartu.ee/disk.img /data/domains/xen.loomaaed.tartu.ee/swap.img
Parameetri dir asemel saab kasutada parameetrit lvm, nt 'lvm=data_xen' puhul oleks moodustatud vastavad LVM voluumid gruppi data_xen
/dev/data_xen/xen.loomaaed.tartu.ee-swap /dev/data_xen/xen.loomaaed.tartu.ee-disk
Seadistusfaili võiks kohendada ülevaatlikuse mõttes nt selliseks
name = 'xen.loomaaed.tartu.ee' kernel = '/boot/vmlinuz-2.6.26-2-xen-amd64' ramdisk = '/boot/initrd.img-2.6.26-2-xen-amd64' root = '/dev/xvda1 ro' memory = '1024' disk = [ 'file:/data/domains/xen.loomaaed.tartu.ee/disk.img,sda1,w', 'file:/data/domains/xen.loomaaed.tartu.ee/swap.img,sda2,w' ] vif = [ 'mac=70:01:68:00:20:13' ] vcpus="2" extra='xencons=tty'
Toodud domU seadistamiseks kasutatud parameetrid on isenesest mõistetava tähendusega, kõikvõimalike parameetrite loetelu saab küsida käsuga
# xm create --help_config
domU'de arvu suurenemisel lihtsustab süsteemi haldamist kui mac aadressid on tekitatud mingi süsteemi alusel, näiteks võiks kasutada sarnast skeemi kümend süsteemist kuueteistkümned süsteemi teisendamisel
- ip aadress 192.168.2.13 - 70:01:68:00:20:13 ehk kasutades sulge 70:0(1:68):(00:2)(0:13)
Märkused:
- Vastsesse süsteemi sisselogimisel on juurkasutaja parool seadistamata, sisselogimisel konsoolilt sobib parooli küsimise kohas vajutada Enter.
- Tõenäoliselt tuleb paigaldada vastsesse süsteemi udev pakett ning teha operatsioonisüsteemile alglaadimine, muidu saab ssh abil sisse logides teate
PTY allocation request failed on channel 0 /usr/bin/X11/xauth: creating new authority file /root/.Xauthority stdin: is not a tty
- Kui domU sees 'su - kasutajanimi' puhul kõigi klaviatuurilt tehtud klahvivajutuste puhul peale Enteri logitakse kasutaja välja, st tagasi juurkasutaja shelli, siis selle vastu aitab anda domU'le 2 vcpus, http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=476519
domU käivitamine ja seiskamine
Jättes esialgu pööramata tähelepanu võrguseadistustele ja kommenteerides vif parameetri domU seadistusfailist välja veendume, et domU on kasutatav st teda saab käivitada, konsoolilt sisse logida ning seisata.
domU käivitamine koos konsooli kasutamisega toimub selliselt, -c võti tähendab, et samale terminalile kus käsk anti esitatakse domU konsool
# xm create -c /etc/xen/xen.loomaaed.tartu.ee.cfg
Peale domU käivitamist võib sisse logida kas konsooli kaudu või üle võrgu kui võrk oleks seadistatud. Konsoolilt pääseb välja Ctrl + ] kombinatsiooni abil ning konsooli tagasi käsuga
# xm console xen.loomaaed.tartu.ee
domU seiskamiseks on käsk
# xm shutdown xen.loomaaed.tartu.ee
Töötavate domeenide nimekirja näeb käsuga
# xm list
Xen domU'le vastavaid failisüsteeme saab dom0 all hõlpsasti külge ühendada ja kasutada, kusjuures vastav domU ei tohi samal ajal töötada
bash# mount -o loop /data/domains/xen.loomaaed.tartu.ee/disk.img /mnt
Võrgu kasutamine domU seest
TODO
Ruuting režiim
TODO
Aadressteisendav režiim
TODO
Sillatud režiim
TODO
Sillatud režiim VLAN seadmetega
DomU ühendamiseks võrku mitme dom0 peal seadistatud VLAN võrguseadme abil tuleb teha ettevalmistusi operatsioonisüsteemi võrguseadistustes ning lisada paketihaldusest paigaldatud Xeni skriptidele juurde kaks skripti, mis peavad olema käivitatavad. Järgnev põhineb, õigemini kordab juhendit aadressilt http://wiki.xensource.com/xenwiki/XenNetworking#head-cc1acf427fd2514aa441f1dbce2ba0a512eb8697 ehk VLAN -> 2nd method.
Olgu selline eesmärk
- eth0 - nö tavaline võrguseade, mida kasutatakse Xen dom0 halduseks, aadress 10.0.5.250
- eth1 - nn tagged võrguseade, millele kasutatakse VLAN'isid vlan506, vlan507 ja vlan508, dom0 sees neil seadmetel ip aadresse ei ole
- domU sees moodustuvad seadmed eth0 ja eth1, mis kuuluvad vastavalt vlan506 ja vlan507 peale, domU sees on neil ip aadressid seadistatud
Tulemuse saavutamiseks tuleb operatsioonisüsteemis moodustada sellise sisuga /etc/network/interfaces fail
auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 10.0.5.250 gateway 10.0.5.1 netmask 255.255.255.0 auto eth1 iface eth1 inet manual pre-up ifconfig $IFACE up post-down ifconfig $IFACE down auto vlan506 iface vlan506 inet manual vlan_raw_device eth1 auto vlan507 iface vlan507 inet manual vlan_raw_device eth1 auto vlan508 iface vlan508 inet manual vlan_raw_device eth1
Seejärel tuleb teha koopia failist /etc/xen/scripts/network-bridge
# cp /etc/xen/scripts/network-bridge /etc/xen/scripts/network-bridge-withvlan
ning koopias kommenteerida osa ridu välja, selliselt
# diff /etc/xen/scripts/network-bridge* 100c100 < if ! ifup $1 ; then --- > # if ! ifup $1 ; then 108c108 < fi --- > # fi 217c217 < if ! ifdown ${netdev}; then --- > # if ! ifdown ${netdev}; then 222c222 < fi --- > # fi 245c245 < if ! ifdown ${bridge}; then --- > # if ! ifdown ${bridge}; then 247c247 < fi --- > # fi
Seejärel tuleb moodustada skript /etc/xen/scripts/sillad.sh
#!/bin/sh dir=$(dirname "$0") "$dir/network-bridge-withvlan" "$@" vifnum=0 netdev=vlan506 bridge=xenbr506 "$dir/network-bridge-withvlan" "$@" vifnum=1 netdev=vlan507 bridge=xenbr507 "$dir/network-bridge-withvlan" "$@" vifnum=2 netdev=vlan508 bridge=xenbr508 for i in 506 507 508; do ifconfig xenbr$i up done
Ning lõpuks näidata seadistusfailis /etc/xen/xend-config.sxp, et seda sillad.sh faili kasutatakse
# (network-script network-dummy) (network-script sillad.sh)
Nii ettevalmistatud sildade kasutamiseks sobib domU seadistusfailis kasutada nt ridu
vif = [ 'mac=70:10:00:00:61:30,bridge=xenbr506', \ 'mac=70:10:00:00:71:30,bridge=xenbr507' ]
Kui kasutajat härib, et episoodiliselt on näha tcpdump abil domU sees salvestatud liikluses tcp või udp kontrollsummade vigu
# tcpdump -s 1600 -w /tmp/tx-on-on.log -i eth0 # zcat /tmp/tx-on-on.log | tcpdump -nvver - | grep incorrect ... 20:14:45.155727 70:10:00:00:61:30 > 00:00:5e:00:01:6a, ethertype IPv4 (0x0800), \ length 114: (tos 0x10, ttl 64, id 21672, offset 0, flags [DF], proto TCP (6), \ length 100) 10.0.6.130.22 > 172.17.4.97.44186: P, cksum 0xc14a (incorrect \ (-> 0x63df), 3761:3809(48) ack 1440 win 273 <nop,nop,timestamp 4294921785 9256126>
siis võib domU sees öelda ja selliseid vigu enam tcpdump ei esitata
# ethtool -K eth0 tx off
Tulemusena on offloadi puudutavad parameetrid sellised
# ethtool -k eth0 Offload parameters for eth0: Cannot get device rx csum settings: Operation not supported Cannot get device flags: Operation not supported rx-checksumming: off tx-checksumming: off scatter-gather: off tcp segmentation offload: off udp fragmentation offload: off generic segmentation offload: off large receive offload: off
Samaväärne on kirjutada vastava seadme juurde /etc/network/interfaces faili
post-up ethtool -K eth0 tx off
Serial konsooli kasutamine
Selleks, et konsoolil oleks
- GRUB menüü
- Linuxi tuuma logi
- login prompt
tuleb kasutada GRUB alglaadijas kasutada sektsioone
serial --unit=0 --speed=9600 terminal --timeout=15 serial console .. title Xen 3.2-1-amd64 / Debian GNU/Linux, kernel 2.6.26-2-xen-amd64 root (hd0,0) kernel /xen-3.2-1-amd64.gz dom0_mem=393216 console=com1,vga com1=9600,8n1 module /vmlinuz-2.6.26-2-xen-amd64 root=/dev/mapper/system-root ro console=tty0 console=hvc0 module /initrd.img-2.6.26-2-xen-amd64
ning /etc/inittab sees
1:2345:respawn:/sbin/getty 38400 hvc0 2:23:respawn:/sbin/getty 38400 tty1 .. T0:23:respawn:/sbin/getty -L hvc0 9600 vt100
domU konsooli väljundi logimine
domU konsooli väljundi logimiseks faili sobib teha faili /usr/lib64/xen-default/bin/xend selline muudatus
# diff /usr/lib64/xen-default/bin/xend /usr/lib64/xen-default/bin/xend-orig 103,104c103 < args = ["--log", "guest", "--log-dir", "/var/log/xen/guest/"] < execute('xenconsoled', args) --- > execute('xenconsoled')
Tulemusena peale järgmist Xen käivitamist käivitatud domU arvutite logi salvestatakse /var/log/xen/guest kataloogi domU nimelistesse failidesse.
Kontrolliks peab olema xenconsoled protsessil näha vastavaid võtmeid
# ps aux | grep xenconsoled root 3636 0.0 0.1 20576 684 ? Sl 22:19 0:00 /usr/lib/xen-3.2-1/bin/xenconsoled --log guest --log-dir /var/log/xen/guest
Allikana on kasutatud sissekannet aadressilt http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=517863
domU liigutamine erinevate dom0 arvutite vahel
Xen võimaldab seadistada käima kaks või enam füüsilist dom0 funktsioonis töötavat arvutit nii, et domU domeeni saab nende vahel ümber paigutada
- ümberpaigutamine domU peatamisege (ingl. k. migration) - domU töö peatatakse esmalt (samaväärne 'xm pause domeenimi' tegevusega), domeeni olek kopeeritakse teisse arvutisse ja domU töö jätkub (unpause); nb! peatamisega antud juhul ei kaasne operatsioonisüteemi alglaadimist
- ümberpaigutamine domU peatamiseta (ingl. k. live migration) - domU's töötavates teenustes katkestust praktiliselt ei ole kasutajate jaoks tunda
Seejuures kehtib dom0 arvutite jaoks piirang, et neis kasutatavad protsessorid peavad olema sarnaseid, kõige parem kui identsed, aga kindlasti ei tööta koostöös AMD ja Inteli protsessorid.
Sellist teenust pakkuva operatsioonisüsteemi eksempalari liigutamist erinevate füüsiliste arvutite vahel võib lugeda üheks kõrgkäideldava lahenduse komponendiks näiteks selles mõttes, et kui koormus suureneb või on vajadus sooritada füüsilise arvuti hooldustööd, saab ilma teenust katkestamata liigutada teenust pakkuva keskkonna sobivamale platvormile.
Asjakorraldust kirjeldab selline skeem
___ ___ ___ | | -----domU-----> | | | | |___| |___| |___| | dom0 A | dom0 B | storage | | | -----|---------------------|---------------|------
- storage - block device teenust pakkuv server, domU failisüsteemid asuvad seal (nt aoe (ata over ethernet), iscsi või fc)
- dom0 A - Xeni host, kus domU töötab sündmuste alguses
- dom0 B - Xeni host, kus domU töötab sündmuste lõpus
domU migratsiooni käigus kopeeritakse arvuti olek (mälu, võrguühendused jm) ühelt teisele dom0'le ja teenusepakkumine jätkub. Oluline on seejuures, et mõlemale dom0 arvutile on ühendatud külge sama plokkseade, mida domU seest kasutatakse. Xen tarkvara hoolitseb ise selle eest, et seda plokkseadet sobivalt kasutatakse, sh et mitte enam kui üks selle domU eksemplar poleks samaagselt aktiivne.
Xeni seadistusfailis /etc/xen/xend-config.sxp peavad olema sarnased read, nö päris elus kasutamiseks maksab ilmselt rakendada rangemaid piiranguid (kahe viimase rea lõpus sulgude sees pole argumendiks olevate ' ' märkide vahel tühikut)
(xend-relocation-server yes) (xend-relocation-port 8002) (xend-relocation-address ' ' ) (xend-relocation-hosts-allow ' ' )
ning domU seadistusfailid peavad olema mõlemas dom0'is sarnased, sama nimi, samad mac aadressid, mälu suurus jms, praktiliselt on oluline kasutada rida, http://wiki.debian.org/Xen#A.27clocksource.2BAC8-0.3ATimewentbackwards.27
extra="xencons=tty clocksource=jiffies"
Migratsiooni kasutamise järgnevus võiks olla selline
- domU on käivitatud tavapärasel viisil dom0 A arvutis ja dom0 B arvutis ei ole käivitatud
- Nt live migratsiooni alustamiseks tuleb öelda seal arvutis, kus parasjagu domU asub (pausiga migratsiooni tegemiseks tuleb --live võti ära jätta)
# xm migrate --live domU-nimi teise-dom0-nimi
- Tulemusena töötab domU dom0 B arvutis ja ei tööta dom0 A arvutis.
Kuna domU säilitab oma MAC aadressi ja ip aadressi, siis tcp ühenduste jaoks on migration samaväärne pikemaajalise võrgukatkestusega ning live migration väga lühiajalise võrgukatkestusega.
Selleks, et saada aimu migratsiooni käigust sobib vaadata, kas üle porti 8002 liiklust käib või kontrollida xm list käsuga mis olekus on domU kummaski dom0 arvutis.
Etch ja Lenny kasutamise ühilduvus dom0 ja domU kasutamisel
Aadressil http://wiki.debian.org/Xen#Compatibility on esitatud selline tabel
- dom0 works on kernels 2.6.18 from Etch and 2.6.26 from Lenny, but not with kernel 2.6.24 from Etch-n-half;
- domU should work with all kernels (2.6.18 and 2.6.24 from Etch and 2.6.26 from Lenny);
- a Lenny dom0 on amd64 can run any domU (Etch or Lenny, i386 or amd64);
- a Lenny dom0 on i386 can, or should be able to, run any 32-bit domU (Etch or Lenny).
- an Etch dom0 (2.6.18-*-xen) can only run 32-bit domU when it's i386 itself, a 64-bit Etch dom0 (using the amd64 kernel) can run a 64-bits domU and also a 32-bit domU, but only when using the amd64-kernel and a 32-bit userland!
Märkused
- Debian Lenny Xen sisaldab 2009 suve lõpul üsna ebamugavat viga, mis avaldub mõnel juhul suure koormuse puhul dom0 praktiliselt kasutamiskõlbmatuks muutumises; samal ajal domU'd paistavad töötavat. Viga on kirjeldatud aadressil http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=542614
- Kui süsteem on uuendatud nt dist-upgrade käigus Debian Etch -> Debian Lenny, siis on võimalik, et süsteemis on alles Etch koosseisu kuulunud 3.0 versiooni Xen tarkvara, eksituste vältimiseks võiks selle eemaldada öeldes
# apt-get remove xen-utils-3.0.3-1 The following packages will be REMOVED: xen-hypervisor-3.0.3-1-amd64 xen-linux-system-2.6.18-6-xen-amd64 xen-utils-3.0.3-1
Muu hulgas peab jälgimda, et /etc/alternatives/xen-default link viitab õigele versioonile
/etc/alternatives/xen-default -> /usr/lib/xen-3.2-1
kusjuures
# ls -ld /usr/lib/xen-3* drwxr-xr-x 4 root root 4096 2008-11-25 01:20 /usr/lib/xen-3.0.3-1 drwxr-xr-x 5 root root 4096 2009-06-01 18:11 /usr/lib/xen-3.2-1
- Üle serial konsooli debugimiseks sobib kasutada http://wiki.xensource.com/xenwiki/XenParavirtOps
title pv_ops dom0-test (2.6.31) with serial console root (hd0,0) kernel /xen-4.0.gz dom0_mem=1024M loglvl=all guest_loglvl=all sync_console console_to_ring com1=19200,8n1 console=com1 module /vmlinuz-2.6.31 ro root=/dev/vg00/lv01 console=hvc0 earlyprintk=xen nomodeset module /initrd-2.6.31.img