12.07.2015 Views

BSc Thesis - tud.ttu.ee - Tallinna Tehnikaülikool

BSc Thesis - tud.ttu.ee - Tallinna Tehnikaülikool

BSc Thesis - tud.ttu.ee - Tallinna Tehnikaülikool

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

AutorideklaratsioonDeklar<strong>ee</strong>rin, et käesolev lõputöö on minu töö tulemus ja seda ei ole kellegi teise pooltvarem kaitsmisele esita<strong>tud</strong>.……………………..(kuupäev)……………………….(lõputöö kaitsja allkiri)


ANNOTATSIOONKäesolev töö käsitleb vabal tarkvaral põhineva virtualis<strong>ee</strong>rimislahenduse OpenNodeinfrastruktuuri väljatöötamist. OpenNode lahendus töötatakse välja selliselt, et tavõimaldaks nii konteiner- kui ka täisvirtualis<strong>ee</strong>rimise tehnoloogiate kasutamist. Töösantakse ka ülevaade virtualis<strong>ee</strong>rimise valdkonnast üldiselt. OpenNodeinfrastruktuurist võetakse käesolevas töös täpsema vaatluse alla serveri tarkvarakomplekt<strong>ee</strong>rimine ja paigaldusm<strong>ee</strong>todi välja töötamine ning keskhalduse t<strong>ee</strong>nusteserveri loomine. T<strong>ee</strong>nuste serveri ning serveri tarkvara paigaldusm<strong>ee</strong>toditööpõhimõtted on töös illustr<strong>ee</strong>ri<strong>tud</strong> graafiliste näidetega.


ABSTRACTThis paper describes the development of open source virtualization solutionOpenNode. OpenNode will be developed to capacitate both container and native (full)virtualization technologies. This paper describes both development of centralmanagement server and single OpenNode server software (with its deploymentmethod) in detail. An insight into virtualization in general is also given in this paper.The work principles of central management server and OpenNode server softwaredeployment method are illustrated with graphical examples.


1 SISSEJUHATUS1.1 TaustEttevõte Active Systems on pikemat aega pakkunud oma klientidele lihtsatserveripinna rendit<strong>ee</strong>nust. Aasta 2009 esimesel poolel jõuti ettevõttes seisukohani, etklientide parema heaolu nimel tuleb oma tegevust serveripinna rentimisel laiendadaka privaatsete virtuaalserverite valdkonda.Esialgu pakuti oma klientidele virtualis<strong>ee</strong>ri<strong>tud</strong> servereid vaid OpenVZkonteinervirtualis<strong>ee</strong>rimise tehnoloogia alusel. Virtualis<strong>ee</strong>rimiseks vajaliketarkvarapakettide paigaldamine toimus igal serveril käsitsi ning virtualis<strong>ee</strong>ri<strong>tud</strong>serverite haldamiseks kasutati peamiselt käsureatööriistu.Suurenenud huvi virtualis<strong>ee</strong>ri<strong>tud</strong> privaatserverite vastu viis aasta 2009 lõpustõdemuseni, et ettevõtte enda ja klientide tarbeks serveritele virtualis<strong>ee</strong>rimiseksvajaliku tarkvara käsitsi paigaldamine pole pikemas perspektiivis elujõuline lahendus– tekkis vajadus standardsema tarkvarakoosluse järgi. Lisaks ilmnes klientide poolthuvi ettevõtete sisevõrkudes olevates serverites kasutada ka täisvirtualis<strong>ee</strong>rimist, mis<strong>ee</strong>ldas vastava virtualis<strong>ee</strong>rimistehnoloogia lisamist serveri tarkvarale. Kolmasmurekoht oli süst<strong>ee</strong>miadministraatori seisukohast k<strong>ee</strong>ruline ning tülikas erinevatetehnoloogiate virtuaalmasinate haldamine virtualis<strong>ee</strong>rimistehnoloogia-kesksetekäsureatööriistade abil. Lisaks <strong>ee</strong>lnevalt mainitule oli puudus ka kesksesthaldusserverist, mis oleks lihtsalt laiendatav klientide erinevate soovide täitmiseks.Nii otsustatigi, et välja tuleb töötada nii täis- kui kakonteinervirtualis<strong>ee</strong>rimistehnoloogiate kasutamist ning lihtsat haldamist võimaldavvirtualis<strong>ee</strong>rimislahendus, mille edasiseks nimeks sai OpenNode.1.2 Ülesande püstitusKäesolev töö pakub välja lahenduse Peatükis 1.1 välja toodud probl<strong>ee</strong>midelevirtualis<strong>ee</strong>ri<strong>tud</strong> privaatserverite pakkumisel ning haldamisel. Sellest tulenevalt onkäesoleva töö üld<strong>ee</strong>smärgiks välja töötada infrastruktuur virtualis<strong>ee</strong>rimislahenduseleOpenNode, mis peab vabastama nii virtualis<strong>ee</strong>rimise t<strong>ee</strong>nuse pakkuja kui kasüst<strong>ee</strong>miadministraatori <strong>ee</strong>lnevalt välja toodud probl<strong>ee</strong>midest.7


Täpsemad <strong>ee</strong>smärgid OpenNode virtualis<strong>ee</strong>rimislahenduse infrastruktuuri loomiseks,käesoleva töö raames on järgmised:1. Komplekt<strong>ee</strong>rida minimaalne tarkvaraline kooslus, mis võimaldab ühelOpenNode serveril pakkuda korraga nii täis- kui ka konteinervirtualis<strong>ee</strong>rimisevõimalusi.2. Välja töötada paigaldusm<strong>ee</strong>tod, mis peab võimaldama OpenNode serverioperatsioonisüst<strong>ee</strong>mi, tarkvarapakettide ning vajalike <strong>ee</strong>ldefin<strong>ee</strong>ri<strong>tud</strong>konfiguratsioonide lihtsusta<strong>tud</strong> ja automatis<strong>ee</strong>ri<strong>tud</strong> paigaldamist riistvaraliseleserverile.3. Välja töötada keskse haldusserveri tarbeks t<strong>ee</strong>nuste server, koos vastavasuhtlusprotokolliga, mis peab võimaldama erinevatel kasutajaliidestekuvarakendustel, ühtset liidest kasutades, OpenNode servereid ning sealseidvirtuaalmasinaid hallata.1.3 Peatükkide ülevaadePeatükis 2 tutvustatakse lühidalt virtualis<strong>ee</strong>rimise olemust ning erinevaid OpenNodelahenduses kasuta<strong>tud</strong> tehnoloogiaid. Peatükk 3 kirjeldab OpenNode lahenduseülesehitust ja struktuuri erinevate kihtide kaupa – kogu virtualis<strong>ee</strong>rimislahendus,üksik OpenNode server ning haldusserver. Peatükis 4 kirjeldatakse OpenNode serveritarkvara paigaldusm<strong>ee</strong>todi loomiseks tehtut. Peatükk 5 ja 6 keskenduvad detailsemaltkeskhalduse infrastruktuurile – vastavalt t<strong>ee</strong>nuste serveri ülesehitusele ning Funchaldusraamistiku kasutamisele. Peatükk 7 toob sisse OpenNode võrdluse teistesarnaste lahendustega.8


2 ÜLEVAADE VALDKONNASTJärgnevates alapeatükkides on lühidalt tutvusta<strong>tud</strong> virtualis<strong>ee</strong>rimise valdkonda ningülesande lahendamisel kasuta<strong>tud</strong> põhiliseid tarkvaratehnoloogiaid.2.1 Virtualis<strong>ee</strong>rimineArvutiteaduses pandi virtualis<strong>ee</strong>rimistehnoloogia arengule alus 60-ndate lõpus IBMpoolt. Kuna 40 aastat tagasi oli serverite riistvara hind küllaltki kõrge, siis nägi IBMvirtualis<strong>ee</strong>rimises võimalust, kuidas kasutada olemas olevat riistvara võimalikultefektiivselt. Teaduslik areng ning uued tootmistehnoloogiad tõid järgnevatelaastakümnetel riistvara hinnad madalamale tasemele. Uue riistvaraga kooskõlashakkasid ka operatsioonisüst<strong>ee</strong>mid toetama lõimelisust ning mitmete protsessidesamaaegset töötamist. Kõik s<strong>ee</strong> jahutas avalikkuse huvi invest<strong>ee</strong>ridavirtualis<strong>ee</strong>rimistehnoloogiatesse. 2000-ndate alguses avastasidsüst<strong>ee</strong>miadministraatorid virtualis<strong>ee</strong>rimise endi jaoks taas. Virtualis<strong>ee</strong>rimine pakkusvõimaluse tagada süst<strong>ee</strong>mide suurem turvalisus, hallatavus ja usaldusväärsus. [12, lk34-35]Serverite virtualis<strong>ee</strong>rimine tähendab üldises mõttes seda, et ühel riistvaralisel serverilkäivitatakse samaaegselt mitmeid erinevaid üksteisest isol<strong>ee</strong>ri<strong>tud</strong> virtualis<strong>ee</strong>ri<strong>tud</strong>servereid (virtuaalmasinaid). Sellised virtuaalmasinad võimaldavad üheleriistvaralisele serverile paigaldada samaaegselt erinevaid operatsioonisüst<strong>ee</strong>me (niimodifits<strong>ee</strong>ri<strong>tud</strong> kui ka modifits<strong>ee</strong>rimata kujul).Virtuaalmasinad on, lisaks üksteisest, isol<strong>ee</strong>ri<strong>tud</strong> ka riistvaralisel serveril töötavastoperatsioonisüst<strong>ee</strong>mist. Isolatsiooni riistvarast ja sellel töötavastoperatsioonisüst<strong>ee</strong>mist pakub eraldi virtualis<strong>ee</strong>rimise vahekiht. [9, lk 2]Vastavalt virtualis<strong>ee</strong>rimise vahekihi implementatsioonile ning omadustelemoodustavad virtualis<strong>ee</strong>rimistehnoloogiad tänapäeval kolm suuremat kategooriat:1. Täisvirtualis<strong>ee</strong>rimine2. Paravirtualis<strong>ee</strong>rimine3. Konteinervirtualis<strong>ee</strong>rimine9


2.1.1 Täisvirtualis<strong>ee</strong>rimineTäisvirtualis<strong>ee</strong>rimine (tun<strong>tud</strong> ka emul<strong>ee</strong>rimise nime all) on paindlik virtualis<strong>ee</strong>rimisetehnoloogia. Nimelt emul<strong>ee</strong>ritakse virtualis<strong>ee</strong>ri<strong>tud</strong> operatsioonisüst<strong>ee</strong>mi jaoks koguvajaminev riistvara, mis omakorda lubab käivitada operatsioonisüst<strong>ee</strong>mi virtuaalseskeskkonnas modifits<strong>ee</strong>rimata kujul. Selline lähenemine võimaldab kasutada kakommertsiaalseid operatsioonisüst<strong>ee</strong>me, mille modifits<strong>ee</strong>rimine on tavaliseltlitsentsitingimustega k<strong>ee</strong>la<strong>tud</strong>. [1, lk 36]Täielik riistvara emul<strong>ee</strong>rimine võimaldab kokku sobitada ka erinevateleriistvaraarhitektuuridele suuna<strong>tud</strong> operatsioonisüst<strong>ee</strong>me. (Näiteks on võimalik x86Windowsi arvutil emul<strong>ee</strong>rida keskkond PowerPC Mac OS-i jaoks). Paindlikkusesaavutamisega maksab täisvirtualis<strong>ee</strong>rimine lõivu madalama jõudlusega –virtualis<strong>ee</strong>ri<strong>tud</strong> operatsioonisüst<strong>ee</strong>mi ja riistvara vahel käskluste teisendamine onajakulukas.Vabadest virtualis<strong>ee</strong>rimistehnoloogiatest pakuvad täisvirtualis<strong>ee</strong>rimise võimalustnäiteks KVM/QEMU ja XEN (x86 arhitektuuri laiendusi toetavatel protsessoritel).2.1.2 Paravirtualis<strong>ee</strong>rimineParavirtualis<strong>ee</strong>rimine erineb täisvirtualis<strong>ee</strong>rimisest selle poolest, etoperatsioonisüst<strong>ee</strong>mile ei emul<strong>ee</strong>rita enam kogu riistvara. Selle asemelmodifits<strong>ee</strong>ritakse operatsioonisüst<strong>ee</strong>mi nii, et ta on teadlik virtualis<strong>ee</strong>rimise vahekihiolemasolust. Paravirtualis<strong>ee</strong>ri<strong>tud</strong> operatsioonisüst<strong>ee</strong>mides kasutatakse modifits<strong>ee</strong>ri<strong>tud</strong>draivereid, mis võimaldavad ligipääsu nii emul<strong>ee</strong>ri<strong>tud</strong> kui reaalsele riistvarale. [1, lk36]Paravirtualis<strong>ee</strong>rimine on r<strong>ee</strong>glina kiirem, kui täisvirtualis<strong>ee</strong>rimine, kuid kasutatavadoperatsioonisüst<strong>ee</strong>mid vajavad muudatusi, mis piirab kommertsiaalseteoperatsioonisüst<strong>ee</strong>mide paravirtualis<strong>ee</strong>rimise võimalusi.Vabadest virtualis<strong>ee</strong>rimislahendustest pakub paravirtualis<strong>ee</strong>rimise võimalust näiteksXen.2.1.3 Konteinervirtualis<strong>ee</strong>rimineKonteinervirtualis<strong>ee</strong>rimine põhineb operatsioonisüst<strong>ee</strong>mi-taseme virtualis<strong>ee</strong>rimisel,mis lubab luua ühe modifits<strong>ee</strong>ri<strong>tud</strong> operatsioonisüst<strong>ee</strong>mi piires mitmeid üksteisestisol<strong>ee</strong>ri<strong>tud</strong> käivituskeskkondi. Selliseid käivituskeskkondi nimetatakse ka10


konteineriteks tänu sellele, et “operatsioonisüst<strong>ee</strong>m sulgeb ühe virtuaalmasinaprotsessid kinnisesse isol<strong>ee</strong>ri<strong>tud</strong> konteinerisse”. Igal konteineril on oma protsessipuu,failid, kasutajad, võrguseaded ja konfiguratsioonifailid. Konteinerite otsene seotusriistvaralise serveri operatsioonisüst<strong>ee</strong>miga annab neile virtualis<strong>ee</strong>rimataoperatsioonisüst<strong>ee</strong>miga samaväärse jõudluse. [14, lk 278-279]Konteinervirtualis<strong>ee</strong>rimise puhul võidetakse küll jõudluses, kuid seda paindlikkusearvelt. Nimelt on konteinervirtualis<strong>ee</strong>rimise piiranguks, et virtualis<strong>ee</strong>ri<strong>tud</strong>operatsioonisüst<strong>ee</strong>mid peavad olema riistvaralisel serveril töötavaoperatsioonisüst<strong>ee</strong>miga sama tüüpi. (Näiteks Linuxi konteinervirtualis<strong>ee</strong>rimise korralsaab kasutada vaid Linuxi operatsioonisüst<strong>ee</strong>me, mis kasutavad kõik ühesugustkernelit.)Vabade Linux konteinervirtualis<strong>ee</strong>rimise tehnoloogijate näideteks on Linux-vServers,OpenVZ ja Fr<strong>ee</strong>VPS. Serverites kasutatakse ka Parallels Virtuozzokonteinervirtualis<strong>ee</strong>rimise tehnoloogiat, mis on omakorda OpenVZ kernelil põhinevkommertstoode.2.2 OpenVZ konteinervirtualis<strong>ee</strong>rimise tarkvaraOpenVZ südameks on modifits<strong>ee</strong>ri<strong>tud</strong> Linuxi kernel, mis pakubsüst<strong>ee</strong>miadministraatorile järgnevaid t<strong>ee</strong>nuseid: [8, lk 3]1. Failide, seadmete, protsesside virtualis<strong>ee</strong>rimine ning isol<strong>ee</strong>rimine2. Riistvara serveri ressursside jagamine virtualis<strong>ee</strong>ri<strong>tud</strong> konteinerite vahel3. Konteineri hetkeseisundi salvestamine võimalusega konteiner hiljem samasseisus taastadaTänu sellele, et virtuaalmasinatele ressursside jagamine toimub kernelis, kulutabOpenVZ tehnoloogia konteinerite haldamiseks riistvaralise serveri ressurssiminimaalselt. OpenVZ autorite kohaselt kulutatakse protsessori ressursist 1-2%. [10,lk 13]Konteineritevaheliseks ressursijagamiseks kasutab OpenVZ kernel järgmiseidvõimalusi: [8, lk 3]1. Kahekihiline kettamahu piiramineRiistvaralise serveri administraatoril on võimalik määrata igale virtualis<strong>ee</strong>ri<strong>tud</strong>11


konteinerile maksimaalne kettamahu piirang. Virtualis<strong>ee</strong>ri<strong>tud</strong> konteineriadministraatoril on võimalik piirata iga kasutaja ja grupi maksimaalsetkettamahu kasutamist.2. Kahekihiline protsessori ajakulu plan<strong>ee</strong>rimineEsimesena otsustab OpenVZ kernel, millisele virtualis<strong>ee</strong>ri<strong>tud</strong> konteineriletööjärjekord üle antakse. Teisena otsustab kernel, millisele konteinerisiseseleprotsessile tööjärg antakse.3. Konteinerite param<strong>ee</strong>trite jälgimineOpenVZ kernel jälgib ja piirab konteinereid, mille tegevus nõuab liiga paljuriistvaralise serveri ressurssi ja seab ohtu teiste konteinerite töö.OpenVZ pakub süst<strong>ee</strong>miadministraatorile võimaluse luua uusi konteinereid<strong>ee</strong>ldefin<strong>ee</strong>ri<strong>tud</strong> operatsioonisüst<strong>ee</strong>mi-mallide põhjal. OpenVZ mallid koosnevadmetaandmetest ja arhiv<strong>ee</strong>ri<strong>tud</strong> failisüst<strong>ee</strong>mist. Metaandmetes kirjeldatakse äraoperatsioonisüst<strong>ee</strong>mile vajalike tarkvarapakettide nimekiri, pakettide hoidlateasupaigad, pakettide autentsuse kontrollimise võtmed ja malli paigaldamiseksvajalikud programmid. Malli metaandmete faili kasutatakse, et tööristagavzpkgcache luua malli failistsüst<strong>ee</strong>mi arhiivifail. OpenVZ pakub uue konteineriloomiseks ja haldamiseks tööriista vzctl, mis loob uue konteineri <strong>ee</strong>ldefin<strong>ee</strong>ri<strong>tud</strong>malli alusel. Lisaks pakub OpenVZ konteinerite haldamiseks näiteks tööriistuvzlist ja vzquota. [10, lk 91-114]2.3 KVM/QEMU täisvirtualis<strong>ee</strong>rimise tehnoloogiaKVM ja QUEMU moodustavad üheskoos vaba kernelipõhine täisvirtualis<strong>ee</strong>rimisetehnoloogia Linuxile, mis kasutab efektiivselt ära Inteli ja AMD protsessorite x86arhitektuuri laiendusi (AMD-V ja Intel VT-x).Kui r<strong>ee</strong>glina on täisvirtualis<strong>ee</strong>rimise vahekiht realis<strong>ee</strong>ri<strong>tud</strong> kernelist eraldiseisvatarkvarakomponendina, siis KVM tehnoloogia puhul antakse virtualis<strong>ee</strong>rimisevahekihi ülesanded üle otse Linuxi kernelile, implement<strong>ee</strong>rides KVM tööloogikakerneli moodulina. Selline lahendus kasutab ära aastate pikkuse töö, mis on kulunudkernelis ressursside haldamise arendamiseks. KVM nimelt ei keskendu kernelifunktsioonide realis<strong>ee</strong>rimisele virtualis<strong>ee</strong>rimise vahekihis vaid kasutab olemas olevattehnoloogiat ressursside haldamiseks. [6]12


KVM kerneli moodul toimib liidesena virtuaalmasina ja kerneli vahel. KVM liides onrealis<strong>ee</strong>ri<strong>tud</strong> tavalise Linuxi märgiseadmena asukohaga /dev/kvm. /dev/kvmseade lubab virtuaalmasinate loomist, virtuaalmasinatele mälu eraldamist, ligipääsuvirtuaalse protsessori registritele. [7, lk 226]KVM-i põhisesse virtualis<strong>ee</strong>rimistehnoloogiasse kuulub peale kerneli mooduli ka,vajaliku riistvara emul<strong>ee</strong>rimiseks, QEMU emul<strong>ee</strong>rimistarkvara. Virtuaalmasinpakendatakse QEMU protsessi, mis omakorda paistab riistvaralise serveri kerneliletavalise protsessina. Joonisel 1 on näida<strong>tud</strong>, kuidas paistavad operatsioonisüst<strong>ee</strong>milevirtuaalmasinad võrreldes tavaliste protsessidega. [13, lk 37-38]VirtuaalmasinVirtuaalmasinTavalineprotsessTavalineprotsessQEMU protsessQEMU protsessKVM kerneli moodulOperatsioonisüst<strong>ee</strong>mi kernelJoonis 1 KVM virtuaalmasinate suhtlemine operatsioonisüst<strong>ee</strong>migaQEMU emulaator pakub virtuaalmasinate failipõhiste ketaste loomiseks ninghaldamiseks tööriista qemu-img. Viruaalmasinate haldamiseks pakub QEMUemulaator süst<strong>ee</strong>miadministraatorile tööriista qemu-system-x86. OpenNodevirtualis<strong>ee</strong>rimislahenduses kasutatakse KVM/QEMU virtuaalmasinate haldamiseksenamjaolt Libvirt tarkvaraprojekti poolt pakutavaid tööriistu ning liideseidprogramm<strong>ee</strong>rimisk<strong>ee</strong>ltele.2.4 LibvirtLibvirt on vaba tarkvara projekt, mis pakub erinevatel tehnoloogiatel põhinevatevirtuaalmasinate haldamiseks ühtseid liideseid ja tööriistu. Libvirt <strong>ee</strong>smärgiks ontekitada ühtne abstraktsioonikiht, mis võimaldab erinevatevirtualis<strong>ee</strong>rimistehnoloogiate poole pöörduda ühtse käskude komplektiga. [15, lk 5]Virtualis<strong>ee</strong>rimistehnoloogiatest toetab Libvirt: KVM/QEMU, OpenVZ, Xen,VirtualBox, LXC, OpenNebula, Vmware ESX.Erinevate virtualis<strong>ee</strong>rimistehnoloogiate haldamiseks on Libvirt projekti autorid13


loonud vastavad liidesed, läbi mille on vastava tehnoloogia virtuaalmasinadkättesaadavad. OpenNode tarkvaraprojektis kasutatakse KVM/QEMU ja OpenVZvirtualis<strong>ee</strong>rimistehnoloogiate liideseid, mida Libvirtis tähistatakse vastavaltqemu:///system ja openvz:///system.Libvirt kuulub Red Hat poolt toetatavate tarkvaraprojektide nimekirja “A REDHATEMERGING Technology”.Libvirt annab süst<strong>ee</strong>miadministraatorile kaks erinevat võimalust virtuaalmasinatehaldamiseks. Serverile paigalda<strong>tud</strong> tarkvarapaketis sisaldub käsurea tööriist (konsool)virsh, mis võimaldab süst<strong>ee</strong>miadministraatoril ühenduda vali<strong>tud</strong>virtualis<strong>ee</strong>rimistehnoloogia liidese külge ning sooritada virtuaalmasinatehaldusoperatsioone. Lisaks käsureautiliidile võimaldab Libvirt kasutada tarkvaraarendamisel ka liideseid mitmetele programm<strong>ee</strong>rimisk<strong>ee</strong>ltele - Python, Perl, Java, C#ja Ruby, milledest OpenNode virtualis<strong>ee</strong>rimislahenduses leidsid kasutust liidesedk<strong>ee</strong>lele Python.2.5 FuncFunc on k<strong>ee</strong>les Python kirjuta<strong>tud</strong> vaba serverite võrgupõhine haldusraamistik. Funchaldusraamistik koosneb hallataval serveril asuvast väikesest protsessist funcd ninghaldusserveris asuvast Func kontrollerist. Func loob võimaluse ühest kesksesthaldusserverist luua usaldusväärse, sertifikaatidel põhineva, SSL ühenduse mitm<strong>ee</strong>rineva klientserveriga ning teostada neil haldusoperatsioone. Andmete vahetamisekskontrolleri ning kliendi vahel kasutab Func XML-RPC protokolli. [2]Klientserveritega luuakse ühendus üks-mitmele mudeli põhjal, st. korraga on Funcabil võimalik samade param<strong>ee</strong>tritega operatsioon välja kutsuda mitmel eraldiseisvalserveril.Func loomisel silmas p<strong>ee</strong><strong>tud</strong> võimalikult lihtsat laiendatavust. Olemas olevadfunktsioonid, läbi mille klientserveril operatsioone läbi viiakse, on koonda<strong>tud</strong>mooduliteks. Modulaarne arhitektuur võimaldab tarkvaraarendajatel uutehaldusoperatsioonide sooritamiseks kirjutada piiramatul hulgal uusi Pythonimooduleid.14


3 OPENNODE VIRTUALISEERIMISLAHENDUSKäesolevas peatükis vaadeldakse OpenNode virtualis<strong>ee</strong>rimislahenduse struktuurierinevaid kihte.3.1 OpenNode virtualis<strong>ee</strong>rimislahenduse üldstruktuurOpenNode on virtualis<strong>ee</strong>rimislahendus, mis võimaldab üheaegselt pakkuda serveritelnii täis- kui ka konteinervirtualis<strong>ee</strong>rimise võimalusi, pakkudes samaaegselt võimalustkeskselt hallata OpenNode serveritel töötavaid virtuaalmasinaid.OpenNode virtualis<strong>ee</strong>rimislahendus koosneb OpenNode serveritest, kesksesthaldusserverist ning kasutajaliideste kuvarakendustest. Joonisel 2 on näida<strong>tud</strong>graafiliselt OpenNode üldstruktuuri osade omavaheline seotus. Erinevatekomponentide täpsemad sisemised struktuurid on välja toodud järgmistespeatükkides.OpenNodeserverKasutajaliidesOpenNodehaldusserverOpenNodeserverOpenNodeserverJoonis 2 OpenNode virtualis<strong>ee</strong>rimislahenduse üldstruktuur15


3.2 OpenNode serverVastavalt Peatükis 1 toodud <strong>ee</strong>smärkidele ühildab OpenNode server endas võimalustsamaaegselt kasutada äriklassi Linux operatsioonisüst<strong>ee</strong>mil nii konteiner- kui katäisvirtualis<strong>ee</strong>rimise tehnoloogiaid. Samuti on OpenNode server võimeline võtmavastu käsklusi keskselt haldusserverilt.Joonisel 3 on rasvase tekstiga välja toodud põhilised tarkvarakomponendid, midakasutatakse täis- ja konteinervirtualis<strong>ee</strong>rimise võimaldamiseks ning keskhaldusegaliidestumiseks. Tarkvarakomponentide ülesandeid on käsitle<strong>tud</strong> järgnevatespunktides.FUNCLIBVIRTProgrammidOpenVZKVM/QEMUT<strong>ee</strong>nusedProtsessidCentOS Linux operatsioonisüst<strong>ee</strong>mJoonis 3 OpenNode serveris virtualis<strong>ee</strong>rimiseks ja haldamisekskasutatava tarkvara struktuur3.2.1 Operatsioonisüst<strong>ee</strong>mRiistvaralisel serveril töötav operatsioonisüst<strong>ee</strong>mi valik oli tähtis, kuna kõigikasutatavate virtualis<strong>ee</strong>rimis- ning muude tehnoloogiate töö hakkab sõltumaoperatsioonisüst<strong>ee</strong>mi stabiilsusest ning turvalisusest. S<strong>ee</strong> tuleneb sellest, etalus-operatsioonisüst<strong>ee</strong>mi murdumine, rünnaku korral, põhjustab ka kõigi üksikutevirtuaalmasinate murdumise. S<strong>ee</strong>tõ<strong>ttu</strong> pidasimegi vajalikuks kasutada OpenNodeserveril äriklassi operatsioonisüst<strong>ee</strong>mi.16


Äriklassi operatsioonisüst<strong>ee</strong>miks valisime CentOS Linuxi. Töö kirjutamise hetkel oliOpenNode serveris kasutusel uusim CentOS versioon 5.4. CentOSoperatsioonisüst<strong>ee</strong>m võeti kasutusele järgmiste põhjuste tõ<strong>ttu</strong>: [4, lk xxii]1. Vaba CentOS operatsioonisüst<strong>ee</strong>m on kompil<strong>ee</strong>ri<strong>tud</strong> Red Hati pooltavalikusta<strong>tud</strong> Red Hat Enterprise Linux lähtekoodist. S<strong>ee</strong> tagab, et CentOSjärgib üks-ühele Red Hati arendustööd äriklassi operatsioonisüst<strong>ee</strong>mide vallas.Tänu binaarsele samasusele on CentOS-s kasutusel viimased kerneliuuendused, mida Red Hat oma äriklassi operatsioonisüst<strong>ee</strong>mi jaoksbackport-ib.2. CentOS on aastaid olnud ettevõttes Active System kasutusel majutust<strong>ee</strong>nuste,kontorite terminalisüst<strong>ee</strong>mide ning infokioskite serveriteoperatsioonisüst<strong>ee</strong>mina. Aastate jooksul on CentOS neis kasutusvaldkondadestõestanud end kui hästi hallatav ning stabiilne operatsioonisüst<strong>ee</strong>m.3.2.2 Konteinervirtualis<strong>ee</strong>rimineVastavalt Peatükis 2 välja toodud kitsendusele, et konteinervirtualis<strong>ee</strong>ritavadoperatsioonisüst<strong>ee</strong>mid peavad olema alus-operatsioonisüst<strong>ee</strong>miga sama tüüpi,teostatakse OpenNode-s Linux operatsioonisüst<strong>ee</strong>mide konteinervirtualis<strong>ee</strong>rimist.Vabadest konteinervirtualis<strong>ee</strong>rimise tehnoloogiatest valisime kasutamiseks OpenVZjärgmiste <strong>ee</strong>liste tõ<strong>ttu</strong> konkurentide <strong>ee</strong>s:1. OpenVZ arengut toetab ettevõte Parallels, kelle kommertsiaalse Virtuozzokonteinervirtualis<strong>ee</strong>rimise tehnoloogia aluseks OpenVZ projekt on.2. Võrreldes Fr<strong>ee</strong>VPS-i ja Linux-vServers-ga toetab OpenVZ virtuaalsetekonteinerite hetkeseisu salvestamist ning konteinerite ühelt riistvaraliseltserverilt teisele viimist ilma virtualis<strong>ee</strong>ri<strong>tud</strong> operatsioonisüst<strong>ee</strong>mi tööpeatamata.3. OpenVZ kasutab konteineritele võrguühenduse loomisel võrguliidestevirtualis<strong>ee</strong>rimist. Võrreldes konkurentidega, kes isol<strong>ee</strong>rivadoperatsioonisüst<strong>ee</strong>mis erinevatele konteineritele ette näh<strong>tud</strong> virtuaalsedvõrguliidesed, pakub virtualis<strong>ee</strong>rimine võimalust igas konteineris luua eralditulemüüri seaded.17


OpenNode server võimaldab OpenVZ kasutamist, kuna CentOS Linuxoperatsioonisüst<strong>ee</strong>mi sidusime OpenVZ Linuxi kerneliga, mille viimane versioon olitöö kirjutamise hetkel 2.6.18-194.3.1.el5.028stab069.6.3.2.3 Täisvirtualis<strong>ee</strong>rimineModifits<strong>ee</strong>rimata operatsioonisüst<strong>ee</strong>mide täisvirtualis<strong>ee</strong>rimiseks valisimeKVM/QEMU tehnoloogia järgmiste <strong>ee</strong>liste tõ<strong>ttu</strong>:1. Võrreldes Xen tehnoloogiaga, kus virtualis<strong>ee</strong>rimise tarvis kirjutatakse olulineosa operatsioonisüst<strong>ee</strong>mi kerneli tööloogikast ümber, liidestub KVMmodifits<strong>ee</strong>rimata kerneliga eraldi kerneli mooduli abil. Ülejäänudemul<strong>ee</strong>rimiskeskkond QEMU asub serveri töömälus. [3, lk 1]2. Alates Linuxi kernelist 2.6.20 on KVM moodul ametlikult kernelisse lisa<strong>tud</strong>,mis peaks tagama edaspidise ametliku arendustoe. Red Hat tagab KVM toe kaoma äriklassi Linuxite kerneli versioonidele.3. KVM virtualis<strong>ee</strong>rimistehnoloogia tulevane areng omab suurt tuge Red Hatipoolt, kes 2008. aasta septembris ostis KVM senise arendusettevõtte. Red Hatitugi kindlustab, et KVM on stabiilsel kujul tagasiulatuvalt saadaval ka CentOSLinuxi kernelile.Töö kirjutamise hetkel kasutas OpenNode server KVM versiooninumbriga 83.3.2.4 Virtuaalmasinate haldamineVirtuaalmasinate haldamiseks kasutasime OpenNode serveris Libvirt tarkvarapakutavaid võimalusi. Alternatiivina tulnuks kõne alla virtuaalmasinate haldamisekserinevate tehnoloogiatega kaasnevate utiliitide kasutamine. Valisime virtuaalmasinatehaldamiseks Libvirt tarkvara järgmistel põhjustel:1. Libvirt pakub virtuaalmasinate haldamiseks ühtset käsustruktuuri2. Libvirt pakub liideseid k<strong>ee</strong>les Python, pakkudes s<strong>ee</strong>ga lihtsatühildamisvõimalust samuti Pythonis kirjuta<strong>tud</strong> Func haldusraamistikuga.Toeta<strong>tud</strong> virtualis<strong>ee</strong>rimistehnoloogiatest kasutatakse OpenNode serverisQEMU/KVM ning OpenVZ Libvirt liideseid.Libvirt tarkvara konkr<strong>ee</strong>tsemat kasutamist OpenNode virtualis<strong>ee</strong>rimislahenduseskäsitletakse järgmistes peatükkides.18


3.2.5 TarkvarauuendusedKuna mitmed OpenNode serveri tööks vajalikud tarkvarapaketid erinevad omakonfiguratsioonide poolest ametlikult pakutavatest, siis otsustasime piirata tea<strong>tud</strong>määral ka OpenNode serverite tarkvarauuendusi.Nimelt lubasime KVM, Libvirt ja OpenVZ tarkvarapakettide uuendused ainult läbiOpenNode koodivaramu, kindlustamaks, et paigaldamiseks oleksid saadaval vaidomavahel kokkusobivad versioonid tarkvarapakettidest (vt. ka alapeatükk 3.5).Lisaks lõime uue tarkvarapaketi nimega opennode, mille ülesandeks on hoida endasserveri tööks vajalike tarkvarapakettide sõltuvussuhteid, st. opennode tarkvarapaketipaigaldamisel nõutakse kindlate KVM, Libvirt ja OpenVZ kerneli versioonideolemasolu. Lisaks tarkvarapakettide sõltuvussuhete kindlaks määramisele sisalduvadopennode tarkvarapaketis ka tööriistad OpenNode serveri lokaalseks haldamiseks.Tarkvarapakett opennode annab OpenNode serveritel võimaluse edaspidi läbi viia kaautomatis<strong>ee</strong>ri<strong>tud</strong> tarkvarauuendusi.Lisaks olemasoleva tarkvara uuendamisele võimaldab loodud tarkvarapakettpaigaldada OpenNode lahenduse infrastruktuuri ka juba <strong>ee</strong>lnevalt paigalda<strong>tud</strong> CentOSoperatsioonisüst<strong>ee</strong>mile. Selline paindlikkus on saavuta<strong>tud</strong> tänu vajaliketarkvarapakettide ning OpenVZ kerneli sõltuvussuhete kirjeldamisele opennodetarkvarapaketis. S<strong>ee</strong>ga on võimalik OpenNode serveri tarkvara paigaldada kasutadeslihtsat käsklust yum install opennode.3.3 Halduslahenduse kasutajaliidesTöö kirjutamise hetkel on plan<strong>ee</strong>ri<strong>tud</strong> OpenNode halduskeskkonna kasutajaliidesearendamine kasutades QooxDoo raamistikku (http://qooxdoo.org/). Kasutajaliidesearendusprotsessi ja ülesehitust käesolevas töös täpsemalt ei kirjeldata.3.4 OpenNode haldusserverOpenNode virtualis<strong>ee</strong>rimislahenduse üheks tähtsaimaks komponendiks on kesknehaldusserver, läbi mille toimub üksikute OpenNode serverite ning neis asuvatevirtuaalmasinate haldamine ja kontrollimine. Haldusserver peab olema võimelineliidestuma samaaegselt hulga OpenNode serveritega ning ka lõppkasutajalepakutavate kasutajaliidese kuvarakendusega. Järgmistes punktides on lähemaltkirjelda<strong>tud</strong> haldusserveri liidestumist mõlemal suunal.19


3.4.1 Haldusserveri liidestus OpenNode serveritegaOpenNode virtualis<strong>ee</strong>rimislahenduses kaalusime haldusserveri ning OpenNodeserverite vahelise turvalise suhtlusmudeli loomisel ning serveritel operatsioonide läbiviimisel kahte varianti: SSH ühendust ning Func haldusraamistikku.OpenNode virtualis<strong>ee</strong>rimislahenduses rajasime serveritevahelise suhtluse Funchaldusraamistikule. Võrreldes SSH ühenduse abil OpenNode serveritel operatsioonidekäivitamisega pakkus Func raamistik järgmiseid <strong>ee</strong>liseid:1. Func omab siss<strong>ee</strong>hita<strong>tud</strong> mehanismi SSL sertifikaatide allkirjastamiseks ningjagamiseks üksikute serverite ja keskse haldusserveri vahel. Joonisel 4 onnäida<strong>tud</strong>, milliste tegevuste abil sertifikaadid üksikutele serveritele väljajagatakse.2. Func pakub programm<strong>ee</strong>rijale võimaluse kasutada tarkvara arendamisel Func-iPythoni liideseid.3. Func võimaldab ühe operatsiooni käivitada korraga mitmel klientserveril.(Näiteks üheaegne tarkvarauuendus kõigil hallatavatel serveritel)4. Func võimaldab lihtsalt kirjutada uusi haldusoperatsioonide sooritamisekskasutatavaid mooduleid koos vastavate m<strong>ee</strong>toditega.5. Hallataval serveril tekkivad vead kantakse edasi haldusserverile standardset<strong>ee</strong>rinditena, mis võimaldab haldusserveril sooritada vigade haldust ning neist kakasutajaliideste kuvarakendustele teada anda.20


Joonis 4 Func sertifikaatide allkirjastamise ja jagamise protseduur.Func-i konkr<strong>ee</strong>tsemat kasutamist OpenNode serverite haldamisel käsitletaksePeatükis 6.3.4.2 Haldusserveri liidestus kasutajaliidese kuvarakendusegaVastavalt <strong>ee</strong>lnevale kirjeldusele, peab haldusserver olema võimeline universaalsekssidestumiseks kasutajaliidese kuvarakendusega, st. haldusserver peab kasutajaliidesel<strong>ttu</strong>levate käskluste põhjal sooritama OpenNode serveritel operatsioone, milletulemused tagastatakse kasutajaliidesele.OpenNode virtualis<strong>ee</strong>rimislahenduses otsustasime haldusserveril asuva liidese Funchaldusraamistikuga lahutada kasutajaliidese kuvarakendusest programmiliselteraldiseisvaks osaks. Selline lähenemine andis järgmised <strong>ee</strong>lised:1. Kasutajaliidese kuvarakendus ei pea asuma haldusserveril - st. ühtset liidesthaldusserveril on võimalik kasutada nii v<strong>ee</strong>bipõhiste kui ka muud tüüpikuvarakenduste loomisel.2. Kuvarakenduse ning haldusserveril oleva liidese arendamisel saab kasutadaüksteisest sõltumatuid tehnoloogiaid.21


Haldusserveril otsustasime realis<strong>ee</strong>rida Pythonis kirjuta<strong>tud</strong> t<strong>ee</strong>nuste serveri, millegakasutajaliideste kuvarakendused oleksid võimelised ühtset liidest kasutades suhtlema.T<strong>ee</strong>nuste serveri realis<strong>ee</strong>rimist on täpsemalt kirjelda<strong>tud</strong> Peatükis 5.3.5 Serveri tarkvaraga seo<strong>tud</strong> probl<strong>ee</strong>midEelnevalt välja toodud hulga virtualis<strong>ee</strong>rimiseks vajalike tehnoloogiate OpenNodeserveril kokku sobitamine põhjustas mitmeid probl<strong>ee</strong>me. Põhiline probl<strong>ee</strong>m seisnesametlikult kompil<strong>ee</strong>ri<strong>tud</strong> tarkvarapakettide konfiguratsioonis. OpenNode serveritarkvaras avastasime probl<strong>ee</strong>me KVM ja Libvirt tarkvarapakettidega. Vigadelahendamiseks kasuta<strong>tud</strong> modifits<strong>ee</strong>ri<strong>tud</strong> tarkvarapaketid on kättesaadavaks teh<strong>tud</strong>läbi eraldi loodud OpenNode koodivaramu.3.5.1 Probl<strong>ee</strong>m KVM tarkvarapakettidegaKVM tarkvarapaketi puhul esines probl<strong>ee</strong>m kerneli mooduliga. Nimelt on ametlikustCentOS koodivaramust pakutav KVM kerneli moodul kompil<strong>ee</strong>ri<strong>tud</strong> silmas pidadesametlikku CentOS 5.4 Linuxi kerneli versiooni 2.6.18-164.el5.x86_64. Kuna agaOpenNode serveri operatsioonisüst<strong>ee</strong>m kasutab modifits<strong>ee</strong>ri<strong>tud</strong> OpenVZ Linuxikernelit , siis KVM mooduli laadimine lõppes veaga.Lisaks erinevale kerneli versiooninumbrile KVM paketis erinesid ka KVM pooltnõutavad kerneli sümbolid OpenVZ kerneli poolt pakutavatest, mis põhjustasveasituatsiooni KVM tarkvarapaketi paigaldamisel.Probl<strong>ee</strong>mi lahendasime CentOS koodivaramust võe<strong>tud</strong> lähtekoodi põhjal KVMtarkvarapaketi uuesti kompil<strong>ee</strong>rimisega, määrates operatsioonisüst<strong>ee</strong>mi kerneliksvastava OpenVZ kerneli versiooni ning defin<strong>ee</strong>rides KVM mooduli poolt oodatavadsümbolid OpenVZ kerneliga ühilduvaks. Lähtekoodi põhjal uuesti kompil<strong>ee</strong>riminelahendas meie probl<strong>ee</strong>mid nii KVM mooduli laadimisel kui ka vastava tarkvarapaketipaigaldamisel.3.5.2 Probl<strong>ee</strong>m Libvirt tarkvarapaketigaOpenNode serveri tarkvaras esines ka probl<strong>ee</strong>m tarkvaraga Libvirt. Nimelt on CentOSkoodivaramus pakutav ametlik Libvirt tarkvarapakett kompil<strong>ee</strong>ri<strong>tud</strong> vaid QEMU jaXen tehnoloogiatel põhinevate virtuaalmasinate haldamiseks vajalike liidestega.OpenNode serveril kasutame aga QEMU (koos KVM kerneli mooduliga) ja OpenVZ22


virtualis<strong>ee</strong>rimistehnoloogiaid.Probl<strong>ee</strong>mi lahendamiseks tuli, sarnaselt KVM-le, ametlikust koodivaramust pärittarkvarapakett uuesti kompil<strong>ee</strong>rida, lisades ka OpenVZ tehnoloogia liidestekasutamise võimaluse. Lõpptulemusena saadud Libvirt tarkvarapakett võimaldablisaks KVM/QEMU virtuaalmasinatele ka OpenVZ konteinerite haldamise.23


4 OPENNODE SERVERI PAIGALDUSMEETODVastavalt Peatükis 1 toodud <strong>ee</strong>smärkidele vajas OpenNode serveri tarkvarapaigaldusm<strong>ee</strong>todit, mis peab võimaldama operatsioonisüst<strong>ee</strong>mi, tarkvarapakettide jakonfiguratsioonide lihtsusta<strong>tud</strong> ning automatis<strong>ee</strong>ri<strong>tud</strong> paigaldamist riistvaraliseleserverile. Järgnevates alapeatükkides käsitletakse paigaldusm<strong>ee</strong>todi valikut ja väljatöötamist.4.1 Paigaldusm<strong>ee</strong>todi valikOpenNode serveri tarkvara paigaldusm<strong>ee</strong>todi valimisel jäi sõelale kaks erinevatvarianti:1. Värskelt paigalda<strong>tud</strong> OpenNode serveri kõvaketaste p<strong>ee</strong>geldamine teisteleriistvaralistele serveritele.2. CentOS operatsioonisüst<strong>ee</strong>mi paigaldusprogrammi Anacondamodifits<strong>ee</strong>rimine OpenNode serveri tarkvara paigaldamiseks.Kuigi m<strong>ee</strong>tod nr. 1 pakub täisautomaatset paigaldusprotsessi, siis m<strong>ee</strong>todil nr. 2 olidjärgmised <strong>ee</strong>lised:1. Kõvaketaste p<strong>ee</strong>geldamine teistele riistvaralistele serveritele m<strong>ee</strong>todis nr. 1<strong>ee</strong>ldab neilt sarnast riistvaralist konfiguratsiooni. Ametlikupaigaldusprogrammi modifits<strong>ee</strong>rimine võimaldab OpenNode serveri tarkvarapaigaldada erinevate konfiguratsioonidega serveritele.2. Võimalik on kasutada ning modifits<strong>ee</strong>rida CentOS-i Pythonis kirjuta<strong>tud</strong>paigaldusprogrammi Anaconda.3. Anaconda võimaldab lisada programmi uusi kasutajavorme, saamakskasutajalt paigaldusprotsessi ajal tagasisidet.4. Kasutaja poolne valikute tegemine annab võimaluse riistvaralisel serveriltekitada ka erivajadustele vastavaid konfiguratsioone.5. Anaconda pakub paigaldusprotsessi sammude kirjeldamiseks lahendustKickstart, mis hõlbustab paigaldusm<strong>ee</strong>todi väljatöötamist.Eelnevalt toodud põhjustest lähtuvalt valisime OpenNode serveri tarkvara24


paigaldamiseks m<strong>ee</strong>todi nr. 2. Järgmistes alapeatükkides kirjeldataksepaigaldusprogrammis Anaconda teh<strong>tud</strong> muudatusi ja lahenduse Kickstart kasutamist.4.2 Paigaldusprogrammi Anaconda modifits<strong>ee</strong>rimineAnaconda modifits<strong>ee</strong>rimise käesolevas töös põhjustas vajadus saada paigaldamise ajalsüst<strong>ee</strong>miadministraatorilt tagasisidet. Anaconda pakub võimalust k<strong>ee</strong>les Python ningkasutades pyGTK abil GTK+ GUI t<strong>ee</strong>ki lisada paigaldusprogrammi uusikasutajavorme.Järgmistes punktides on kirjelda<strong>tud</strong> Anacondasse sisse viidud muudatusi.4.2.1 Kõvaketaste partitsion<strong>ee</strong>rimissk<strong>ee</strong>mide kasutajavormEsimene Anacondasse sisse viidud modifikatsioon puudutas kõvaketastepartitsion<strong>ee</strong>rimist puudutavat kasutajavormi. Nimelt otsustasime, et paigaldusprotsessilihtsustamiseks peaks süst<strong>ee</strong>miadministraatoril olema võimalus valida üks järgmistestkõvaketaste partitsion<strong>ee</strong>rimissk<strong>ee</strong>midest:1. Riistvaraline RAID sk<strong>ee</strong>m / Ilma RAID-ta sk<strong>ee</strong>m2. Linuxi tarkvaraline RAID1 sk<strong>ee</strong>m3. Käsitsi partitsion<strong>ee</strong>rimissk<strong>ee</strong>mi loomineOpenNode serveri paigaldusprotsessis asendab kõvaketaste partitsion<strong>ee</strong>rimissk<strong>ee</strong>mivaliku kasutajavorm Anaconda vaikimisi tervitusekraani. Kasutatavatpartitsion<strong>ee</strong>rimissk<strong>ee</strong>mi valiku ekraanipilti kirjeldab Joonis 5.25


Joonis 5 Kasutajavorm kõvaketaste paritsion<strong>ee</strong>rimissk<strong>ee</strong>mi valikuksVastavalt valikule luuakse Anaconda standardsete funktsioonidega OpenNode serveripartitsion<strong>ee</strong>rimissk<strong>ee</strong>m (toodud punktis 4.2.2). Standardfunktsioonide kasutamisetõ<strong>ttu</strong> on süst<strong>ee</strong>miadministraatoritel võimalik loodud partitsion<strong>ee</strong>rimissk<strong>ee</strong>miAnaconda siss<strong>ee</strong>hita<strong>tud</strong> vahenditega detailselt redig<strong>ee</strong>rida. Linuxi tarkvaralise RAID1partitsion<strong>ee</strong>rimissk<strong>ee</strong>mi redig<strong>ee</strong>rimise kasutajavormi kirjeldab Joonis 6.26


Joonis 6 Vali<strong>tud</strong> partitsion<strong>ee</strong>rimissk<strong>ee</strong>mi detailne redig<strong>ee</strong>rimine4.2.2 Kõvaketaste partitsion<strong>ee</strong>rimisk<strong>ee</strong>midEelmises punktis välja toodud kaks partitsion<strong>ee</strong>rimise valikut kasutavad mõlemadvaikimisi ühesugust alussk<strong>ee</strong>mi, mida kirjeldatakse Joonisel 7.swap / /vz /storage /backup/bootLVM partitsioonide gruppKõvaketasJoonis 7 OpenNode serveril kasutatav vaikimisi partitsion<strong>ee</strong>rimissk<strong>ee</strong>mEsimese sk<strong>ee</strong>mi valimise korral luuakse OpenNode serveri partitsioonid esimeselefüüsilisele kettale (riistvaralise RAID puhul esimesele kettamassiivile). OpenNodeserveri kõik partitsioonid, välja arva<strong>tud</strong> /boot, on loodud LVM partitsioonide gruppi,lihtsustamaks hilisemat üksikute partitsioonide haldamist.27


Teise sk<strong>ee</strong>mi valimise korral hõlmab Joonisel 7 olev “Kõvaketas” OpenNode serverikahte esimest füüsilist ketast, millele luuakse Linuxi tarkvaraline RAID1. ReaalsedLinuxi tarkvaralisel RAID1-l olevad partitsioonid on sama struktuuriga kui esimesesk<strong>ee</strong>mi valikugi puhul.OpenNode serveri partitsioonid täidavad järgmiseid ülesandeid:• /boot – sisaldab operatsioonisüst<strong>ee</strong>mi kernelit ning Grub käivitushaldurikonfiguratsioone• swap – partitsioon virtuaalmälu jaoks• /vz – sisaldab OpenVZ operatsioonisüst<strong>ee</strong>mi mallide ning virtuaalsetekonteinerite failide hoidmiseks• /backup – sisaldab regulaarseid tagavarakoopiad• /storage – sisaldab KVM/QEMU failipõhiseid kettaseadmeid,operatsioonisüst<strong>ee</strong>mide paigaldusm<strong>ee</strong>diate ISO faile, virtuaalmasinatemallifaile• / - juurpartitsioon, mis sisaldab kõiki faile peale nende, mis asuvad<strong>ee</strong>lnimeta<strong>tud</strong> partitsioonidel4.2.3 Tarkvarapakettide valikuvõimalusedÜks Peatükis 1 toodud ülesanne oli komplekt<strong>ee</strong>rida minimaalne virtualis<strong>ee</strong>rimistvõimaldav tarkvarakooslus. Ülesande täitmiseks <strong>ee</strong>maldasime esialgsest CentOSpaigaldusm<strong>ee</strong>diast mittevajalikud tarkvarapaketid. Ainult vajalike tarkvarapakettidepaigaldusm<strong>ee</strong>diasse jätmisega saavutasime m<strong>ee</strong>dia mahu kahanemise suurusjärgus4GB-lt 0.5GB-le.Kuna kõik mittekasutatavad tarkvarapaketid on paigaldusm<strong>ee</strong>diast <strong>ee</strong>malda<strong>tud</strong>, siisotsustasime modifits<strong>ee</strong>rida Anaconda programmifaile ning lülitada tavapärasepakettide valiku välja. Tarkvaralist vahendit Kickstart, milles määratakse kindlakspaigaldatavad tarkvarapaketid, on käsitle<strong>tud</strong> järgmises alapeatükis.4.3 Paigaldusprotsessi kirjeldamise võimalus KickstartCentOS paigaldusprogramm Anaconda pakub süst<strong>ee</strong>miadministraatorile võimaluseoperatsioonisüst<strong>ee</strong>mi paigaldamise protsessi <strong>ee</strong>lnevalt kirjeldada. Sellisepaigaldusprotsessi kirjeldamise vahendiks Anacondas on Kickstart.28


Lisaks Anaconda kasutajaliidese modifits<strong>ee</strong>rimisele otsustasime paigaldusm<strong>ee</strong>dialoomisel kasutada ka Kickstarti tema selge struktuuri ning lihtsa muutmisvõimalusetõ<strong>ttu</strong>. Kickstarti kasutamine võimaldab paigaldamisprotsessi edaspidiseid muutuseidkirjeldada ühes failis ning vältida sellega pidevat Anaconda programmifailidemodifits<strong>ee</strong>rimist.Kickstart failil on kindlaks määra<strong>tud</strong> struktuur, mis koosneb järgmistestsektsioonidest:1. Paigaldusprotsessi üldvalikud (options)2. Paigaldatavate tarkvarapakettide ning paketigruppide nimekiri (%packages)3. Paigaldusprotsessi <strong>ee</strong>lsed ning järgsed tegevused (%pre, %post)Järgmistes punktides kirjeldatakse täpsemalt iga Kickstart struktuuri sektsiooni eraldi.4.3.1 Paigaldusprotsessi üldvalikudOpenNode serveri puhul kasutasime üldvalikuid, et kindlaks määrata järgmisedpaigaldusprotsessi seadistused:• OpenNode serveri puhul on tegemist uue paigaldusega, millepaigaldusm<strong>ee</strong>diaks kasutatakse CD/DVD m<strong>ee</strong>diat.• Paigaldusprotsess on interaktiivne, mis võimaldab paigaldamise ajalsüst<strong>ee</strong>miadministraatoril <strong>ee</strong>ldefin<strong>ee</strong>ri<strong>tud</strong> väärtuseid muuta.• firstboot utiliit, mis võimaldab turva- ning võrguseadete muutmist, onesmakordsel serveri käivitamisel sisse lülita<strong>tud</strong>.• Paigalda<strong>tud</strong> operatsioonisüst<strong>ee</strong>m kasutab kasutajate paroolide krüpt<strong>ee</strong>ri<strong>tud</strong>hoidmiseks shadow faili.Üldvalikud võimaldaksid <strong>ee</strong>lnevalt ka kindlaks määrata kõvaketastepartitsion<strong>ee</strong>rimissk<strong>ee</strong>mi, kuid OpenNode serveri puhul teostatakse sk<strong>ee</strong>mi valik ningpartitsioonide loomine modifits<strong>ee</strong>ri<strong>tud</strong> Anacondas.4.3.2 Paigaldatavate tarkvarapakettide ning paketigruppide nimekiriKäesolevas Kickstart faili sektsioonis koostasime nimekirja tarkvarapakettidest ningpaketigruppidest, mis reaalselt värskele OpenNode serverile paigaldatakse. Pakettidening gruppide defin<strong>ee</strong>rimine nimekirjana võimaldab hiljem paigaldatavate pakettide29


koosluse lihtsat muutmist.4.3.3 Paigaldusprotsessi <strong>ee</strong>lsed ning järgsed tegevusedKäesolev sektsioon võimaldab <strong>ee</strong>lnevalt defin<strong>ee</strong>rida tegevused, mida sooritataksevastavalt enne (%pre) ja pärast (%post) paigaldusprotsessi. Tegevused esitatakseKickstart failis skriptik<strong>ee</strong>lte (BASH või Python) programmikoodidena.OpenNode serveri tarkvara paigaldamisel paigaldusprotsessi <strong>ee</strong>lseid tegevusi eisoorita<strong>tud</strong>. Juhul, kui partitsion<strong>ee</strong>rimissk<strong>ee</strong>mi valik ei toimuks modifits<strong>ee</strong>ri<strong>tud</strong>Anaconda ekraanivormide abil, oleks võimalus Pythoni Snack t<strong>ee</strong>gi abil luua %presektsioonis tekstipõhine kasutajavorm partitsion<strong>ee</strong>rimissk<strong>ee</strong>mi valikuks. Samutivõimaldab %pre sektsioon luua tekstipõhiseid kasutajavorme ka teiste seadistustevalimiseks.OpenNode serveri paigaldusprotsessi järgselt (%post sektsioonis) sooritataksejärgmised tegevused:• Virtuaalmasinate jaoks vajaliku võrgusilla loomine ning konfigur<strong>ee</strong>rimine.• OpenVZ virtualis<strong>ee</strong>rimistehnoloogia jaoks vajalike süst<strong>ee</strong>mimuutujatemuutmine.• OpenVZ virtualis<strong>ee</strong>rimistehnoloogia utiliitide konfiguratsioonifailidemuutmine.• Koodivaramute konfiguratsioonifailide ning sign<strong>ee</strong>rimisvõtmete tõstmineOpenNode serverile.• Koodivaramute priorit<strong>ee</strong>tide ning ignor<strong>ee</strong>ritavate tarkvarapakettidenimekirjade muutmine.• /vz, /storage ning /backup failipuude olemasolu ning vajadusel nende loominejuurpartitsioonile.• OpenNode serveri tööks mittevajalike t<strong>ee</strong>nuste välja lülitamine.30


5 OPENNODE KESKHALDUSE TEENUSTE SERVERPunkti 3.4.2 kohaselt peab OpenNode haldusserver pakkuma kasutajaliidestekuvarakendustele võimalust edastada operatsioonide sooritamise käske üksikuteleOpenNode serveritele. Käesolevas peatükis kirjeldatakse täpsemalt OpenNodekeskhalduse t<strong>ee</strong>nuste serveri toimimist. Järgnevalt toodud t<strong>ee</strong>nuste serveri kirjeldus eiole lõplik, sest silmas pidades t<strong>ee</strong>nuste serverite lihtsat laiendatavust on uute t<strong>ee</strong>nusteloomine kerge. Toodud t<strong>ee</strong>nused ning nende kirjeldused on töös toodudillustr<strong>ee</strong>rimaks t<strong>ee</strong>nuste serveri tööpõhimõtet.5.1 T<strong>ee</strong>nuste serveri andmevahetusprotokollidKuna OpenNode virtualis<strong>ee</strong>rimislahenduse esmase kasutajaliidese kuvarakendusearendamine on plan<strong>ee</strong>ri<strong>tud</strong> QooxDoo raamistikul, siis vajasime t<strong>ee</strong>nuste serverit,millega kasutatav raamistik võimalikult lihtsalt ühilduks.QooxDoo projektis on loodud võimalus suhtlemiseks serveritel asuvate t<strong>ee</strong>nustega.S<strong>ee</strong>ga võtsime täpsema vaatluse alla QooxDoo poolt pakutavate t<strong>ee</strong>nustega suhtlemiseprotokolli ning kaalusime selle sobivust loodaval t<strong>ee</strong>nuste serveril kasutamiseks.QooxDoo raamistiku vastavas objektis kasutatakse serveri poole pöördumiseks HTTPGET päringut järgmisel kujul:http://server:t<strong>ee</strong>nuste_port/?id=pöördumise_id&service=t<strong>ee</strong>nuse_nimi&method=m<strong>ee</strong>todi_nimi&params=[m<strong>ee</strong>todi_param<strong>ee</strong>ter1, ...]Raamistiku vastavad objektid ootavad serverilt vastust JSON formaadis järgmiselkujul:{"error""id""result": “võimalik tekkinud erind”,: “esialgse pöördumise identifikaator”,: “operatsiooni käivitamise tulemus”}31


Kui vaadata <strong>ee</strong>lpool toodud suhtlusprotokolli, siis selgub, et rahulda<strong>tud</strong> on põhilisedOpenNode t<strong>ee</strong>nuste serveri vajadused. Andmevahetus t<strong>ee</strong>nuste serveriga <strong>ee</strong>ldabt<strong>ee</strong>nuste poole pöördumist sarnaselt kohalike m<strong>ee</strong>todite poole pöördumisega,kasutades tekstipõhiselt esitatavaid param<strong>ee</strong>treid. Ka t<strong>ee</strong>nuste poolt tagastatavadoperatsioonide tulemused on r<strong>ee</strong>glina lühikesed ning esitatakse tekstipõhistena.Samuti on <strong>ee</strong>lnevalt toodud t<strong>ee</strong>nuste poole pöördumise protokoll piisavalt lihtne, e<strong>ttu</strong>levikus realis<strong>ee</strong>rida pöördumisteks vajalikud objektid ka teistes k<strong>ee</strong>ltes kirjuta<strong>tud</strong>kuvarakendustele.Esialgsesse JSON vastuseformaati viisime sisse ühe uuenduse – nimelt mekapseldasime võtmega “result” väärtuse v<strong>ee</strong>l omakorda dictionary andmestruktuuriks,lisades vastusesse võtmega “type” väärtuse....“result” :{“type” : “vastuse tüüp”,“result” : “operatsiooni käivitamise tulemus”}...Võtme “type” väärtusena tagastab t<strong>ee</strong>nuste server operatsiooni tulemuse allika tüübi –kas vahemälust võe<strong>tud</strong> vanem versioon või operatsiooni käivitamise värske tulemus.S<strong>ee</strong> muudatus sai teh<strong>tud</strong> <strong>ee</strong>smärgiga kasutajaliideste kuvarakendusi pareminiinform<strong>ee</strong>rida teh<strong>tud</strong> päringu vastuse allikast.Kuna kasutatav haldusraamistik Func on realis<strong>ee</strong>ri<strong>tud</strong> k<strong>ee</strong>les Python ning omab samask<strong>ee</strong>les teistele programmidele liideseid, siis realis<strong>ee</strong>risime t<strong>ee</strong>nuste serveri samutik<strong>ee</strong>les Python, et vältida Funcile suuna<strong>tud</strong> käskluste vahepealsetprogramm<strong>ee</strong>rimisk<strong>ee</strong>lte vahelist teisendamist.5.2 T<strong>ee</strong>nuste serveri ülesehitusRealis<strong>ee</strong>ri<strong>tud</strong> t<strong>ee</strong>nuste serverit võib vaadelda mitmekihilisel mustril põhinevastruktuurina, kus funktsion<strong>ee</strong>rivad järgmised mitmekihilisele arhitektuurileiseloomulikud kihid: [11, lk 19-22]32


1. T<strong>ee</strong>nuste serveri põhikontroller, mis käivitab ettean<strong>tud</strong> pordil lihtsa serveri ningjääb ootama pöördumisi ning suunab n<strong>ee</strong>d edasi vajalikele t<strong>ee</strong>nustele.2. T<strong>ee</strong>nuste klassid ning nendes sisalduvates m<strong>ee</strong>todites asuv tööloogika Funcoperatsioonide välja kutsumiseks. T<strong>ee</strong>nuste klassid suhtlevad andmete saamiseksomakorda andmevahetuse kihiga.3. Andmevahetuse kiht on omakorda jaga<strong>tud</strong> kolme erineva komponendi vahel:a. CacheManager vahemälu kontroller, mille ülesandeks andmebaasishoitavate vahemälu kirjete pärimine, uuendamine ning lisamine.Vahemälu kontroller t<strong>ee</strong>nindab t<strong>ee</strong>nuste klasside m<strong>ee</strong>todeid,võimaldades neil kasutajaliidesele tagastada <strong>ee</strong>lnevate Func päringutetulemusi. Vahemälu kirjetes sisalduvad varasemalt läbi viidud Funcoperatsioonide tulemused.b. Func kontroller, mis käivitab OpenNode serveritel Func m<strong>ee</strong>todeid jatagastab läbi viidud operatsioonide tulemusi.c. Andmebaasikontroller, mille ülesandeks on otsene suhtlus andmebaasisasuva vahemälutabeliga ning samas ka kasutajate sessioonihaldusetabeliga. Esialgses t<strong>ee</strong>nuste serveri implementatsioonis kasutasimelihtsat andmebaasisüst<strong>ee</strong>mi sqlite.Lõppkasutaja ja t<strong>ee</strong>nuste serveri vahel seisvat kasutajaliidese kuvarakendust võibomakorda vaadata k<strong>ee</strong>rulisema sisemise struktuuriga presentatsioonikihina, mis saabvajalikud andmed t<strong>ee</strong>nuste serveri põhikontrollerilt. T<strong>ee</strong>nuste serveri üldstruktuur ontoodud Joonisel 8 asuva klassidiagrammina.33


Joonis 8 T<strong>ee</strong>nuste serveri komponentide seotust kajastav klassidiagramm.5.3 T<strong>ee</strong>nuste serveri põhikontrollerPõhikontroller kujutab endast k<strong>ee</strong>les Python kirjuta<strong>tud</strong> programmi, mis täidab liideseülesannet serveri poolt pakutavate t<strong>ee</strong>nuste ning t<strong>ee</strong>nuseid vajava kasutajaliidesekuvarakenduse vahel. Side kasutajaliidese kuvarakenduse ning t<strong>ee</strong>nuste serveri vaheltoimub üle standardse HTTPS protokolli, pakkumaks turvalist sidet.T<strong>ee</strong>nuste serveri põhikontroller teostab oma elutsükli vältel järgmised toimingud:1. Käivitab ettean<strong>tud</strong> pordil ning IP-aadressil lihtsa HTTP serveri.2. Seob t<strong>ee</strong>nuste klassid vastavate t<strong>ee</strong>nuste nimedega (HTTP GET pöördumisesparam<strong>ee</strong>ter “service”).3. Alustab HTTP GET pöördumiste ootamist.4. Suunab kättesaadud HTTP GET pöördumise vajalikule t<strong>ee</strong>nuse klassile (võitagastab veateate, kui t<strong>ee</strong>nus puudub)5. Tagastab t<strong>ee</strong>nuse klassilt tulnud vastuse kasutajaliidesele HTTP response kujul34


5.4 CacheManager vahemälu kontrollerOpenNode t<strong>ee</strong>nuste serverile lisasime ka Func päringute tulemuste vahemälu koosvastava kontrolleriga järgmistel põhjustel:1. Vahemälu olemasolu võimaldab vähendada võrguliiklust keskse haldusserverining üksikute OpenNode serverite vahel. CacheManager kontrolleri olemasoluvõimaldab vajadusel tagastada kasutajaliidesele vahemälus hoitavaid <strong>ee</strong>lnevateFunc päringute tulemusi (näiteks harva muutuvad OpenNode serveritekonfiguratsiooniparam<strong>ee</strong>trite väärtuseid).2. Vahemälu olemasolu võimaldab kasutajaliidese poolt välja kutsuda t<strong>ee</strong>nustem<strong>ee</strong>todeid, mille operatsioonid kestavad kauem, kui HTTP ühenduse timeout.CacheManager vahemälu kontrolleri töö ning juhtimine on koonda<strong>tud</strong> kahtem<strong>ee</strong>todisse:1. get_cache – Vastavalt ettean<strong>tud</strong> võtmele saadab päringu andmebaasikontrollerile ning tagastab vahemälu andmebaasist lei<strong>tud</strong> kirje.2. save_cache – Saadab andmebaasi kontrollerile vahemälu kirjesalvestamise/uuendamise päringu.5.4.1 Vahemälu tööloogika T<strong>ee</strong>nuste serveri jaoks vahemälu implement<strong>ee</strong>rimisel kasutasime alusmaterjalinaMark Grandi poolt kirjelda<strong>tud</strong> vahemälu toimimismehanismi [5, lk 283-302]. Nimelttoimub vahemälust andmete pärimine ning salvestamine CacheManager klassivahendusel, kuid nende tegevuste algatajateks on t<strong>ee</strong>nuste klassid.Hõlbustamaks vahemälu puhul andmete aegumise tuvastamist, ootab t<strong>ee</strong>nuste serveriga pöördumise juures ka ajanihke param<strong>ee</strong>trit, mille abil teavitatakse t<strong>ee</strong>nusteserverit, kui vanad konkr<strong>ee</strong>tse pöördumisega kasutatavad andmed olla võivad. S<strong>ee</strong>annab võimaluse sooritada ka operatsioone, mille andmed ei tohi tulla vahemälust –ajanihke param<strong>ee</strong>triks tuleb sel juhul määrata 0.Ajanihke param<strong>ee</strong>tri edastamise nõudega panime andmete ajalise kehtivuse piiridemääramise kasutajaliidese kuvarakenduse ülesandeks, st. igas üksikus kasutajaliidesekuvarakenduses on võimalik otsustada vajalike andmete uudsuse üle.Detailsemalt toimub vahemälu kasutamine operatsioonide läbiviimisel:35


1. Ühe konkr<strong>ee</strong>tse t<strong>ee</strong>nuse klassi m<strong>ee</strong>tod kutsutakse t<strong>ee</strong>nuste serveri kontrolleripoolt välja.2. Väljakutsu<strong>tud</strong> t<strong>ee</strong>nuse m<strong>ee</strong>tod kutsub välja CacheManager klassi m<strong>ee</strong>todiget_cache() päringuvõtmega, mis on string struktuuriga –“t<strong>ee</strong>nus-m<strong>ee</strong>tod-[param<strong>ee</strong>ter1,param<strong>ee</strong>ter2,...,param<strong>ee</strong>terN]”. Selline võti onunikaalne igale kindlale serverile (serverite grupile) määra<strong>tud</strong> Func väljakutsekohta.3. Väljakutsu<strong>tud</strong> t<strong>ee</strong>nuse m<strong>ee</strong>tod kontrollib CacheManager klassi get_cache()m<strong>ee</strong>todi tagasta<strong>tud</strong> tulemust.4. Kui vahemälu kirje tagastati, siis:a. Kui vahemälu kirje ei ole aegunud, siis tagastatakse ta tulemusenat<strong>ee</strong>nuste serveri kontrollerile. Aegumise tuvastamine teostataksetehtega hetke_aeg - andmete_aeg < ajanihke_param<strong>ee</strong>ter.b. Kui vahemälu kirje on aegunud, siis:i. Pöördub väljakutsu<strong>tud</strong> t<strong>ee</strong>nuse m<strong>ee</strong>tod omakorda Funckontrolleri poole ning kutsub s<strong>ee</strong>ga OpenNode serveril väljavastava Func m<strong>ee</strong>todi.ii. Väljakutsu<strong>tud</strong> t<strong>ee</strong>nuse m<strong>ee</strong>tod salvestab Func kontrolleriltsaadud tagastustulemuse vahemälu andmebaasitabelisse.iii. Väljakutsu<strong>tud</strong> t<strong>ee</strong>nuse m<strong>ee</strong>tod tagastab t<strong>ee</strong>nuste serverikontrollerile Func kontrollerilt saadud tagastustulemuse.5. Kui vahemälu kirjet ei tagasta<strong>tud</strong>, siis:a. Pöördub väljakutsu<strong>tud</strong> t<strong>ee</strong>nuse m<strong>ee</strong>tod omakorda Func kontrolleripoole ning kutsub OpenNode serveril välja vastava Func m<strong>ee</strong>todi.b. Väljakutsu<strong>tud</strong> t<strong>ee</strong>nuse m<strong>ee</strong>tod salvestab Func kontrollerilt saadudtagastustulemuse vahemälu andmebaasitabelisse.c. Väljakutsu<strong>tud</strong> t<strong>ee</strong>nuse m<strong>ee</strong>tod tagastab t<strong>ee</strong>nuste serveri kontrollerileFunc kontrollerilt saadud tagastustulemuse.36


5.4.2 Vahemälu andmebaasitabel “cache”Vahemälu realis<strong>ee</strong>risime selliselt, et ta kasutab ainult ühte ning lihtsa struktuurigaandmebaasitabelit “cache”. Tabelis 1 on eraldi välja toodud andmebaasitabeli “cache”kirjeldus.Välja nimi Välja tüüp Välja kirjelduscache_key string tabeli primaarvõti kujul “t<strong>ee</strong>nus-m<strong>ee</strong>tod-[param<strong>ee</strong>ter1,param<strong>ee</strong>ter2,...,param<strong>ee</strong>terN]”cache_value string vahemälu kirje väärtus, mis kujutab endastr<strong>ee</strong>glina Func kontrolleri väljunditcache_timestamp number vahemälu kirje salvestamise/muutmise aeg(ajatempel)Tabel 1 Vahemälu andmebaasitabeli kirjeldus.5.5 Andmebaasi kontrollerAndmebaasi kontrollerisse koondasime kogu andmebaasiga suhtlemise loogika, sh.Ühenduste loomine ning andmebaasipäringute sooritamise. T<strong>ee</strong>nuste serverilsuhtlevad andmebaasiga kaks komponenti – sessioonihaldus ning vahemälukontroller.Vahemälu kontrolleri jaoks realis<strong>ee</strong>risime andmebaasi kontrolleris järgmised kaksm<strong>ee</strong>todit:1. get_cache_data – Tagastab andmebaasitabelist “cache” ettean<strong>tud</strong> võtmelevastava vahemälu kirje ning kirje ajatempli väärtuse.2. update_cache_data – Kui ettean<strong>tud</strong> võti on andmebaasitabelis “cache” jubaolemas, siis uuendatakse vastava võtme vahemälu kirjet ning ajatemplit. Kuiettean<strong>tud</strong> võtmega kirjet andmebaasitabelis “cache” pole, siis luuakse uus kirj<strong>ee</strong>ttean<strong>tud</strong> andmete põhjal.Sessioonihalduse läbiviimiseks realis<strong>ee</strong>risime andmebaasi kontrolleris järgmisem<strong>ee</strong>todi:1. get_session_data – Tagastab andmebaasitabelist “session” ettean<strong>tud</strong> sessiooni37


identifikaatorile vastava sessiooni info.2. insert_session_data – Lisatakse uus / uuendatakse olemasoleva sessiooniinformatsiooni andmebaasitabelisse “session”. Kui lisatava sessiooniidentifikaatorile vastav sessioon juba eksist<strong>ee</strong>rib, siis m<strong>ee</strong>todiga uuendataksesessiooni ajatempli väärtust.5.5.1 Sessioonihalduse andmebaasitabel “session” Sessioonihalduse realis<strong>ee</strong>rimise selliselt, et ta kasutab ainult ühte ning lihtsastruktuuriga andmebaasitabelit “session”. Tabelis 2 on eraldi välja toodudandmebaasitabeli “session” kirjeldus.Välja nimi Välja tüüp Välja kirjeldussessid String tabeli primaarvõti, sessiooni identifikaatoruser String sessiooniga seo<strong>tud</strong> kasutaja identifikaatortimestamp Number sessiooni viimase toimingu ajatempelTabel 2 Vahemälu andmebaasitabeli kirjeldus.5.6 T<strong>ee</strong>nuste klassidJärgnevates punktides on ära toodud t<strong>ee</strong>nuste serveril asuvad t<strong>ee</strong>nuste klassid, koosnende poolt pakutavate m<strong>ee</strong>todite sisuga.5.6.1 GeneralService t<strong>ee</strong>nuste baasklassGeneralService klassi kasutasime baasklassina kõigile ülejäänud t<strong>ee</strong>nuste klassidele.Baasklassis realis<strong>ee</strong>risime m<strong>ee</strong>todid ning funktsionaalsuse, mida vajavad oma töökserinevat tüüpi t<strong>ee</strong>nuste klassid.GeneralService klassis realis<strong>ee</strong>ri<strong>tud</strong> funktsionaalsus:1. Suhtlemine vahemälu kontrolleriga2. Suhtlemine otse admebaasikontrolleriga3. Exception klassi abil erindite teisendamine4. Func operatsioonide väljakutsumine38


5.6.2 CertmasterService t<strong>ee</strong>nuste klassCertmasterService klass pakub OpenNode serverite Func sertifikaatide allkirjastamisening tühistamise t<strong>ee</strong>nuseid. Realis<strong>ee</strong>ri<strong>tud</strong> t<strong>ee</strong>nused on vajalikud haldusserveri ningOpenNode serverite Func klientide vaheliste turvaliste ühenduste loomiseks ningkatkestamiseks.Klassi pakutavad t<strong>ee</strong>nused on realis<strong>ee</strong>ri<strong>tud</strong> järgmiste m<strong>ee</strong>toditena:• list_requests – Tagastab haldusserverile teh<strong>tud</strong> sertifikaatideallkirjastamisnõuete nimekirja. Nimekiri sisaldab allkirjastamisnõuded teinudOpenNode serverite hostname-sid.• sign_request – Allkirjastatab ettean<strong>tud</strong> hostname-ga OpenNode serverisertifikaadi allkirjastamisnõue. OpenNode virtualis<strong>ee</strong>rimislahendusesrealis<strong>ee</strong>rib sertifikaadi allkirjastamine serveri lisamist hallatavate serveritenimekirja.• list_signed – Tagastab hallatavate serverite nimekirja (nimekiri serveritest,mille sertifikaadid on haldusserveri poolt allkirjasta<strong>tud</strong>).• remove_signed – Kustutab hallatavate serverite nimekirjast ettean<strong>tud</strong> serveri.5.6.3 OpenVZService t<strong>ee</strong>nuste klassOpenVZService klass pakub OpenNode serveritel asuvate OpenVZ virtuaalmasinatehaldamiseks vajalikke t<strong>ee</strong>nuseid. Realis<strong>ee</strong>ri<strong>tud</strong> t<strong>ee</strong>nuste puhul <strong>ee</strong>ldatakse, et OpenVZvirtuaalmasinad kasutavad standardseid malle ja konfiguratsioonifaile ningvirtuaalmasinad asuvad standardsetes /vz failipuu alamkataloogides.Klassi pakutavad t<strong>ee</strong>nused on realis<strong>ee</strong>ri<strong>tud</strong> järgmiste m<strong>ee</strong>toditena:• list_vms – Tagastab nimekirja ettean<strong>tud</strong> serveri(te)l asuvatest OpenVZvirtuaalmasinatest.• start_vm – Käivitab ettean<strong>tud</strong> OpenVZ virtuaalmasina.• stop_vm – Peatab ettean<strong>tud</strong> OpenVZ virtuaalmasina.• create_vm – Loob uue OpenVZ virtuaalmasina vastavalt määra<strong>tud</strong> mallilening <strong>ee</strong>ldefin<strong>ee</strong>ri<strong>tud</strong> konfiguratsioonifailile. Lisaks võimaldab uuelevirtuaalmasinale määrata <strong>ee</strong>ldefin<strong>ee</strong>ri<strong>tud</strong> konfiguratsioonifailist erinevadIP-seadistused, hostname, ressursside kasutamise piirangud.39


• delete_vm – Peatab ja hävitab ettean<strong>tud</strong> OpenVZ virtuaalmasina.• migrate_vm – live-migr<strong>ee</strong>rib OpenVZ konteineri ühelt OpenNode serveriltettean<strong>tud</strong> teisele OpenNode serverile. Migr<strong>ee</strong>rimise protsessi kirjeldataksetäpsemalt Peatükis 6.3.5.6.4 KVMService t<strong>ee</strong>nuste klassKVMService klass pakub OpenNode serveritel asuvate KVM/QEMUvirtuaalmasinate haldamiseks vajalikke t<strong>ee</strong>nuseid. Realis<strong>ee</strong>ri<strong>tud</strong> t<strong>ee</strong>nuste puhul onarvesta<strong>tud</strong> võimalustega KVM/QEMU virtuaalmasinate loomist nii failipõhisteleketastele, LVM loogilistele ketastele ning reaalsetele plokk-seadmetele.Klassi pakutavad t<strong>ee</strong>nused on realis<strong>ee</strong>ri<strong>tud</strong> järgmiste m<strong>ee</strong>toditena:• list_vms – Tagastab nimekirja ettean<strong>tud</strong> serveri(te)l asuvatest KVM/QEMUvirtuaalmasinatest.• start_vm – Käivitab ettean<strong>tud</strong> KVM/QEMU virtuaalmasina.• stop_vm – Peatab ettean<strong>tud</strong> identifikaatoriga KVM/QEMU virtuaalmasina.• create_file_based_image – Loob ettean<strong>tud</strong> param<strong>ee</strong>tritega failipõhise kettaqcow2 formaadis. Failipõhine ketas luuakse OpenNode serverilstandardasukohta /storage/images/• delete_file_based_image – Kustutab ettean<strong>tud</strong> failipõhise ketta OpenNodeserverilt.• list_file_based_image – Tagastab OpenNode serveri(te)l asuvate failipõhisteketaste nimekirja.• list_file_based_image_used – Tagastab OpenNode serveri(te)l asuvatefailipõhiste ketaste nimekirja, mis sisalduvad virtuaalmasinatekonfiguratsioonifailides.• create_vm_file_based – Loob ettean<strong>tud</strong> failipõhisele kettale uueKVM/QEMU virtuaalmasina.• create_vm_lvm_based – Loob ettean<strong>tud</strong> LVM loogilisele kettale uueKVM/QEMU virtuaalmasina.• create_vm_disk_based – Loob ettean<strong>tud</strong> reaalsele plokk-seadmele uue40


KVM/QEMU virtuaalmasina.• delete_vm – Peatab ja hävitab ettean<strong>tud</strong> KVM/QEMU virtuaalmasina.• live_migrate_vm – live-migr<strong>ee</strong>rib KVM/QEMU virtuaalmasina üheltOpenNode serverilt ettean<strong>tud</strong> teisele OpenNode serverile. Juhul kuilive-migr<strong>ee</strong>rimine pole võimalik, siis tagastatakse veateade. Migr<strong>ee</strong>rimiseprotsessi kirjeldatakse täpsemalt Peatükis 6.3.• offline_migrate_vm – offline-migr<strong>ee</strong>rib KVM/QEMU virtuaalmasina üheltOpenNode serverilt ettean<strong>tud</strong> teisele OpenNode serverile.5.6.5 LVMService t<strong>ee</strong>nuste klassLVMService klass pakub OpenNode serveritel LVM loogiliste ketaste haldamiseksvajalikke t<strong>ee</strong>nuseid. LVM loogiliste ketaste jaoks t<strong>ee</strong>nuste realis<strong>ee</strong>rimisel pidasimesilmas just KVM/QEMU virtuaalmasinate loomisel loogiliste ketaste olemasoluvajalikkust.Klassi pakutavad t<strong>ee</strong>nused on realis<strong>ee</strong>ri<strong>tud</strong> järgmiste m<strong>ee</strong>toditena:• list_vg – Tagastab nimekirja OpenNode serveri(te)l asuvatest LVM loogilisteketaste gruppidest.• list_lv – Tagastab nimekirja OpenNode serveri(te)l asuvatest LVM loogilistestketastest.• create_lv – Loob OpenNode serverile ettean<strong>tud</strong> param<strong>ee</strong>tritega uue LVMloogilise ketta ettean<strong>tud</strong> ketaste gruppi.• delete_lv – Kustutab OpenNode serverilt ettean<strong>tud</strong> LVM loogilise ketta.5.6.6 Exception klassT<strong>ee</strong>nuste serveri kasutamisel koos Func haldusraamistikuga tekkis probl<strong>ee</strong>m erinditehaldamisega. Nimelt, kui OpenNode serveril asuvas Func moodulis/m<strong>ee</strong>todis esineserind, siis tagastab Func vea tagastatava vastuse kehas. Eelnevalt välja toodudQooxDoo JSON tagastusformaat <strong>ee</strong>ldab aga, et erind asub “error” param<strong>ee</strong>triväärtuses mitte tagastuse kehas.Exception klassiga lahendasime <strong>ee</strong>lnevalt maini<strong>tud</strong> probl<strong>ee</strong>mi, teisendades Funcm<strong>ee</strong>todi erindi JSON formaadi “error” param<strong>ee</strong>tri erindiks. Exception klassi m<strong>ee</strong>todid41


on nähtavad ja ligipääsetavad vaid t<strong>ee</strong>nuste serveri sisestele klassidele.5.6.7 AuthService klassAuthService klass pakub t<strong>ee</strong>nuste serveri kasutamiseks kasutajate autentimiseksvajalikke t<strong>ee</strong>nuseid.Kasutajate autentimine toimub kasutajanime ning parooli alusel. Autentimisekshakatakse kasutama Pluggable Authentication Modules (PAM) mooduleid, etsidestada t<strong>ee</strong>nuste server lahti autentimisandmete hoidmisest.Eduka autentimise korral gener<strong>ee</strong>ritakse käimasoleva sessiooni ID, mida on kasutajalvõimalik enda tuvastamiseks kasutada. Vaikimisi kehtib konkr<strong>ee</strong>tse kasutaja sessiooniID 10 minutit tema viimasest tegevusest.Klassi pakutavad t<strong>ee</strong>nused on realis<strong>ee</strong>ri<strong>tud</strong> järgmiste m<strong>ee</strong>toditena:• authenticate – kasutatakse kasutaja tuvastamiseks ja “sisselogimise”läbiviimiseks. Eduka kasutaja tuvastamise korral luuakse kehtiva sessiooni IDja tagastatakse s<strong>ee</strong> kasutajale.• deauthenticate – kasutatakse kehtiva sessiooni lõpetamiseks ja“väljalogimise” läbiviimiseks.Sessioonide kehtivuse ning õigsuse kontrollimiseks vajalikud m<strong>ee</strong>todid onrealis<strong>ee</strong>ri<strong>tud</strong> kättesaadavaks t<strong>ee</strong>nuste serveri sisestele klassidele.42


5.7 Näidisoperatsiooni läbiviimineJoonisel 9 on graafiliselt kujuta<strong>tud</strong> tarkvarakomponentide (-kihtide) kasutamisthaldusoperatsiooni läbiviimisel OpenNode virtualis<strong>ee</strong>rimislahenduses KVMvirtuaalmasinate nimekirja leidmise näitel.Joonis 9 KVM virtuaalmasinate nimekirja leidmise näidispäringu läbiviimine43


6 FUNC HALDUSMOODULID OPENNODE SERVERILSelleks, et <strong>ee</strong>lnevas peatükis välja toodud haldusserveri t<strong>ee</strong>nused suudaksidOpenNode virtuaalmasinatel läbi viia haldusoperatsioone, kasutatakse OpenNodevirtualis<strong>ee</strong>rimislahenduses Func haldusraamistikku. Järgnevates alapeatükkides ontoodud täpsem ülevaade Func kasutamisest haldusserveri ja OpenNode serveriteliidestamisel. Sarnaselt t<strong>ee</strong>nuste serverile ei ole järgnevalt välja toodud Funcmoodulite nimekiri lõplik. Uute t<strong>ee</strong>nuste realis<strong>ee</strong>rimisel on võimalik lisada uusi ningmuuta olemasolevaid Func mooduleid.6.1 Func haldusraamistikValdkonnast ülevaate tegemisel sai eraldi välja toodud Func raamistiku modulaarselaiendamise omadus. Modulaarsus jagab Func haldusraamistiku omakorda mitmetekskihtideks. Joonisel 10 asuv klassidiagramm annab ülevaate, kuidas Funchaldusraamistiku erinevad kihid asetsevad ning millest komponentidest/moodulitestkoosnevad.HaldusserverOpenNode serverJoonis 10 Func haldusraamistiku komponentide ning moodulite seotust iseloomustavklassidiagramm.Joonis 10 näitab, et Func vajab tööks komponente nii kesksel haldusserveril kui kaüksikul OpenNode serveril. Haldusserveril asub Func kontroller, mille abil liidestubhaldusraamistikuga t<strong>ee</strong>nuste server. Func klientobjekt ning tööks vajalikud moodulid44


asuvad kõik OpenNode serveril (st. haldusserverile ei pea eraldi lisama kliendi poolrealis<strong>ee</strong>ri<strong>tud</strong> moodulite kirjeldusi).Põhiline töö haldusoperatsioonide sooritamisel tehakse aga ära OpenNode serveritelasuvates Func moodulites. Neid mooduleid ning nende kasutamist kirjeldataksejärgmises alapeatükis.6.2 Func moodulid OpenNode serverilJoonisel 10 olid toodud põhilised kasutust leidvad Func haldusraamistiku moodulidOpenNode serverid. Neist LVM ja OpenVZ moodulid on tervenisti loodud ning KVMmoodulit on modifits<strong>ee</strong>ri<strong>tud</strong> OpenNode virtualis<strong>ee</strong>rimislahenduse tarbeks. Certmaster,Command ja Hardware moodulid on kasutuses muutmata vaikimisi kujul.Järgmistes punktides on kirjelda<strong>tud</strong> <strong>ee</strong>lnevalt välja toodud OpenNodevirtualis<strong>ee</strong>rimislahenduses kasuta<strong>tud</strong> põhilised Func moodulid.6.2.1 KVM moodulKVM moodul on siss<strong>ee</strong>hita<strong>tud</strong> ametlikult jagatavasse Func tarkvarapaketti. KVMmooduli ülesandeks on pakkuda võimalust, kasutades Libvirt tarkvara, hallataKVM/QEMU virtuaalmasinaid. Libvirt tarkvaraga ühendub KVM moodul kasutadesvastavat Python liidest.KVM mooduli pakutavatest m<strong>ee</strong>toditest kasutasime OpenNodevirtualis<strong>ee</strong>rimislahenduses KVM/QEMU virtuaalmasinate haldamiseks järgmiseidm<strong>ee</strong>todeid:• list_vms – Tagastab KVM/QEMU virtuaalmasinate nimekirja.• autostart – Võimaldab KVM/QEMU virtuaalmasina automaatse käivitumiseserveri käivitumisel.• create – Võimaldab olemasoleva KVM/QEMU konfiguratsiooni põhjalvirtuaalmasina loomist (sisuliselt virtuaalmasina kävitaminekonfiguratsioonifaili põhjal).• shutdown – Võimaldab saata KVM/QEMU virtuaalmasinale shut-downsignaali virtuaalmasina peatamiseks.• destroy – Võimaldab jõuga peatada KVM/QEMU virtuaalmasina töö.45


• undefine – Võimaldab hävitada KVM/QEMU virtuaalmasina.Lisaks ametlikus tarkvarapaketis olevatele m<strong>ee</strong>toditele realis<strong>ee</strong>risime KVM moodulisjärgmised m<strong>ee</strong>todid:• create_new_vm_file_based – Loob uue failipõhise kettaga KVM/QEMUvirtuaalmasina.• create_new_vm_lvm_based – Loob uue LVM loogilist kõvaketast kasutavaKVM/QEMU virtuaalmasina.• create_new_vm_disk_based – Loob uue plokk-seadmel asuva KVM/QEMUvirtuaalmasina.• get_vm_type – Tagastab KVM/QEMU virtuaalmasina tüübi (failipõhine,LVM põhine või plokk-seadme põhine).• live_migrate_vm – Kasutatakse KVM/QEMU virtuaalmasinalive-migr<strong>ee</strong>rimiseks ühelt OpenNode serverilt teisele OpenNode serverile.Migr<strong>ee</strong>rimise protsessi kirjeldatakse täpsemalt Peatükis 6.3.• offline_migrate_vm – Kasutatakse virtuaalmasina offline-migr<strong>ee</strong>rimiseksühelt OpenNode serverilt teisele OpenNode serverile.• create_file_based_image – Loob uue failipõhise ketta.• delete_file_based_image – Kustutab olemasoleva failipõhise ketta.• list_file_based_image – Tagastab olemasolevate failipõhiste ketastenimekirja.• list_file_based_image_used – Tagastab virtuaalmasinatel kasutuses olevateolevate failipõhiste ketaste nimekirja.6.2.2 OpenVZ moodulOpenVZ mooduli ülesandeks on Func haldusraamistiku laiendamine võimalusegahallata OpenVZ konteinereid. OpenVZ mooduli loomisel on põhjana kasuta<strong>tud</strong> KVMmoodulit, kust on laena<strong>tud</strong> Libvirt liidese kasutamise ning ametlikust tarkvarapaketistvõe<strong>tud</strong> m<strong>ee</strong>todite loogika (konteinerite käivitamise, peatamise ning hävitamisem<strong>ee</strong>todid).Lisaks KVM moodulist võe<strong>tud</strong> m<strong>ee</strong>toditele realis<strong>ee</strong>risime OpenVZ moodulis46


järgmised m<strong>ee</strong>todid:• create_new_vm – Loob ettean<strong>tud</strong> malli ning konfiguratsioonimuutujate(hostname, ressursside kasutamise limiidid, võrguseaded) uue OpenVZkonteineri.• save_vm_config_param – Salvestab/muudab üksiku OpenVZ konteinerikonfiguratsioonimuutuja väärtust.• migrate_vm – live-migr<strong>ee</strong>rib OpenVZ konteineri ühelt OpenNode serveriltteisele. Migr<strong>ee</strong>rimise protsessi kirjeldatakse täpsemalt Peatükis 6.3.6.2.3 LVM moodulLVM mooduli ülesandeks on Func haldusraamistiku laiendamine võimalusegaOpenNode serveril hallata LVM loogilisi kettaid ja ketaste gruppe. LVM loogilisteketaste haldamise vajadus pakub tuge KVM moodulile, kus on ette näh<strong>tud</strong> võimalusedLVM loogilistele ketastele KVM/QEMU virtuaalmasinate loomiseks.LVM ketaste haldamiseks realis<strong>ee</strong>risime järgmised m<strong>ee</strong>todid, mis kutsuvad välja jakasutavad standardseid LVM haldusutiliite vgdisplay, lvdisplay, lvcreate, lvremove:• list_vg – Tagastab nimekirja OpenNode serveril olevatest LVM ketastegruppidest.• list_lv – Tagastab nimekirja OpenNode serveril olevatest LVM loogilistestketastest.• create_lv – Loob OpenNode serverile ettean<strong>tud</strong> param<strong>ee</strong>tritega uue LVMloogilise ketta ettean<strong>tud</strong> ketaste gruppi.• delete_lv – Kustutab OpenNode serverilt ettean<strong>tud</strong> ketaste grupist ettean<strong>tud</strong>LVM loogilise ketta.6.2.4 Certmaster moodulCertmaster mooduli, mis on siss<strong>ee</strong>hita<strong>tud</strong> ametlikult jagatavasse Func tarkvarapaketti,ülesandeks on pakkuda Func kliendile SSL sertifikaatide loomise ning haldamisevõimalusi.Certmaster moodulit kasutavad Func kontroller ning klient, kui toimub automaatnesertifikaatide loomise ning allkirjastamise protsess OpenNode serveri sidumisel47


haldusserveriga.6.2.5 Hardware moodulHardware moodul, mis on samuti siss<strong>ee</strong>hita<strong>tud</strong> ametlikult jagatavasse Functarkvarapaketti, võimaldab Func kontrolleril käivitada m<strong>ee</strong>todeid, mis tagastavadinformatsiooni OpenNode serveri riistvara ning ressursikasutuse kohta.6.2.6 Command moodulCommand mooduli, mis on samuti siss<strong>ee</strong>hita<strong>tud</strong> ametlikult jagatavasse Functarkvrapaketti, ülesandeks on pakkuda Func kontrollerile võimalus käivitada Funckliendil käsurearakendusi. Command mooduli m<strong>ee</strong>tod run toimib vahekihina Funckontrolleri ning kliendil asuva Linuxi shell-i vahel.6.3 Virtuaalmasinate migr<strong>ee</strong>rimineEelnevates peatükkides, keskhalduse t<strong>ee</strong>nuste serveri ning Func moodulite ülesehitusekohta, on viida<strong>tud</strong> nii OpenVZ kui ka KVM/QEMU virtuaalmasinate migr<strong>ee</strong>rimisele.Käesoleva töö kontekstis on <strong>ee</strong>lnevalt migr<strong>ee</strong>rimise all mõeldud konkr<strong>ee</strong>tsevirtuaalmasina liigutamist ühelt füüsiliselt OpenNode serverilt teisele OpenNodeserverile. Esialgu realis<strong>ee</strong>ritakse virtuaalmasinate migr<strong>ee</strong>riminevirtualis<strong>ee</strong>rimistehnoloogia kesksena, st. ei võimaldata OpenVZ konteinerimigr<strong>ee</strong>rimist KVM/QEMU virtuaalmasinaks ja vastupidi.Järgmistes punktides kirjeldatakse lühidalt nii OpenVZ kui ka KVM/QEMUvirtuaalmasinate migr<strong>ee</strong>rimist.6.3.1 Migr<strong>ee</strong>rimise ettevalmistamineKuna, nii OpenVZ kui ka KVM/QEMU virtuaalmasinate migr<strong>ee</strong>rimine toimub otseOpenNode serverilt (server A) OpenNode serverile (server B), siis on vaja luuaajutiselt migr<strong>ee</strong>rimise ajaks kahe serveri vahele turvaline ühendus. EsialgsesOpenNode lahenduse realisatsioonis kasutatakse üksikute serverite vahelise ajutiseusalduse loomiseks SSH ühendust koos PKI infrastruktuuriga.SSH ühenduse kasutamine sai vali<strong>tud</strong>, kuna nii OpenVZ kui ka KVM/QEMUtehnoloogiate poolt pakutavad migratsiooni-tööriistad omavad siss<strong>ee</strong>hita<strong>tud</strong> tuge üleSSH ühenduse migr<strong>ee</strong>rimiseks. Lisaks võimaldab SSH kasutamine mõlema48


tehnoloogia korral vältida ühenduse loomise tööloogika dubl<strong>ee</strong>rimist.Migr<strong>ee</strong>rimise ettevalmistamisel kontrollitakse läbi t<strong>ee</strong>nuste serveri, millel on olemasturvaline ühendus mõlema OpenNode serveriga (serverid A ja B), kas OpenNodeserverite vahel on juba loodud SSH ühenduse jaoks PKI infrastruktuuril põhinevusaldus. Kui serveril A pole loodud SSH ühenduse jaoks avaliku/privaatse võtmepaari, siis luuakse enne migr<strong>ee</strong>rimist vastavad võtmed. Juhul kui serverile B polevarasemalt kop<strong>ee</strong>ri<strong>tud</strong> serveri A avalikku võtit, siis kop<strong>ee</strong>ritakse enne migr<strong>ee</strong>rimistserverile B serveri A avalik võti.Eelnevate toimingute tulemusel on võimalik alustada virtuaalmasina migr<strong>ee</strong>rimistserverilt A serverile B.6.3.2 OpenVZ konteineri migr<strong>ee</strong>rimineOpenNode serveritel toimub OpenVZ konteineri live-migr<strong>ee</strong>rimine ära kasutadesOpenVZ kerneli omadusi, mis võimaldavad konteineri täieliku hetkeseisundi (niifailid kui ka töötavad protsessid) salvestamist ja hilisemat salvesta<strong>tud</strong> seisunditaastamist.Nimelt toimub serveri A ja serveri B vastavate konteinerite failide ning protsessideseisundite sünkronis<strong>ee</strong>rimine ilma serveri A migr<strong>ee</strong>ritavat konteinerit migr<strong>ee</strong>rimisekeskel peatamata. Vaid migr<strong>ee</strong>rimise lõpus tekib hetkeline paus konteineri töös, kuiviiakse läbi lõplik failide ning protsesside seisundite sünkronis<strong>ee</strong>rimine ningpeatatakse serveri A konteiner ja taastatakse serverile B migr<strong>ee</strong>ri<strong>tud</strong> konteineriprotsesside seisund.Eelnevalt kirjelda<strong>tud</strong> live-migr<strong>ee</strong>rimine paistab nähtamatuna nii konteinerile kui kakonteinerit kasutavatele klientidele. Kuna serverile B migr<strong>ee</strong>ri<strong>tud</strong> konteineri seisundon serveril A asunud konteineri peatamis<strong>ee</strong>lse seisundi üks-ühele koopia, siis ei tajukonteineri protsessid muutust füüsilises serveris. Konteinerit kasutavad kliendidtajuvad migr<strong>ee</strong>rimise lõpus tekkivat hetkelist pausi kui väikest häiret võrguühenduses.6.3.3 KVM/QEMU virtuaalmasina migr<strong>ee</strong>rimine KVM/QEMU virtuaalmasina migr<strong>ee</strong>rimisel realis<strong>ee</strong>ritakse OpenNode serveritel kakslähenemisviisi live ja offline.OpenNode serveritel realis<strong>ee</strong>ritav KVM/QEMU live-migr<strong>ee</strong>rimine võimaldab49


migr<strong>ee</strong>rimist juhul, kui:1. Virtuaalmasina failisüst<strong>ee</strong>m on defin<strong>ee</strong>ri<strong>tud</strong> võrgus jaga<strong>tud</strong> kettapinnal, mis onsamaaegselt kättesaadav nii serverile A kui ka serverile B.2. Failit<strong>ee</strong>, mille külge on jaga<strong>tud</strong> kettapind lae<strong>tud</strong>, peab olema serveril A jaserveril B ühesugune.3. Server A ja server B on sama versiooni OpenNode serverid. St. et serveritelepaigalda<strong>tud</strong> tarkvarapakettide versioonid ühtivad omavahel.4. Serveri A ja serveri B võrgukonfiguratsioonid peavad olema ühesugused.Eelnevalt toodud nõuete täitmisel lubatakse läbi viia KVM/QEMU virtuaalmasinalive-migr<strong>ee</strong>rimine serverilt A serverile B. KVM/QEMU live-migr<strong>ee</strong>rimine toimubosalt sarnaselt OpenVZ migr<strong>ee</strong>rimise loogikale. Sarnaselt <strong>ee</strong>lnevas punktis mainitulepeatub virtuaalmasina töö hetkeks vaid migr<strong>ee</strong>rimise lõpus. Samas erinevalt OpenVZmigr<strong>ee</strong>rimisest ei sünkronis<strong>ee</strong>rita serveri A ja serveri B vahel virtuaalmasinafailisüst<strong>ee</strong>mi, kuna s<strong>ee</strong> asub mõlemale samaaegselt kättesaadaval jaga<strong>tud</strong> kettapinnal.KVM/QEMU virtuaalmasina live-migr<strong>ee</strong>rimise puhul kop<strong>ee</strong>ritakse jasünkronis<strong>ee</strong>ritakse serverite vahel virtuaalmasina konfiguratsiooni fail(id) ningvirtuaalmasina mälutõmmis.Juhul, kui live-migr<strong>ee</strong>rimine pole võimalik virtuaalmasina failisüst<strong>ee</strong>mi asukoha tõ<strong>ttu</strong>(failisüst<strong>ee</strong>m pole võrgus jaga<strong>tud</strong> kettal), siis viiakse läbi offline-migr<strong>ee</strong>rimine.Vastandina live-migr<strong>ee</strong>rimisele tekitab offline migr<strong>ee</strong>rimine virtuaalmasinapikemaajalise maasoleku.offline-migr<strong>ee</strong>rimise puhul peatatakse esmalt serveris A ajutiselt virtuaalmasina töö(suspend operatsioon). S<strong>ee</strong>järel luuakse serveril B virtuaalmasina failisüst<strong>ee</strong>mi jaoksvajalikud virtuaalsed kettad ning kop<strong>ee</strong>ritakse üle <strong>ee</strong>lnevalt loodud SSH ühenduseserverilt A serverile B virtuaalmasina kogu failisüst<strong>ee</strong>m. Lisaks failisüst<strong>ee</strong>milekop<strong>ee</strong>ritakse serverile B ka virtuaalmasina konfiguratsioonifail ning ajutiselt peata<strong>tud</strong>virtuaalmasina mälutõmmis.Juhul kui kõik vajalikud failid on serverile B korrektselt kop<strong>ee</strong>ri<strong>tud</strong>, siis käivitataksemigr<strong>ee</strong>rimisprotsessi lõpus serveril B migr<strong>ee</strong>ri<strong>tud</strong> virtuaalmasin. Kuna serverile Bkop<strong>ee</strong>riti virtuaalmasina ning kõigi tema failide identne koopia, siis virtuaalmasinkäivitub sarnaselt live-migratsiooni lõpufaasile.50


On olemas v<strong>ee</strong>l ka teine võimalus OpenNode serveritel KVM/QEMU virtuaalmasinaoffline-migr<strong>ee</strong>rimseks. Nimelt, kui serveri B võrgukonfiguratsioon ei ühti serveri Akonfiguratsiooniga või pole võimalik serveril B luua virtuaalmasina failisüst<strong>ee</strong>mijaoks virtuaalseid kettaid, mis vastaksid üks-ühele serveril A olevate ketasteasupaigaga, ei toimi <strong>ee</strong>lnevalt maini<strong>tud</strong> tsenaarium korrektselt. Kui virtuaalmasinat jatema faile ei õnnestu üks-ühele vastavuses kop<strong>ee</strong>rida serverile B, siis ebaõnnestubmälutõmmise põhjal virtuaalmasina hilisem käivitamine. Sellisel juhul peatatakseserveril A virtuaalmasina töö ning viiakse virtuaalmasin seisundisse “välja lülita<strong>tud</strong>”.Peata<strong>tud</strong> virtuaalmasina failisüst<strong>ee</strong>mide jaoks luuakse virtuaalsed kettad serveril Bkasutaja määra<strong>tud</strong> asupaikadesse ning uuendatakse vastavad failit<strong>ee</strong>d virtuaalmasinakonfiguratsioonifailides. Virtuaalmasina failisüst<strong>ee</strong>m kop<strong>ee</strong>ritakse üle SSH ühendusetavapäraselt. Lisaks viiakse vajadusel virtuaalmasina konfiguratsioonifail vastavusseserveri B võrgukonfiguratsiooniga. Peale <strong>ee</strong>lnevate toimingute läbiviimist käivitataksevirtuaalmasin serveril B. Kirjelda<strong>tud</strong> offline-migr<strong>ee</strong>rimine tekitab virtuaalmasinakõige pikema maasoleku.6.3.4 Migr<strong>ee</strong>rimise lõpetamineMigr<strong>ee</strong>rimise lõpetamisel toimitakse nii OpenVZ kui ka KVM/QEMU puhulsarnaselt. Nimelt katkestatakse ajutine SSH ühenduse usaldus serveri A ja serveri Bvahel juhul, kui seda enne migr<strong>ee</strong>rimist ei eksist<strong>ee</strong>rinud. Juhul kui juba ennemigr<strong>ee</strong>rimist oli SSH ühenduse usaldus olemas, siis varasemat konfiguratsiooni eimuudeta.51


7 Võrdlus sarnaste lahendustegaKuna OpenNode virtualis<strong>ee</strong>rimislahendus on loodud vaba tarkvara põhisena, siisvõrdluses kasutatakse samuti sarnaseid vaba tarkvara virtuaalmasinatehalduslahendusi Proxmox VE ja OpenSymbolic.7.1 Võrdlus Proxmox VE-gaSarnaselt OpenNode virtualis<strong>ee</strong>rimislahendusele pakub ka Proxmox VE lisakshaldusliidesele ka riistvaralisele serverile paigaldamiseks eraldi operatsioonisüst<strong>ee</strong>mi.Serveri operatsioonisüst<strong>ee</strong>mina kasutab Proxmox VE Debian Linuxit (võrreldesOpenNode juures kasutatava CentOS Linuxiga).Virtualis<strong>ee</strong>rimistehnoloogiatest võimaldab Proxmox VE nii OpenVZ kui ka KVMvirtuaalmasinate kasutamist. Toeta<strong>tud</strong> on ka OpenVZ konteinerite paigaldamin<strong>ee</strong>eldefin<strong>ee</strong>ri<strong>tud</strong> mallide põhjal.Üks olulisemaid lisaväärtusi, mida OpenNode virtualis<strong>ee</strong>rimislahendus pakub, onserveri operatsioonisüst<strong>ee</strong>mi paigaldamisel tarkvaralise RAID-i kasutamine. KuiOpenNode serveri paigaldusm<strong>ee</strong>dia võimaldab luua automaatselt tarkvaralisel RAID-lpõhineva partitsion<strong>ee</strong>rimissk<strong>ee</strong>mi, siis Proxmox VE arendajad on tarkvaralise RAID-ikasutamise võimaluse välja jätnud.Proxmox VE virtuaalmasinate haldusliides sisaldub riistvaralisele serverilepaigaldatavas operatsioonisüst<strong>ee</strong>mis. Samas on kasutajale jäänud võimalushaldusliidesega siduda ka teisi Proxmox VE servereid (ühendus toimub üle SSHPKI infrastruktuuri). Võrreldes <strong>ee</strong>lnevaga pakuvad OpenNode haldusvahendidsuuremat paindlikkust - kasutajaliides ja t<strong>ee</strong>nuste server on eralda<strong>tud</strong> ning t<strong>ee</strong>nusteserver ei pea asuma OpenNode serveril.Tarkvarauuendusi pakutakse Proxmox VE serverile sarnaselt OpenNode-ga läbieraldiseisva koodivaramu. S<strong>ee</strong> annab kasutajatele mõningase suurema kindluse, etkoodivaramust kättesaadavad paketid on <strong>ee</strong>lnevalt testi<strong>tud</strong> ning omavahelkokkusobivad.52


7.2 Võrdlus OpenSymbolic-gaVõrreldes OpenNode ja Proxmox VE-ga on OpenSymbolic vaid serverite kesknehaldusvahend, eraldi paigaldatavat operatsioonisüst<strong>ee</strong>mi OpenSymbolic-ga ei kaasne.OpenSymbolic on sarnaselt OpenNode-ga loodud Func raamistiku peale, mis tagabkeskhalduse ühilduvuse CentOS/RHEL/Fedora Linux operatsioonisüst<strong>ee</strong>mekasutatavate serveritega.OpenSymbolic haldusrakendus toetab virtualis<strong>ee</strong>rimistehnoloogiatest KVM-i, Xen-ija VM-Ware-t. Toeta<strong>tud</strong> on ka <strong>ee</strong>lnevalt maini<strong>tud</strong> tehnoloogiatel põhinevatevirtuaalmasinate paigaldamine <strong>ee</strong>ldefin<strong>ee</strong>ri<strong>tud</strong> mallide abil. Virtuaalmasinatehaldamine toimub, sarnaselt OpenNode-le, läbi Libvirt tarkvara.Kuna OpenSymbolic on vaid serverite haldusvahend, siis onsüst<strong>ee</strong>miadministraatoritele an<strong>tud</strong> vabad käed serveritel kasutatava tarkvarakomplekt<strong>ee</strong>rimiseks. S<strong>ee</strong> vabadus tähendab aga, et süst<strong>ee</strong>miadministraatoril tulebtäiendavalt näha vaeva, et enne töökeskonda paigaldamist kontrollida serveritelkasutatavate tarkvarapakettide omavahelisi sõltuvussuhteid ning sobivust.7.3 Võrdluse kokkuvõtteksEelnevast võrdlusest selgub, et OpenNode virtualis<strong>ee</strong>rimislahenduse ülesehitus eika<strong>ttu</strong> täpselt kummagagi võrreldutest. Pigem omab OpenNode tea<strong>tud</strong> ühiseidtunnusjooni Proxmox VE lahendusega ning tea<strong>tud</strong> ühiseid jooni OpenSymbolic-ga,lisades samal ajal omalt poolt ka uusi omadusi.Serverile paigaldatava operatsioonisüst<strong>ee</strong>mi olemasolu tõ<strong>ttu</strong> sarnaneb OpenNodeProxmox VE-le ning eraldiseisva keskhalduse olemasolu lähendab OpenNode-tOpenSymbolicuga. Keskhalduse võimalustesse lisab OpenNode juurde OpenVZkonteinerite haldamise võimalused. Serveri operatsioonisüst<strong>ee</strong>mile lisab OpenNodeäriklassi Linuxi stabiilsuse ja turvalisuse omadused ning võimaluse paigaldamiselkasutada ka tarkvaralist RAID-i.53


8 KOKKUVÕTEKäesoleva töö alguses püstitati <strong>ee</strong>smärkideks välja töötada täis- jakonteinervirtualis<strong>ee</strong>rimist toetav OpenNode tarkvaraline kooslus koospaigaldusm<strong>ee</strong>diaga ning OpenNode serverite keskseks haldamiseks vajalikinfrastruktuur.Täis- ja konteinervirtualis<strong>ee</strong>rimist toetava tarkvaralise koosluse loomisel sobitatiCentOS Linuxi operatsioonisüst<strong>ee</strong>mi poolt ametlikult pakutavadtarkvarakomponendid OpenVZ projekti poolt pakutava Linuxi kerneliga.Kokkusobivusprobl<strong>ee</strong>me tekitasid tarkvarapaketid (KVM, Libvirt), mis olidkompil<strong>ee</strong>ri<strong>tud</strong> silmas pidades ametlikku CentOS/RHEL kernelit ning ainultKVM/QEMU virtualis<strong>ee</strong>rimistehnoloogiat. Töö käigus selgus, et sellised ühilduvusprobl<strong>ee</strong>mid olid lahendatavad tarkvarapakettide lähtekoodist ümberkompil<strong>ee</strong>rimisegastandardsetest erinevate valikutega.OpenNode serveri paigaldusm<strong>ee</strong>tod loodi ametliku CentOS/RHELpaigaldusprogrammi Anaconda põhjal, mida laiendati <strong>ee</strong>ldefin<strong>ee</strong>ri<strong>tud</strong>partitsion<strong>ee</strong>rimissk<strong>ee</strong>mide (nii riist- kui ka tarkvaralise RAID-i jaoks) pakkumiseks.Paigaldusprotsessi üldine kirjeldamine ja seadistamine viidi läbi vahendiga Kickstart.Kickstarti kasutati ka paigalduse järgseks konfiguratsiooni seadistamiseks, etoperatsioonisüst<strong>ee</strong>m sobituks korraga nii KVM kui ka OpenVZ tehnoloogiatega.OpenNode virtualis<strong>ee</strong>rimislahenduse keskhalduse infrastruktuur sai kavanda<strong>tud</strong> kah<strong>ee</strong>raldiseisva kihina. Üksteisest eraldati kasutajaliidese kuvarakendus ning reaalseltserverite haldamise <strong>ee</strong>st vastutav kiht. Käesolevas töös vaadeldi OpenNode serveritehaldamise infrastruktuurist t<strong>ee</strong>nuste serveri kihti. Kasutajaliideste kuvarakendusit<strong>ee</strong>nindav t<strong>ee</strong>nuste server loodi kasutades k<strong>ee</strong>lt Python lihtsa HTTP serverina.T<strong>ee</strong>nuste serveriga andmevahetus realis<strong>ee</strong>riti läbi HTTP GET päringute ning JSONformaadis vastussõnumite. Kasutajaliideste kuvarakenduste suhtlus t<strong>ee</strong>nuste serverigakorraldati üle turvalise HTTPS ühenduse.Turvalise ühenduse loomine hallatavate OpenNode serveritega lahendati Funchaldusraamistikku kasutades. Hallatavatel OpenNode serveritel läbi viidavadoperatsioonid realis<strong>ee</strong>riti Func moodulites asuvate m<strong>ee</strong>toditena, mis andis t<strong>ee</strong>nusteserveril võimaluse operatsiooni käivitamiseks pöörduda Func kontrolleri vastava54


m<strong>ee</strong>todi poole.Vähendamaks võrguliiklust t<strong>ee</strong>nuste serveri ning hallatavate OpenNode serveritevahel liideti t<strong>ee</strong>nuste serveriga ka vahemälu kontroller, mille ülesandeks sai läbiviidud Func operatsioonide tulemuste säilitamine t<strong>ee</strong>nuste serveril.Võrdlusest sarnaste lahendustega Proxmox VE ja OpenSymbolic selgus, etOpenNodel on <strong>ee</strong>lnevalt mainitutega palju ühist. Samas lisas OpenNode sarnasteleomadustele võrreldutega ka mitmeid tähtsaid omadusi, nagu näiteks äriklassi Linuxioperatsioonisüst<strong>ee</strong>mi pakutav stabiilsus ja turvalisus ning OpenVZ konteineritekeskse haldamise võimalus.Töö käigus saavutati sissejuhatuses püstita<strong>tud</strong> <strong>ee</strong>smärkide täitmine. Lisaks analüüsitija realis<strong>ee</strong>riti oluline baasosa OpenNode virtualis<strong>ee</strong>rimislahenduse infrastruktuurist.Samas ei anna <strong>ee</strong>smärgid, milleni käesolevas töös jõuti v<strong>ee</strong>l täielikku virtuaalmasinatehaldusplatvormi. Sammud OpenNode virtualis<strong>ee</strong>rimislahenduse edasiseksarendamiseks peaksid olema järgmised:• T<strong>ee</strong>nuste serverit kasutava kasutajaliideste kuvarakenduste realis<strong>ee</strong>rimine niiv<strong>ee</strong>bipõhistena kui ka desktop-rakendustena.• Luua tarkvarakomponent OpenVZ konfiguratsioonifaili ressursipiirangutearvutamiseks virtuaalmasina põhiparam<strong>ee</strong>trite (mälu hulk, kõvakettaleraldatava pinna suurus) alusel.• Luua tarkvarakomponent olemasoleva OpenVZ konteineri pakendamiseksOpen Virtualization Format (OVF) standardile vastavasse virtuaalmasinamalli.• Luua tarkvarakomponent olemasoleva KVM virtuaalmasina pakendamiseksOVF standardile vastavasse virtuaalmasina malli.• Lisada t<strong>ee</strong>nuste serverile t<strong>ee</strong>nused olemasolevatest virtuaalmasinatest mallideloomiseks ning nende mallide alusel uute virtuaalmasinate loomiseks.• Analüüsida võimalusi kiiremaks ja efektiivsemaks offline-migr<strong>ee</strong>rimiseks, kuiserverite konfiguratsioonide erinevuse tõ<strong>ttu</strong> pole live-migr<strong>ee</strong>rimine võimalik.55


9 VIITED1. Crosby S., Brown, D. (2006), The Virtualization Reality. – Queue, 10 (4),34-41.2. De Haan, M. (2008), Open source project: Func, the Fedora Unified NetworkController – Red Hat Magazine [E-ajakiri] (http://magazine.redhat.com/)(9.03.2010)3. Deshane, T., Shepherd, A., Matthews. J., Ben-Yehuda, M., Shah, A., Rao., B.Quantitative Comparison of Xen and KVM [WWW](http://www.todddeshane.net/research/Xen_versus_KVM_20080623.pdf)(9.03.2010)4. Foundations of CentOS Linux. (2009). / R. Baclit, C. Sicam, P. Membrey, J.Newbigin. 1st ed. Apress.5. Grand, M. Patterns in Java: A Catalog of Reusable Design Patterns Illustratedwith UML. 2nd ed. vol 1. Wiley, 2002.6. Habib, I. (2008), Virtualization with KVM – Linux Journal, 166. [E-ajakiri](http://www.linuxjournal.com/)7. Kivity, A., Kamay, Y., Laor, D., Lublin, U., Liquori, A. (2007), kvm: theLinux Virtual Machine Monitor – Proc<strong>ee</strong>dings of the Linux Symposium 2007: 27-30th June 2007, Ottawa, Canada, 225-230.8. Kolyshkin, K. Virtualization in Linux [WWW]http://download.openvz.org/doc/openvz-intro.pdf (09.03.2010)9. Menasce, D. (2005), Virtualization: Concepts, applications, and performancemodeling. George Mason University, USA.10. OpenVZ User’s Guide (ver. 2.7.0-8) [WWW]http://download.openvz.org/doc/OpenVZ-Users-Guide.pdf (9.03.2010)11. Patterns of Enterprise Application Architecture. (2002). / M. Fowler, D. Rice,M. Foemmel, E. Hieatt, R. M<strong>ee</strong>, R. Stafford. Addison Wesley.12. Rosenblum, M., Garfinkel T. (2005). Virtual Machine Monitors: CurrentTechnology and Future Trends – IEEE Computer Magazine, Mai 2005, 34-43.56


13. Shah, A. (2008), D<strong>ee</strong>p Virtue: Kernel-based virtualization with KVM – LinuxMagazine, 86, 37-39.14. Soltesz, S., Pötzl, H., Fiuczynski, M., Bavier, A., Peterson, L. (2007),Container-based operating system virtualization: a scalable, high-performancealternative to hypervisors. - Proc<strong>ee</strong>dings of the 2nd ACM SIGOPS/EuroSysEuropean Conference on Computer Systems 2007 : 21-23rd March 2007,Lisbon, Portugal, 275-287.15. Vliet, M. (2009), Creating and Controlling KVM Guests using libvirt.University of Victoria, Canada.57

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!