M ASARYKOVA UNIVERZITA FAKULTA INFORMATIKY
}
w A| y < 5 4 23 1 0 / -. , )+ ( %&' $ # !"
Æ
Virtu´aln´ı stroje pro Linux B AKAL A´ Rˇ SK A´
´ PR ACE
Jaroslav Tomeˇcek
Brno, jaro 2007
Prohl´asˇ en´ı Prohlaˇsuji, zˇ e tato bakal´arˇsk´a pr´ace je mym ˚ ım autorskym ´ puvodn´ ´ d´ılem, kter´e jsem vypracoval samostatnˇe. Vˇsechny zdroje, prameny a literaturu, kter´e jsem pˇri vypracov´an´ı pouˇz´ıval nebo z nich cˇ erpal, v pr´aci rˇa´ dnˇe cituji s uveden´ım upln´ ´ eho odkazu na pˇr´ısluˇsny´ zdroj.
Vedouc´ı pr´ace: Mgr. Miroslav Ruda ii
Shrnut´ı C´ılem pr´ace je srovnat ruzn´ ˚ e implementace virtu´aln´ıch stroju˚ pro Linux a demonstrovat jejich vyhody (a rozd´ıly) na pˇr´ıkladech pouˇzit´ı. Pr´ace bude ´ zamˇerˇena na virtualizaci na urovni ´ j´adra operaˇcn´ıho syst´emu. Vysledkem ´ pr´ace by mˇelo byt ´ srovn´an´ı syst´emu Linux-VServer (linux-vserver.org) a OpenVZ (www.openvz.org), popis funkc´ı poskytovanych ´ tˇemito syst´emy a demonstrace vyuˇzit´ı podstatnych vlastnost´ı. Vedle popisu instalace by ´ ´ vysledkem mˇela byt ´ ´ i referenˇcn´ı instalace obou syst´emu˚ na poˇc´ıtaˇc´ıch UVT MU.
iii
Kl´ıcˇ ov´a slova Linux-VServer, OpenVZ, XEN, virtualizace, virtualizace na urovni ´ j´adra, PlanetLab, Linux Capabilities, chroot
iv
Obsah 1 Úvod.....................................................................................................................................3 1.1 Virtualizace..................................................................................................................3 1.2 Virtualizace na úrovni jádra operačního systému........................................................4 1.2.1 Linux-VServer......................................................................................................5 1.2.2 OpenVZ................................................................................................................6 2 Instalace systémů.................................................................................................................7 2.1 Linux-VServer..............................................................................................................7 2.1.1 Vytvoření virtuálního serveru:..............................................................................7 2.1.2 Kontextová čísla – vytvoření, spuštění kontextu..................................................8 2.1.3 Smazání kontextu.................................................................................................9 2.1.4 Klonování virtuálního serveru..............................................................................9 2.1.5 Spouštění procesů z hostitelského kontextu.......................................................10 2.2 OpenVZ......................................................................................................................11 2.2.1 Vytvoření VPS....................................................................................................11 2.2.2 Smazání VPS......................................................................................................13 2.2.3 Checkpointing a live migration..........................................................................13 Online migration.....................................................................................................13 Manuální checkpointing a obnovovací funkce.......................................................13 Checkpointing krok za krokem...............................................................................13 2.3 Shrnutí........................................................................................................................14 3 Síťová rozhraní..................................................................................................................15 3.1 Linux-VServer............................................................................................................15 3.1.1 Nastavení síťových rozhraní...............................................................................15 3.1.2 Nastavení démonů, program chbind...................................................................16 3.2 OpenVZ......................................................................................................................17 3.2.1 Zařízení venet.....................................................................................................17 3.2.2 Síťové zařízení veth............................................................................................18 3.3 Shrnutí........................................................................................................................18 4 Diskové limity....................................................................................................................20 4.1 Linux-VServer............................................................................................................20 4.2 OpenVZ......................................................................................................................21 4.3 Shrnutí........................................................................................................................23 5 Nastavení plánovače a přidělení CPU...............................................................................24 5.1 Linux-VServer............................................................................................................24 5.2 OpenVZ......................................................................................................................25 5.3 Shrnutí........................................................................................................................26 6 Správa výpočetních zdrojů.................................................................................................27 6.1 Linux-VServer............................................................................................................27 6.1.1 Standartní linuxové limity výpočetních zdrojů..................................................27 6.1.2 Limity Linux-VServeru......................................................................................28 6.1.3 Paměťové limity.................................................................................................29 6.2 OpenVZ......................................................................................................................30 6.2.1 Rovnoměrné rozdělení výkonu hardwarového uzlu...........................................32 6.2.2 Validace konfiguračního souboru.......................................................................32 6.3 Shrnutí........................................................................................................................33 7 Virtuální systém /proc........................................................................................................34 1
7.1 Linux-VServer............................................................................................................34 7.1.1 Nastavení viditelnosti v /proc.............................................................................34 7.2 OpenVZ......................................................................................................................35 7.3 Shrnutí........................................................................................................................36 8 Zařízení v adresáři /dev......................................................................................................37 8.1 Linux-VServer............................................................................................................37 8.2 OpenVZ......................................................................................................................37 8.2.1 Vytváření speciálních souborů............................................................................37 8.3 Shrnutí........................................................................................................................38 9 Sdílení souborových systémů............................................................................................39 9.1 Shrnutí........................................................................................................................39 10 Unifikace souborového systému......................................................................................40 10.1 Linux-VServer..........................................................................................................40 10.2 Shrnutí......................................................................................................................41 11 Změna runlevel................................................................................................................42 11.1 Linux-VServer..........................................................................................................42 11.1.1 Změna startovacího a ukončovacího skriptu....................................................42 11.2 OpenVZ....................................................................................................................42 11.3 Shrnutí......................................................................................................................42 12 Přiložené Live-CD Linux-VServeru................................................................................43 12.1 Postup tvorby live distribuce....................................................................................43 13 Budoucí vývoj..................................................................................................................44 13.1 Linux-VServer..........................................................................................................44 13.2 OpenVZ....................................................................................................................44 Závěr.....................................................................................................................................45
Seznam tabulek Tabulka 1: Linuxové limity výpočetních zdrojů...................................................................28 Tabulka 2: Limity Linux-VServeru......................................................................................28 Tabulka 3: Příznaky viditelnosti souborů v proc-fs..............................................................34 Tabulka 4: Nastavení příznaků viditelnosti v proc-fs...........................................................35
2
1 Úvod Účelem bakalářské práce je porovnání dvou nástrojů virtualizace na úrovni jádra operačního systému pro Linux a analýza jejich použitelnosti a výhod v praxi se zaměřením na jejich specifické vlastnosti, služby a funkce. Reprezentativními zástupci jsou Linux-VServer a OpenVZ. Oba projekty procházejí intenzivním vývojem, jejich dokumentace často neodpovídá skutečnosti. Práce si proto klade za cíl vytvořit průvodce instalací, konfigurací a správou LinuxVServeru a OpenVZ. Součástí práce je referenční instalace systémů na stroje Ústavu výpočetní techniky Masarykovy univerzity a CD demonstrující funkčnost Linux-VServeru.
1.1 Virtualizace Požadavky správců a uživatelů na víceúlohové a víceuživatelské operační systémy vedou k vývoji a zdokonalování metod souběžné obsluhy procesů a uživatelů, které využívají virtualizaci. Jedná se o mechanismus, pomocí nějž dosáhneme určitého stupně abstraktního stroje s abstraktním hardware. Pro hardwarový zdroj, který je v počítači obsažen pouze jako jedna fyzická instance, je možné vytvořit více virtuálních instancí, stejně jako zprostředkovat hardwarový zdroj, který se vyskytuje ve více fyzických instancích, jako jedno virtuální zařízení. Přistupovat k hardwaru pak můžeme jednodušším způsobem, než jak je fyzicky zapojen, a skryjeme tak pro uživatele nepodstatné informace. Samotné metody abstrakce hardware směřují už od 60. let 20. století k vytvoření celých virtuálních strojů postavených na kombinaci hardwarových a softwarových technik[1]. Jeden fyzický stroj by pak mohl obsluhovat řádově až stovky virtuálních strojů. Metoda kombinuje myšlenku sdílení systémových prostředků a izolovanosti jednotlivých virtuálních prostředí. Výhodou virtuálního stroje je možnost sestavení celého operačního systému na míru každému uživateli, který takový počítač používá, bez toho, aby se operační systémy vzájemně ovlivňovaly a aby byla systémová režie příliš vysoká. Každý operační systém by měl být plně funkční bez jakéhokoliv omezení. Běh virtuálních strojů vyžaduje vyřešení mnoha problémů. Vlastní virtualizační systém musí mít plánovač, který bude schopný spravovat požadavky operačních systémů. Zabezpečuje, aby činnost jednoho operačního systému nebyla ovlivněna činností ostatních systémů. Z pohledu virtualizačního nástroje dochází k přepínání kontextu celých OS. Algoritmus plánování přístupu k hardwaru řeší vícenásobný přístup k systémovým zařízením. Dalším problémem je ošetření komunikace mezi virtuálními stroji. Například správné doručování příchozích paketů z vnější sítě a jejich pohyb mezi běžícími systémy by mělo být rychlé, ale zároveň nesmí příliš snižovat výkon počítače. Nejčastěji se virtualizace dosahuje zavedením softwarového rozhraní mezi vlastním OS a fyzickým hardware. Tato vrstva komunikuje s fyzickým a vytváří virtuální hardware pro běžící operační systémy a obsluhuje jejich požadavky. Existuje více metod, jak dosáhnout robustního systému, který bude schopen kvalitně plnit svoji funkci. Nejběžněji se setkáváme s těmito typy virtualizace: • Aplikační virtulizace – Zástupcem je například Java Virtual Machine. Jedná se o speciální, na platformě závislé API, které zprostředkovává komunikaci mezi hardware.
3
Jeho prostřednictvím provozujeme na platformě nezávislou aplikaci, kterou pak můžeme spustit i na jiné architektuře, než na které byla napsána. Vlastní kód programu se interpretuje pomocí virtuálního stroje.
•
Simulace nebo emulace – Nástroje umožňují spustit operační systémy, které nejsou původně určeny pro architekturu fyzického systému. Využívá se dynamické reinterpretování kódu virtuálního stroje. Virtuální prostředí vytváří kompletní virtuální hardware a umožňuje spustit nemodifikovaný operační systém, který může být určen i pro jinou architekturu než fyzický stroj. Metoda je používána k vývoji aplikací pro procesory, které ještě nejsou na trhu a známá je pouze jejich specifikace, nebo k simulaci prostředí jiných architektur. Příklady jsou Bochs[2], PearPC[3], Qemu[4] (bez akceleračního modulu) a emulátor Hercules[5].
•
Úplná virtualizace – Nástroje úplné virtualizace vytvářejí kompletní virtuální hardware. Umožňují spouštění neupravených OS stejné architektury jako fyzický počítač. Virtuální stroje nekomunikují přímo s fyzickým hardware, ale jejich požadavky odeslané virtuálním zařízením jsou zpracovány a předány fyzickým zařízením. Příklady jsou Virtual Iron[6], VMware Server[7], VMware Workstation[7], Win4Lin[8] a další.
•
Paravirtulizace – Nevytváří se kompletní virtuální hardware, nástroje pouze umožňují komunikovat upravenému jádru virtualizovaného operačního systému s fyzickým hardware přes speciální API upraveného jádra hostitelského systému. Systémová volání probíhají přes hypervisor (odtud název hypervisory používaný pro paravirtualizační nástroje). Nejznámějším zástupcem nejen této skupiny určeným pro Linux je XEN[9]. Dalšími jsou VMware ESX Server[7] nebo Win4Lin 9x[8]. Systémy na bázi paravirtualizace dosahují vysoké efektivity[10][11].
•
Virtualizace na úrovni jádra operačního systému – K virtualizaci dochází až na úrovni operačního systému. Rozšiřuje obsluhu procesů jádrem na celé skupiny procesů – kontexty. Využívá částí virtualizovaných operačních systémů, které by se při plné virtualizaci nebo paravirtualizaci vyskytovaly vícekrát. Provozované servery sdílí jádro OS a jeho služby. Metoda umožňuje provoz více instancí stejných operačních systémů určených pro stejnou architekturu jako hostitelský systém. Technika kombinuje princip izolace, který je jedním z požadavků virtualizace OS, a sdílení, díky kterému systémy dosahují vysoké efektivity. Příklady jsou FreeBSD Jails[12], Solaris Containers[13], Virtuozzo[14], OpenVZ[15] a LinuxVServer[16]. Mechanismus dosahuje při běhu virtuálního systému téměř stejné efektivity jako jeho běh v nevirtuálním prostředí[10][17].[18]
1.2 Virtualizace na úrovni jádra operačního systému Virtualizace na úrovni jádra operačního systému je společně s paravirtulizací považována za nejefektivnější typ virtualizace[10][11]. Virtualizovaná prostředí běží nad společným jádrem, které má přímý přístup k fyzickému hardware, tudíž se nevytváří virtuální zařízení ani speciální přístupové API. Režijní ztráty jsou způsobeny pouze oddělením procesů, diskových prostorů a síťového provozu serverů. Účelem této práce je ukázat použitelnost systémů pracujících na tomto principu se zaměřením na specifické vlastnosti, například dynamické změny omezení systémových zdrojů.
4
Paravirtualizační prostředí zastoupené například systémem XEN nabízejí plnou izolovanost virtuálně běžících OS. V případech, kdy provozujeme více stejných operačních systémů se však stává celý systém neefektivním, protože některé části operačních systémů běží vícenásobně. Naproti tomu při virtualizaci na úrovni jádra běží všechny virtuální servery nad jedním jádrem. Celý mechanismus pouze rozšiřuje služby jádra OS tak, aby byly schopné odizolovat jednotlivé související skupiny procesů, nazývané sekce nebo kontexty, a k nim příslušné diskové souborové systémy. V systémech typu Unix lze technologii považovat za rozšíření mechanismu chroot. Výhodou řešení je výrazné snížení režijních ztrát (např. pouze 1-3% u OpenVZ[19]) a nutnost upravit pouze jádro hostitelského systému. Systém umožňuje měnit limity systémových prostředků za běhu virtualních serverů, což bývá u paravirtualizace obtížné nebo často nemožné. Narozdíl od systému XEN můžeme dynamicky zvyšovat i snižovat hodnoty hardwarového nastavení virtuálních serverů. Tyto nástroje alokují potřebné hardwarové prostředky již při startu serveru a následná změna by vyžadovala spolupráci virtualizovaného OS. Naproti tomu Linux-VServer a OpenVZ přistupují k serverům jako k procesům, kterým můžeme v Linuxu přidělení hardwarových prostředků snadno měnit. Nevýhodou je možnost provozovat pouze operační systémy stejného typu jako upravené jádro, avšak s různými knihovnami a popřípadě různé distribuce. Virtuální stroje založené na virtualizaci na úrovni jádra jsou využívány pro testování software na různých distribucích. Programátor nemusí instalovat celý operační systém, stačí jen potřebné knihovny dané distribuce a programy nutné pro běh virtuálního serveru a testovaného programu. Změna OS je pak otázkou několika málo minut. V samostatném prostředí může běžet antivirus a firewall nezávisle na uživatelském serveru. Bezpečnostní software pak není negativně ovlivněn procesy provozovanými uživateli. Technologii lze použít pro provoz gridů se stejnými, ale na míru upravenými OS (například PlanetLab1). Systém využívají také firmy poskytující provoz, pronájem a prodej serverů. Každý zákazník si upraví server podle svých představ bez ohledu na ostatní uživatele. Poskytovatel služby však může provozovat více virtuálních na jednom fyzickém serveru. Sníží značně náklady a správa takového systému je také podstatně jednodušší. Tento nepříliš náročný způsob virtualizace je výhodný pro výuku. Každý student má k dispozici vlastní server. Chybný úkon však neznamená poškození vlastního operačního systému nebo hardware. Veškeré informace vztahující se k operačnímu systému (například konfigurační soubory a cesty k nim) odpovídají systému Fedora Core 6, na němž byly systémy testovány.
1.2.1 Linux-VServer Linux-VServer je zástupcem virtualizace na úrovni jádra OS. Projekt byl založen Jacquesem Gélinasem a nyní jej vyvíjí skupina programátorů kolem Herberta Pötzla pod licencí GPL. Jednotlivé servery obsluhuje upravené jádro Linuxu. V souvislosti s Linux-VServerem se nazývají bezpečnostní kontexty (security contexts), zkráceně kontexty, v kterých je spouštěn a provozován virtuální server (VPS). Každý běžící VPS má svoji vlastní správu nezávislou na ostatních. Systém využívá a rozšiřuje již existující vlastnosti a služby jádra. Jsou 1
Otevřená výzkumná počítačová síť, www.planet-lab.org.
5
to zejména Linux capabilities, omezení výpočetních zdrojů (resource limits), atributy souborů (file attributes) a chroot. Autoři jádro rozšířili o podporu kontextů, v kterých jsou procesy spuštěny, izolovány a zneviditelněny pro jiné kontexty. Pro usnadnění administrace existuje hostitelský kontext (Host context), v němž běží vlastní systém, a pro přehled procesů všech VPS je vytvořen Spectator kontext. Oba tyto kontexty jsou v současnosti implementovány jako jeden administrátorský kontext nazývaný hostitelský. Jádro obsahuje rozšíření pro virtualizaci síťového rozhraní. Linux-VServer nepoužívá virtuální zařízení, které by zvýšilo zátěž systému, ale techniky socket binding a packet transmission. Pro oddělení diskových oblastí projekt používá upravené původní rozhraní chroot. Pro každý VPS se při spuštění uchovává nejvyšší možný adresář (kořenový adresář serveru), čímž je zabráněno úniku z privátní diskové oblasti. V budoucnu by v Linux-VServeru tento mechanismus měl být nahrazen vhodnějším.
1.2.2 OpenVZ Dalším linuxovým virtualizačním systémem na principu virtualizace na úrovni operačního systému je OpenVZ, vyvíjený pod GPL jako základ systému Virtuozzo™, komerčního produktu firmy SWsoft2. Firma celý projekt zaštiťuje a financuje. Virtuální server se v souvislosti s OpenVZ nazývá Virtual Environment (VE) nebo Virtual Private Server (VPS). Podobně jako u Linux-VServeru je k jeho běhu nutné upravené jádro Linuxu, rozšířené o podporu provozu izolovaných virtuálních strojů. Narozdíl od Linux-VServeru nevychází OpenVZ z původních Linux Capabilities, ale přidává do jádra zcela nová rozhraní. Nejdůležitějším z nich je správa výpočetních zdrojů (Resource management). Běh více VPS nesmí ovlivňovat jejich výkon. Z tohoto důvodu jsou velmi důležité správa a přidělování hardwarových prostředků. Správa se dělí na dvouúrovňové diskové kvóty (two-level disk quota), plánovač CPU (fair CPU scheduler) a přidělování systémových prostředků (user beancounters). OpenVZ provozuje hostitelský operační systém jako privilegovaný server schopný spravovat ostatní VPS. Systém používá pro virtualizaci síťového rozhraní virtuální síťové zařízení. Původně systém obsahoval velmi jednoduché venet později byl nahrazen zařízením veth, které je schopné pracovat i s IPv6 (podpora IPv6 v Linux-VServeru není doposud plně implementována). OpenVZ nerozšiřuje chroot známý z Unixu. Implementuje vlastní mechanismus, který jej zcela nahradil, ale v principu z něho vychází.
2
www.swsoft.com
6
2 Instalace systémů Oba systémy vyžadují instalaci upraveného jádra systému a utilit sloužících k instalaci, správě a manipulaci s virtuálními servery. Kontexty a VPS jsou implicitně instalovány v adresářích /vservers u Linux-VServeru resp. /vz u OpenVZ. Příprava samotného hostitelského systému je poměrně jednoduchá. Obtížné je sestavení, konfigurace a správa virtuálních serverů. Správce by si měl být od začátku vědom, k jakým účelům bude server sloužit a jaké vlastnosti od něj bude požadovat. Úprava chybného nastavení může být totiž velmi složitá.
2.1 Linux-VServer Upravené jádro Linuxu vytvoříme tak, že na zdrojové kódy generického jádra Linuxu řady 2.6, které je možné stáhnout z http://www.kernel.org ve formě komprimovaného souboru, aplikujeme patch Linux-VServeru odpovídající verze, který je k dispozici na http://linuxvserver.org v podobě diff souboru. Můžeme zvolit z několika vývojových verzí. Dále je třeba nainstalovat vserver-utils, balíček utilit a pomocných programů potřebných ke správě a provozu virtuálních serverů. Tyto programy je také možné stáhnout z domovské stránky projektu. Po instalaci systému by se měl spustit démon vprocunhide.
2.1.1 Vytvoření virtuálního serveru: Virtuální server vytvoříme pomocí utility postavený na distribuci Fedora Core 3 založíme příkazem:
vserver.
Například
server
test
# vserver test build -m apt-rpm\ > --hostname=servername.mydomain.tld\ > --interface eth0:1.2.3.4/24 --context=42 -- -d fc3 Přepínač -m značí metodu jakou bude virtuální server sestaven. Argumenty mohou být apt-rpm, rpm a yum. Pak pro stažení potřebných balíčků z Internetu nebo jiného zdroje bude použit program apt-get, rpm nebo yum. Pro server založený na distribuci Debian je možné aplikovat metodu s argumentem debootstrap, která využije instalovaný balíček debootstrap nebo, pokud na systému instalován není, stáhne jej z Internetu. Metoda skeleton založí pouze základní adresářovou strukturu a konfigurační soubory a příprava virtuálního serveru je dále ponechána na správci. Do adresářové kostry může zapsat předpřipravený server, který stáhne ze stránek projektu, nebo může vytvořit vlastní distribuci. Argumentem přepínače --hostname je síťové jméno virtuálního serveru. Přepínač --interface konfiguruje IP adresu virtuálního serveru s označením délky prefixu a síťového zařízení, které bude virtuální server využívat. Zařízení můžeme v serveru přidělit alias. Chceme-li, aby bylo síťové zařízení eth0 ve virtuálním serveru označeno například jako guest0, pak použijeme argument přepínače --interface ve tvaru guest0=eth0:192.168.0.1/24. Tento přepínač je možné použít vícenásobně.
7
Přepínačem --context vynutíme statický kontext tohoto virtuálního serveru a přidělíme mu číslo. Pokud přepínač není uveden bude kontextové číslo přidělováno dynamicky při startu virtuálního serveru. Argument fc3 určuje, že virtuální server bude sestaven podle šablony operačního systému Fedora Core 3, které jsou uloženy v adresáři /etc/vservers/.distributions/. Argument přepínače -m debootstrap lze kombinovat s argumenty sarge a woody. Pro -m skeleton nemá přepínač význam. Přepínačem -d určíme instalaci z Internetu, přepínač -b určuje lokální zdroj. Pokud po přepínači uvedeme opět přepínač -m s argumentem určujícím cestu k instalačním balíkům, bude virtuální server vytvořen z tohoto zdroje. Síťové zařízení, které bude moci kontext využívat určíme pomocí --netdev (například --netdev eth0). Přepínačem --flags nastavujeme speciální příznaky virtuálních serverů jako jsou sched, nproc, jednotlivé přepínače oddělujeme čárkou. Přepsání již existujícího virtuálního serveru se stejným názvem vynutíme přepínačem -force.
2.1.2 Kontextová čísla – vytvoření, spuštění kontextu Při vytváření virtuálního serveru neboli kontextu můžeme zadat jeho statické kontextové číslo (volba --context utility vserver s přepínačem --build). Číslo je využíváno při určování příslušnosti procesu nebo souboru k virtuálnímu serveru. Systém touto identifikací zajišťuje izolaci a bezpečnost serverů. Kontextové číslo je v terminologii Linux-VServeru označováno zkratkou xid. Neuvedeme-li jej při vytváření virtuálního serveru je generováno dynamicky při startu virtuálního serveru, avšak nevýhoda takového řešení spočívá v rozdílném čísle kontextu po každém spuštění. Kontextové číslo je po jméně kontextu, které slouží ke snadnému zapamatování, nejdůležitějším identifikátorem virtuálního serveru. Využívají jej utility Linux-VServeru spravujícími běžící kontexty. Právě z tohoto důvodu by bylo vhodné, aby každý kontext měl svoje jedinečné statické číslo. Pokud jsme nenastavili kontextové číslo při vytváření virtuálního serveru můžeme tak učinit vložením zvoleného kontextové čísla do souboru /etc/vservers/
/context. Zvolíme-li kontextové číslo, které bylo přiděleno už dříve jinému kontextu, pak utilita vserver nahlásí chybu. Kontextová čísla běžících virtuálních serverů můžeme vypsat utilitou vserver-stat. Některé funkce a nastavení virtuálních serverů, například diskové limity Linux-VServeru, lze použít pouze se statickým kontextovým číslem. Ve dřívějších verzích Linux-Vserveru jsme dynamické přidělení a případnou změnu kontextu mohli provést utilitou chcontext. Ta byla nahrazena několika utilitami, z nichž nejdůležitější jsou vcontext, vattribute a vuname:
8
vcontext – Vytvoří kontext a spustí v něm proces nebo změní kontext běžícího procesu. Nápovědu získáme zadáním vcontext --help. Spuštění procesu ls s přepínačem -l v novém kontextu 1000 může vypadat takto: # vcontext --create --xid 1000 -- ls -l vattribute – Nastavuje capabilities a příznaky pro procesy v daných kontextech. Nápovědu získáme po zadání vattribute –-help. Chceme-li vypnout capabilities nebo příznaky, uvedeme před jejich označení znak ! nebo ~. vuname – Nastavuje a zobrazuje identifikační údaje o kontextu, například hostitelské jméno, verzi kontextu a podobné záznamy ukládané v adresáři /etc/vservers/test0/uts. Nápovědu získáme po zadání vuname –-help. Utitility vcontext, vattribute a vuname je možné využít pro dynamické vytvoření nového kontextu pro proces, ale bez založení nového virtuálního serveru. Umožňují také migraci procesu z hostitelského uzlu do kontextu, což je jednou z největších předností Linux-VServeru nejen oproti ostatním zástupcům virtualizace na úrovni jádra, ale i ostatním virtualizačním nástrojům.
2.1.3 Smazání kontextu Linux-VServer neobsahuje utilitu pro mazání virtuálních serverů. Musíme tedy smazat adresář s ukládanými soubory serveru, který je implicitně v adresáři /vservers, a odpovídající konfigurační soubor a adresář v /etc/vservers. Adresáře mají stejný název jako kontext, konfigurační soubor navíc s koncovkou .conf. Virtuální server při mazání nesmí být spuštěný.
2.1.4 Klonování virtuálního serveru Představme si, že uživatel potřebuje vytvořit více podobných virtuálních serverů. Pravděpodobně bude zpočátku vytvářet identické kopie stejného serveru. Autoři LinuxVServeru pro tyto účely vytvořili program vserver-copy. Ten za pomoci programu rsync, který je součástí Linuxu, zkopíruje souborový systém a konfigurační soubory virtuálního serveru. Změní pouze síťové jméno a IP adresu, pokud je zadáme jako argument. Kopie virtuálního serveru se může nacházet na jiném stroji. Pak k přesunu/zkopírování bude využit program rsh, popřípadě ssh. Program vserver-copy může být použit i na klonování běžícího virtuálního serveru, avšak pak může dojít k nekonzistenci právě ukládaných dat v kopírovaném serveru. Důležitými volbami jsou: •
-d,--domain domain - Nastavuje /etc/hosts. Musí být použito s -i.
síťové jméno virtuálního serveru. Přepisuje
•
-i,--ip address - Nastavuje IP adresu virtuálního serveru. Přepisuje /etc/hosts. Musí být použito s -d.
•
-r,--vsroot Nastavuje nastaveno na /vserver.
adresář
s
virtuálními
servery.
Standardně
9
•
-R,--rsh - Použije se rsh místo standardního ssh při přesunu virtuálního serveru na jiný stroj.
•
-s,--stopstart - Zastaví virtuální server, zkopíruje jej a spustí z nového umístění. Funkce má smysl, pokud přesunujeme virtuální server na jiný stroj beze změny síťového nastavení.
Příklady použití: # Kopírování vserveru template do vserveru web01 se stejnou IP # adresou atd. /usr/sbin/vserver-copy template web01 # Kopírování vserveru template do vserveru web62 se změnou # síťového nastavení /usr/sbin/vserver-copy -i 192.168.5.62 -d example.com template \ web62 # Přesun vserveru web62 na jiný stroj /usr/sbin/vserver-copy -s web62 roothost02: K chybě může dojít při přesunu virtuálního serveru na stroj s jinou MAC adresou při zachování síťového nastavení. Ostatní zařízení v síti posílají data a požadavky na původní MAC adresu, dokud nevyprší platnost záznamu v ARP tabulce. Řešením je použití příkazu ping, které upozorní ostatní síťová zařízení na změnu MAC adresy.
2.1.5 Spouštění procesů z hostitelského kontextu Jak bylo uvedeno v kapitole 2.1.2, Linux-VServer nabízí funkce pro spouštění procesů z hostitelského kontextu. Následující příklad ilustruje použití: Vytvoříme 3 kontexty s čísly 100, 200 a 300 a spustíme v každém z nich program cpuhog z aktuálního adresáře hostitelského uzlu: # vcontext --create --xid 100 ./cpuhog # vcontext --create --xid 200 ./cpuhog # vcontext --create --xid 300 ./cpuhog
Každému kontextu nastavíme příznak sched_hard plánovače cpu pro nastavení tvrdého limitu a nastavíme limity pro každý kontext: # # # # # #
vattribute --xid vattribute --xid vattribute --xid vsched --xid 100 vsched --xid 200 vsched --xid 300
100 --flag sched_hard 200 --flag sched_hard 300 --flag sched_hard --fill-rate 3 --interval 6 --fill-rate 2 --interval 6 --fill-rate 1 --interval 6
Následující příklad ilustruje spuštění programu ps s argumenty axh v kontextu 43 z hostitelského uzlu: # vcontext --migrate --xid 43 ps axh
10
2.2 OpenVZ Autoři systému OpenVZ doporučují vytvořit pro adresář virtuálních serverů (/vz) samostatnou diskovou oblast. Pokud tak neučiníme, systém bude funkční, ale nebudeme moci kombinovat diskové kvóty implementované v systému OpenVZ s linuxovými kvótami. Diskové kvóty OpenVZ podporují pouze souborové systémy Ext2 a Ext3. Z tohoto důvodu bychom měli pro tuto diskovou oblast zvolit jeden z nich. Systém OpenVZ vyžaduje speciální upravené jádro, pro které si z domovských stránek systému http://openvz.org můžeme stáhnout předpřipravené balíčky. Druhou možností je stažení patche a následné upravení a kompilace vlastního jádra. K dispozici jsou dvě větve systému Stabilní (stable) a testovací (development nebo test). Stabilní verze však podporují poměrně staré verze jader. Nejnovější současnou stabilní verzí je 2.6.9 (24. 2. 2007). Autoři však garantují stabilitu a plnou funkčnost jader z testovací větve, která však ještě neprošla certifikací firmy SWSoft pro bezpečný provoz. Dále je potřeba nainstalovat programy a utility pro tvorbu, ovládání a správu virtuálních serverů - OpenVZ user-level utilities. Připravený instalační balíček, stejně jako zdrojové texty, získáme z domovských stránek projektu OpenVZ. Autoři doporučují upravit nastavení hostitelského operačního systému, na němž chceme OpenVZ provozovat. Potřebujeme vypnout systém SELinux, čehož dosáhneme vložením SELINUX=disabled souboru /etc/sysconfig/selinux. Dále bychom měli upravit síťové nastavení v souboru /etc/sysctl.conf následovně: net.ipv4.ip_forward = 1 net.ipv4.conf.default.proxy_arp = 0 net.ipv4.conf.all.rp_filter = 1 kernel.sysrq = 1 net.ipv4.conf.default.send_redirects = 1 net.ipv4.conf.all.send_redirects = 0 Pokud instalace proběhla v pořádku, pak se po restartu spustí démon vz.
2.2.1 Vytvoření VPS Každý VPS na hardwarovém uzlu jednoznačně určuje 32 bitové číslo. Číslo 0 vždy určuje hardwarový uzel – hostitelský systém. Čísla od 1 po 100 jsou rezervována pro interní potřeby OpenVZ a neměly by být použity pro označení VPS. Seznam existujících VPS a jejich čísel vypíšeme utilitou vzlist s přepínačem -a. VPS vytvoříme pomocí příkazu vzctl create. Má následující syntax: vzctl create VPS_ID [--ostemplate name] [--config name] [--private path] [--root path] Příkaz vytvoří VPS s číslem VPS_ID. Argumenty jsou následující:
11
•
--ostemplate name - Určuje šablonu, podle které má být sestaven VPS. Pokud parametr není uveden, je použita hodnota DEF_OSTEMPLATE z globálního konfiguračního souboru OpenVZ /etc/sysconfig/vz.
•
--config name – Volitelný parametr. Pokud je uveden, vyhledá se konfigurační soubor ve-name.conf-sample z adresáře /etc/sysconfig/vz-scripts a použije se jako konfigurační soubor nového VPS. Není-li uveden, aplikuje se implicitní parametr uvedený v globálním konfiguračním souboru /etc/sysconfig/vz. Pokud není uveden ani ten, je třeba hodnoty nastavit pomocí vzctl set před startem VPS.
•
--private path – Volitelný parametr. Pokud je uveden, specifikuje cestu k privátní (private) oblasti VPS. Má vyšší prioritu, než cesta uvedená v globálním konfiguračním souboru /etc/sysconfig/vz (proměnná VE_PRIVATE). Argument může obsahovat řetězec $VEID, který bude nahrazen identifikačním číslem VPS (VPS_ID).
•
--root path – Volitelný parametr. Pokud je uveden, specifikuje cestu, kam bude namontován kořenový adresář VPS. Má vyšší prioritu, než cesta uvedená v globálním konfiguračním souboru /etc/sysconfig/vz (proměnná VE_ROOT). Argument může obsahovat řetězec $VEID, který bude nahrazen identifikačním číslem VPS (VPS_ID).
Šablona je soubor balíků souvisejících s danou distribucí. Seznam balíků je získán z metadat šablony. Ta také popisují umístění repositářů balíčků, skripty, které se mají spustit během vytváření šablony a další potřebné informace. Cache šablony (Template Cache) nazývají autoři OpenVZ virtuální prostředí VE vytvořené podle šablony a zkomprimované do tarball archívu. Ke stažení metadat využijeme utilitu yum. Seznam dostupných metadat získáme následovně: # yum search vztmpl Instalaci pak provedeme takto: # yum install vztmpl-XXX [...] Na adrese http://openvz.org/download/template/metadata/ je nalezneme v podobě rpm a tarball balíčků. Po jejich instalaci sputíme utilitu vzpkgcache, která provede aktualizaci seznamu metadat šablon. Například pro Centos 4: # vzpkgcache centos-4-i386-minimal Na adrese http://openvz.org/download/template/ jsou k dispozici obrazy hlavních distribucí ve formátu tarball. Nerozbalený soubor umístíme do adresáře /vz/template/cache. Takový postup nedoporučují autoři projektu, protože k VPS pak neexistují na systému odpovídající metadata. Seznam šablon dostupných na systému vypíšeme utilitou vzpkgls. Chceme-li, aby byl VPS aktivován při startu samotného hardwarového uzlu použijeme utilitu vzctl: vzctl set VPS_ID --onboot yes --save
12
2.2.2 Smazání VPS VPS můžeme smazat pomocí příkazu vzctl destroy. VPS 101 pak vymažeme příkazem: # vzctl destroy 101. Příkaz odstraní všechny soubory z privátní (private) oblasti (specifikovaná proměnou VE_PRIVATE v konfiguračním souboru VPS). Konfigurační soubor z /etc/sysconfig/vzscripts/ je přejmenován z VPS_ID.conf na VPS_ID.conf.destroyed. VPS nesmí běžet a privátní oblast musí být odmontována.
2.2.3 Checkpointing a live migration Checkpointing (CPT) je nová funkce OpenVZ, která umožňuje uložit stav virtuálního prostředí VPS (Virtual Environment – VE) a později jej vyvolat na stejném nebo zcela jiném počítači. Online migration Do balíčku utilit OpenVZ byla přidána vzmigrate, která umožňuje online přesun VPS na jiný hostitelský systém bez nutnosti zastavení. VPS pouze na okamžik „zamrzne“ a poté v novém prostředí pokračuje ve své předešlé činnosti. Syntax příkazu je následující: vzmigrate --online VPS_ID Veškerá data VPS jsou uložena do image souboru a ten je přesunut na cílový hostitelský systém protokolem ssh. Manuální checkpointing a obnovovací funkce Utilita vzmigrate není bezpodmínečně nutná pro přesun VPS na jiný stroj. Vzctl nabízí společně s dalšími programy dostatečné služby pro manuální přesun. Nejprve vytvoříme obraz (CPT) VPS: vzctl chkpnt VPS_ID --dumpfile <path> Příkaz uloží stav a data VPS do dumpfile a server zastaví. Pokud není dumpfile uveden, použije implicitní /vz/dump/dump.VPS_ID. VPS je pak možné opět obnovit: vzctl restore VPS_ID --dumpfile <path> Bezpodmínečně musí být cílový souborový systém shodný s původním. Pokud přesunujeme VPS na jiný stroj, je nutné privátní soubory serveru nejprve synchronizovat utilitou rsync. Checkpointing krok za krokem Proces uložení CPT může být rozdělen do tří kroků. Prvním krokem je pozastavení VPS. Systém uvede procesy do speciální stavu a zastaví síťová rozhraní: vzctl chpnt VPS_ID --suspend
13
Ve druhém kroku se stav procesů a souborů uloží do dumpfile. Uloženy jsou adresový prostor, stav registrů, otevřené soubory, roury a sokety, struktury System V IPC, cwd, obsluhy signalů, nastavení terminálu, UID, GID, identifikátory procesů (PID, PGRP, ...), rlimit a další data. Tato fáze se provede: vzctl chkpnt VPS_ID --dump --dumpfile <path> VPS je pak zastaven příkazem: vzctl chkpnt VPS_ID --kill Jeho stav z image souboru může být obnoven: vzctl chkpnt VPS_ID --resume Obnovení běhu se skládá ze dvou částí. Prvním krokem je obnova procesů. Ty jsou ponechány ve speciálním stavu (frozen state): vzctl restore VPS_ID --undump --dumpfile <path> Druhým krokem je probuzení procesů nebo jejich zabití, pokud se migrace nezdařila. Odpovídající příkazy jsou: vzctl restore VPS_ID --resume vzctl restore VPS_ID --kill
2.3 Shrnutí Instalace obou systémů je v podstatě podobná. Využívají upravené jádro a utility určené ke správě virtuálních serverů. Vytvoření virtuálních serverů se však liší. Zatímco je Linux-VServer vytváří na základě apt, yum nebo rpm a stahuje potřebné balíčky z Internetu nebo uvedených cest, případně vytváří pouhou kostru systému a jeho sestavení ponechává na administrátoru, OpenVZ vytváří VPS ze šablon. Teprve takový VPS je možné upravit podle potřeb uživatelů. Linux-VServer dovoluje označit virtuální server vedle kontextového čísla identifikačním názvem, který usnadňuje orientaci ve spravovaných serverech. OpenVZ přiřazuje serverům pouze číselné označení. Slovní označení je však možné nahradit nastavením hostname. V OpenVZ lze VPS automaticky vymazat. Podobná funkce nebyla prozatím v LinuxVServeru implementována, což snižuje komfort při administraci. Užitečným nástrojem Linux-VServeru je vserver-copy, praktický nástroj pro vytváření identických virtuálních serverů, což mohou využít například poskytovatelé VPS. Nástrojem můžeme přesunout virtuální server na jiný fyzický počítač i bez zastavení serveru. OpenVZ nenabízí utilitu pro klonování VPS, avšak přesun serveru na jiný stroj je možný pomocí nástrojů pro checkpointing. Tento mechanizmus umožňuje také vytvoření obrazu stavu virtuálního stroje, což je funkce, která byla dosud jednou z předností nástrojů plné virtualizace a paravirtualizace. Utility Linux-VServeru umí pracovat s kontexty a k nim příslušnými procesy bez spuštění virtuálního serveru nebo jejich vytvoření pomocí utilit. Funkce slouží například k přesunům procesů mezi servery, vyjmutí a vložení procesu do serveru. OpenVZ migraci procesů nepodporuje.
14
3 Síťová rozhraní Virtualizace síťových rozhraní je implementačně jednou z nejproblematičtějších oblastí virtualizačních nástrojů. Virtualizovaná síť musí být rychlá a spolehlivá, ale přitom nesmí příliš zatěžovat procesor. Řešením může být virtuální síťový hardware simulující funkčnost skutečného zařízení nebo rozšíření funkcí a služeb jádra tak, aby bylo možné navázat určité IP adresy určitým procesům. To však s sebou přináší mnohé problémy jako je například loopback a multicastu.
3.1 Linux-VServer Linux-VServer pro síťové rozhraní rozšiřuje funkce a služby jádra, avšak pracuje pouze s IP vrstvou ISO-OSI modelu. Nelze tedy například udělit virtuálnímu serveru MAC adresu. Systém umožňuje prostřednictvím utility chbind navázat určitou IP adresu na proces a všechny jeho potomky. Stejná IP adresa virtuálního serveru je připojena ke všem procesům kontextu. Je možné, aby síťové zařízení mělo z pohledu přiřazeného serveru zvláštní jméno. Do Linux-VServer není zatím implementována podpora IPv6. Současné verze nepodporují multicast ani loopback adresaci kontextů.
3.1.1 Nastavení síťových rozhraní Nastavit síťová rozhraní můžeme už při vytváření virtuálního serveru přepínačem -interface utility vserver. Argumentem tohoto přepínače může být například guest0=eth0:10.0.0.19/32, kde guest0 je jméno virtuálního rozhraní, eth0 jemu odpovídající fyzické rozhraní, za dvojtečkou následuje IP adresa s délkou prefixu za lomítkem. Virtuální jméno, prefix a IP adresa nejsou povinné údaje a pokud je neuvedeme, použijí se standardní nastavení. Vynecháme-li například virtuální jméno, aplikuje se fyzické. Další přepínač je --netdev <dev>, jehož prostřednictvím určíme síťové zařízení, které bude kontext využívat. Argumentem --netbcast konfigurujeme broadcast adresu a jeden z dvojice přepínačů --netmask a --netprefix pro konfiguraci síťové masky, resp. síťového prefixu. Žádný z těchto přepínačů není povinným. Síťové nastavení kontextů se uchovává v adresářích /etc/vservers//. Každému rozhraní odpovídá jeden podadresář pojmenovaný dvojmístným číslem, počínající adresářem 00. Adresáře mohou obsahovat tyto soubory:
•
bcast – Nastavuje broadcast adresu.
•
dev – Nastavuje přidělení fyzického síťového zařízení.
•
disabled – Pokud tento soubor existuje, nebude toto rozhraní aktivováno.
•
ip – IP adresa přiřazena k tomuto rozhraní
•
mask – Nastavuje síťovou masku.
15
•
name – Pokud soubor existuje, bude rozhraní z pohledu kontextu pojmenováno podle obsahu tohoto souboru. Bez takového záznamu, nebude IP zobrazena s ifconfig, pouze s ip_addr_ls. Toto pojmenování se označuje jako „alias“.
•
nodev – Existuje-li, převezme se IP adresa z jiného rozhraní. Využít jej můžeme pro připojení síťového rozhraní vytvořeného jiným virtuálním serverem nebo hostitelským systémem.
•
novlandev – Existuje-li, budou přeskočeny kroky pro vytváření a rušení VLAN rozhraní. Soubor má vyšší prioritu, než soubor ./vlandev a soubor globálního nastavení /etc/vservers/.defaults/interfaces/vlandev.
•
prefix – Nastavuje síťový prefix.
•
vlandev a /etc/vservers/.defaults/interfaces/vlandev - Existuje-li, budou provedeny kroky pro vytváření a rušení VLAN rozhraní.
3.1.2 Nastavení démonů, program chbind Linux-VServer ve své implementaci nevytváří virtuální síťové zařízení pro každý kontext. Z tohoto důvodu mohou mít některé démony problém s vázáním na IP adresu, pokud mají být spuštěny zvlášť v hostitelském i virtuálním serveru. K tomuto účelům je určen program systému Linux-VServer chbind. Pokud například budeme chtít provozovat démon httpd na hostitelském serveru s IP adresou 10.0.0.19 a zároveň na virtuálním serveru test, pak spustíme příkaz chbind na hostitelském serveru: # /usr/sbin/chbind --ip 10.0.0.19 /etc/rc.d/init.d/httpd \ > restart Tím „navážeme“ démon httpd na hostitelském serveru na IP adresu 10.0.0.19. Poté restartujeme virtuální server test: # /usr/sbin/vserver test restart Nyní je démon httpd spuštěn na obou serverech pod jinou IP adresou. Při instalaci Linux-VServeru jsou v hostitelském kontextu vytvořeny startovací skripty pro spuštění nejpoužívanějších démonů za pomoci programu chbind. Těmito skripty jsou: /etc/rc.d/init.d/v_gated pro spuštění démona gated. /etc/rc.d/init.d/v_named pro spuštění démona named. /etc/rc.d/init.d/v_portmap pro spuštění démona portmap. /etc/rc.d/init.d/v_sendmail pro spuštění démona sendmail. /etc/rc.d/init.d/v_smb pro spuštění démona smb. /etc/rc.d/init.d/v_sshd pro spuštění démona sshd. /etc/rc.d/init.d/v_xined pro spuštění démona xined.
16
Chbind používáme pro navázání služeb na servery. Implicitně se totiž využívá IP adresa 0.0.0.0, což proces naváže na síťová rozhraní všech kontextů. To však může být nežádoucí. Navázání můžeme upravit například pouze na hostitelský systém. Volby programu chbind: chbind [--silent] [--ip ip_number/interface] broadcast_address]
[--bcast
•
--ip ip_number/interface – Váže proces k uvedené IP adrese, pokud je uvedeno síťové rozhraní (například eth0), pak je použita IP a broadcast adresa z nastavení tohoto rozhraní.
•
--bcast – Broadcast adresa na kterou má být proces „navázán“.
•
--silent – Nebudou se vypisovat informace.
3.2 OpenVZ Pro síťovou komunikaci mezi VPS navzájem a se serverem slouží virtuální síťová zařízení venet, které je starší a emuluje pouze komunikaci na IP vrstvě ISO-OSI modelu, a veth, které je prozatím pouze v testovacích verzích jádra a implementuje komplexní funkce síťového hardware. VPS tedy nekomunikuje přímo s fyzickým síťovým zařízením, i když systém OpenVZ k němu umožňuje nastavit exklusivní přístup. Můžeme tak přímo zpřístupnit například eth0 z určitého virtuálního serveru, avšak rozhraní poté není přístupné z jiných VPS a ani z hardwarového uzlu. Takovým „přesunem“ do VPS však ztrácíme bezpečnostní omezení, které platí pro virtuální zařízení. Lze například přímo z VE přidělit rozhraní libovolnou IP adresu nebo přepnout zařízení do promiskuitního režimu atd.
3.2.1 Zařízení venet Zařízení venet umožňuje přidělení IPv4 adres danému VPS. Konfiguruje virtuální zařízení pro VPS a obsluhuje komunikaci virtuálních serverů. Na straně hostitelského uzlu přeposílá pakety podle IP adresy. Zpřístupnění zařízení eth0 ve VPS s číslem 101 provedeme příkazem: # vzctl set 101 --netdev_add eth0 --save Zařízení odebereme příkazem: # vzctl set 101 --netdev_del eth0 --save Nastavení síťového rozhraní provádíme pomocí utility vzctl s přepínačem set (s přepínačem --save pro uložení změn): •
vzctl set VPS_ID --hostname hostname –-save – Nastavuje síťové jméno VPS.
•
vzctl set VPS_ID --ipadd addr –-save – Přidává IP adresu pro VPS.
•
vzctl set VPS_ID --ipdel addr|all –-save – Ruší přidělení dané|všech IP adres VPS.
17
•
vzctl set VPS_ID --nameserver addr –-save – DNS server VPS (může být uvedeno více adres oddělených bílým znakem).
•
vzctl set VPS_ID –-searchdomain domain –-save – DNS search domény VPS (může být uvedeno více domén oddělených bílým znakem).
3.2.2 Síťové zařízení veth Virtuální zařízení venet umožňuje přidělit VPS pouze IP adresu. V některých případech je však vyžadována vyšší míra virtualizace, kdy bychom chtěli bychom mít plně virtualizované zařízení. V testovacích verzích jádra systému OpenVZ je implementováno zařízení veth. Toto zařízení má vlastní MAC adresu. Dovoluje také použití IPv6. OpenVZ vytváří virtuální bridge propojující zařízení VPS veth s fyzickým zařízením. Správce VE může konfigurovat síť podle svého přání včetně IP adres, gateway, ... Mechanismus je implementován jako dvě virtuální zařízení. Jedno v hostitelském uzlu a další ve VPS a obě jsou propojena. Pokud jej přijme jedna strana a je určený pro druhou, přeposílá se. Nakonfigurovat jej pro VPS můžeme následujícím způsobem: vzctl set VPS_ID –-netif_add <dev_name>,<dev_addr>,, kde: dev_name je ethernetové zařízení v hostitelském systému. • dev_addr je jeho MAC adresa . • ve_dev_name je jméno ethernetového zařízení VPS. • ve_dev_addr je MAC adresa z pohledu VPS. •
MAC adresy jsou uvedeny ve tvaru XX:XX:XX:XX:XX:XX. Volba je připojena do seznamu již existujících záznamů. Konkrétní natavení pak vypadá například takto: # vzctl set 101 --netif_add \ > veth101.0,00:12:34:56:78:9A,eth0,00:12:34:56:78:9B --save Poté bude vytvořeno pro VPS 101 zařízení veth a jeho konfigurace se uloží. Z pohledu hostitelského sytému bude mít ethernetové zařízení jméno veth101.0 a uvedenou MAC adresu. Uvnitř VPS se zařízení bude jmenovat eth0 s MAC adresou 00:12:34:56:78:9B. Zařízení odebereme příkazem: vzctl set --netif_del <dev_name> Utilita vzctl používala až do verze 3.0.14 (15. 1. 2007) přepínače --veth_add a -veth_del namísto současných --netif_add a --netif_del.
3.3 Shrnutí OpenVZ nabízí širší služby a umožňuje širší nastavení síťového rozhraní. Narozdíl od Linux-VServeru umí pracovat s IPv6. Systém dosahuje funkcí za cenu vyšších režijních ztrát,
18
které však nejsou příliš patrné. Postačuje-li nám pouze směrování na úrovni IP vrstvy ve verzi IPv4, pak Linux-VServer nabízí dostatečnou funkčnost, avšak je třeba vyřešit problém vázání aplikací na různé IP adresy při vícenásobném spuštění ve více virtuálních serverech. U virtuálního síťového zařízení OpenVZ tento problém nenastává. V Linux-VServer lze vázat procesy na IP adresy všech kontextů (IP 0.0.0.0). OpenVZ vytváří pro každý VPS virtuální síťový hardware, což podobné služby neumožňuje. Vývojová verze Linux-VServer nabízí upravenou implementaci navazování soketů na IP adresy pomocí bind(2). Nová verze bude umožňovat navázání soketu na množinu určitých IP adres nebo masek. V současnosti by mělo být podporováno až 16 IP adres/masek na virtuální server.
19
4 Diskové limity Chceme-li z nějakého důvodu omezit velikost diskového prostoru přiděleného danému virtuálnímu serveru, můžeme použít diskové kvóty. Přidělíme tak serveru explicitně určitou diskovou paměť, kterou pak bude moci využívat a nesmí ji překročit. V podstatě mechanismus rozšiřuje mechanismus utility quota z uživatelů na kontexty. Uvnitř serveru lze využít linuxové uživatelské kvóty za předpokladu, že se takový server nachází na samostatné diskové oblasti. V opačném případě by se hodnoty za jednotlivé VE mohly sčítat. OpenVZ nabízí vlastní řešení.
4.1 Linux-VServer Systém Linux-VServer umožňuje omezit diskovou paměť přidělenou danému kontextu. Každému souboru je přiděleno kontextové číslo (xid) virtuálního serveru, ke kterému soubor náleží. Diskové limity můžeme použít jen se statickým kontextovým číslem. Pro připojení souborového systému se soubory s tagem xid je nutné použít volbu příkazu mount tagxid: # mount -o tagxid,rw /dev/whatever /vservers Pro soubor /etc/fstab použijeme volbu: /dev/whatever /vservers ext3 defaults,tagxid 0 2 Pokud chceme změnit kontextový tag souborů, použijeme utilitu chxid: # chxid -c test1 -R /vservers/test1/ Tím změníme kontextové tagy souborů kontextu test1, který je uložen v adresáři /vservers/test1/, včetně všech podadresářů (přepínač -R), na hodnotu odpovídající kontextovému číslu tohoto kontextu (přepínač -c). Celý příkaz musíme zopakovat pro všechny souborové systémy, které chceme omezit a ke kterým má kontext právo zápisu. Poté můžeme nastavit diskové limity. Chceme-li omezit například diskový prostor kontextu test1 na 5 GiB a 100000 i-uzlů, zvolíme následující postup: # mkdir -p /etc/vservers/test1/dlimits/0 # echo /vservers/test1 > /etc/vservers/test1/dlimits/0/directory # echo $(( 5 * 1024 * 1024 )) > /etc/vservers/test1/dlimits/0/space_total # echo 100000 > /etc/vservers/test1/dlimits/0/inodes_total # echo 5 > /etc/vservers/test1/dlimits/0/reserved
20
Tím vytvoříme adresář /etc/vservers/test1/dlimits/0 s konfiguračními soubory diskových limit. Do souboru directory vložíme cestu k adresáři, který má být omezen, do souboru space_total vložíme velikost diskové prostoru v KiB, soubor inodes_total obsahuje počet i-uzlů a soubor reserved obsahuje velikost diskového prostoru v procentech celkové paměti, který je rezervován pro uživatele root. Adresář /etc/vservers/test1/dlimits/ může obsahovat více podadresářů (pojmenovaných 0, 1, 2, ...), každý se stejnou strukturou jako v příkladu, a každý z nich obsahuje nastavení limitů různých diskových oblastí. Při prvním spuštění kontextu s nastavenými diskovými limity se vypočítá velikost a obsazení diskového prostoru. Vypočtené hodnoty jsou uloženy do cache. Pokud přidáme soubory do adresářového prostotu kontextu, který není aktivní, musíme smazat cache, aby mohly být údaje upraveny. Ta bývá uložena v adresáři /usr/local/var/cache/vservers/dlimits/<xid>/. Ačkoliv není doporučeno připojovat kořenový souborový systém s tagem tagxid, LinuxVServer tuto možnost dovoluje, musíme však spustit jádro s volbou rootflags=tagxid.
4.2 OpenVZ Systém OpenVZ rozlišuje dva případy diskových kvót. První jsou označovány jako kvóty virtuálních serverů nebo kvóty první úrovně. Ty určují kolik diskového prostoru a i-uzlů může virtuální server využít. Druhým případem jsou kvóty uživatelů a skupin označovány neboli kvóty druhé úrovně. Prostřednictvím nich může administrátor VPS nastavit diskové limity pro jednotlivé uživatele nebo jejich skupiny. Kvóty první úrovně jsou narozdíl od kvót druhé úrovně implicitně zapnuté (hodnota DISK_QUOTA v globálním konfiguračním souboru /etc/vz/vz.conf, resp. v konfiguračním souboru VPS /etc/sysconfig/vz-scripts/.conf). Obě úrovně jsou na sobě nezávislé. Jeden blok diskových kvót OpenVZ má velikost 1024 B. Systém si pamatuje změny souborů v diskových oblastech jednotlivých virtuálních serverů. Poznamená si, zda došlo k zápisu na disk VPS. Při vypínání VPS se souborový systém uvede do konzistentního stavu. Dojde-li k výpadku vlastního operačního systému nebo počítače před vypnutím VPS, je pak velikost diskové paměti dopočítána při příštím startu VPS na základě poznamenaného příznaku nekonzistentnosti. Pro diskové kvóty nastavujeme dva typy limitů. Tvrdý, který není možné překročit a měkký, který můžeme dočasně překročit, ale po vypršení nastaveného času není další zápis povolen. Parametry diskových kvót s určením konfiguračního souboru:
21
1. disk_quota – Zapnutí/vypnutí diskových kvót první úrovně. Může být uveden v globálním konfiguračním souboru i v konfiguračním souboru VPS, jehož nastavení má vyšší prioritu.
2. diskspace – Celková velikost diskového prostoru, který může VPS použít v jednokilobytových blocích. Je umístěn v konfiguračním souboru VPS.
3. diskinodes – Celkový počet i-uzlů, které může VPS alokovat. Je umístěn v konfiguračním souboru VPS.
4. quotatime – Čas, po který smí VPS přesáhnout měkký diskový limit, v sekundách. Je umístěn v konfiguračním souboru VPS.
5. quotaugidlimit – Počet uživatelských/skupinových ID, které používají diskové kvóty. Pokud je nastaven na 0, diskové kvóty druhé úrovně nebudou zapnuty. Nenulové číslo označuje počet uživatelů/skupin, kteří smí vlastnit soubory. Je umístěn v konfiguračním souboru VPS. Druhý a třetí parametr mají měkký a tvrdý limit. Při zadávaní jsou uvedeny ve tvaru soft:hard. Následující příklad ilustruje nastavení diskových kvót VPS 101. Přidělíme mu 1GiB paměti (1,1 GiB po dobu maximálně 10 minut) a dovolíme alokovat 90000 i-uzlů (91000 i-uzlů po dobu nejvýše 10 minut). Nastavení trvale uložíme (přepínač --save): # vzctl set 101 --diskspace 1000000:1100000 --save # vzctl set 101 --diskinodes 90000:91000 --save # vzctl set 101 --quotatime 600 --save Aktivace diskových kvót druhé úrovně vyžaduje restartování VPS. Hodnota quotaugidlimit by měla být větší nebo rovna počtu záznamů v /etc/passwd a /etc/group. Nastavení může vypadat takto (s trvalým uložením změn pomocí přepínače -save): # vzctl set 101 --quotagidlimit 100 --save # vzctl stop 101; vzctl start 101 Administrátor příslušného VPS pak může používat utilitu quota standardním způsobem tak, jako by se jednalo o fyzický server. Ke zjištění nastavení diskových kvót můžeme použít utilitu vzquota. Argumentem může být stat pro zjištění kvót běžících VPS a show pro zjištění kvót stojících VPS. Příklad (pro zobrazení kvót druhé úrovně je použit přepínač -t): # vzquota stat 101 -t
22
4.3 Shrnutí Oba systémy nabízejí v oblasti diskových kvót stejné základní funkce a služby, které rozšiřují uživatelské diskové kvóty na celé servery. Zamezují, aby kontexty a VPS zabíraly příliš velký diskový prostor. Linux-VServer nenabízí přímou podporu uživatelských kvót. Správce však může využít standardní utilitu quota, pokud je příslušný kontext umístěn na samostatné diskové oblasti. Pro kontext můžeme nastavit rezervovaný diskový prostor administrátora. Mechanismus kvót OpenVZ umožňuje konfigurovat uživatelské kvóty i pro VE nacházející se na stejné diskové oblasti. OpenVZ implementuje služby pro dočasné překročení měkkých limit první úrovně. Nastavení diskových limit u tohoto systému je jednodušší, nevyžaduje změnu příznaků souborů.
23
5 Nastavení plánovače a přidělení CPU Upravená jádra Linuxu obou systémů byla obohacena o rozšířený plánovač přidělení CPU. Ten nyní musí obsluhovat, jak jednotlivé procesy, tak i virtuální servery. Systémy pro plánovaní přidělení CPU používají technologii Token-bucket. Každému virtuálnímu serveru je přiděleno pouze tolik systémového času, než spotřebuje přidělené tokeny. Konfiguraci lze měnit i za běhu virtuálního prostředí. Nastavení plánovače a přidělení CPU využijeme například ve chvíli, kdy server potřebuje při startu vyšší výkon, než během svého běhu.
5.1 Linux-VServer V Linux-VServeru nastavujeme počet tokenů (fill-rate), které jsou doplněny do bucket za časový interval (fill-interval). Dále můžeme nastavit počáteční, minimální a maximální množství tokenů. Ke správné funkci plánovače musíme sestavit jádro Linux-VServeru s volbou CONFIG_VSERVER_HARDCPU=y. Linux-VServer rozlišuje mezi „tvrdým“ a „měkkým“ limitem plánovače. Virtuálnímu serveru s tvrdým limitem je po vyčerpání tokenů odebrán procesor. Pokud virtuální server vyčerpá svůj měkký limit a na procesor nečeká jiný virtuální server, je tomuto virtuálnímu serveru nastavena velmi nízká priorita, ale může mu být přidělen procesor. Tvrdý limit nastavíme vložením sched_hard do souboru /etc/vservers//flags. Pro měkký limit vložíme do stejného souboru sched_prio. Vlastní nastavení plánovače je uloženo v /etc/vservers//schedule. Tento soubor má šest řádků:
1. 2. 3. 4. 5. 6.
souboru
fill rate – počet tokenů přidělených při jedné obrátce fill interval – délka obrátky v tokenech počáteční množství tokenů minimální množství tokenů maximální množství tokenů prio bias – hodnota, která je připočítána k ostatním hodnotám Po vyplnění může tento soubor vypadat například takto:
7 32 500 200 1000 0 Virtuálnímu serveru je přiděleno 7/32 procesoru, na počátku má k dispozici 500 tokenů, jejich minimální stav je 200 a maximální 1000. Poslední hodnotou je prio bias. Je-li hodnota
24
nenulová, přičte se k ostatním hodnotám. Pokud by v příkladu byla rovna 5, kontext by dostal 12/37 procesoru, měl by při startu k dispozici 505, minimálně 205 a maximálně 1005 tokenů. Nastavení plánovače můžeme změnit i za běhu virtuálního serveru. Použijeme k tomu program vsched z balíku util-vserver. Ten má následující syntax: vsched [--xid <xid>] [--fill-rate ] [--interval ] [--tokens ] [--tokens-min ] [--tokens-max ] [--prio-bias ] [--] [ <args>*] Argumentem volby --xid je kontextové číslo virtuálního stroje. To je možné zjistit pomocí utility vserver-stat. Volby --fill-rate, --interval, --tokens, --tokensmin a --token-max po řadě odpovídají pěti řádkům souboru /etc/vservers//schedule. Program umožňuje nastavit přidělení procesoru i určité aplikaci virtuálního serveru. Tato aplikace je potom posledním argumentem vsched. Změnu nastavení plánování virtuálního serveru s kontextovým číslem 1000 provedeme následovně: # vsched –-xid 1000 --fill-rate 30 --interval 100 \ > --tokens 100 --tokens_min 30 --tokens_max 200 Nastavení plánování programu ls ve virtuálním serveru s kontextovým číslem 1000 změníme například takto: # vsched –-xid 1000 --fill-rate 30 --interval 100 \ > --tokens 100 --tokens_min 30 --tokens_max 200 -- /bin/ls
5.2 OpenVZ Změnu nastavení plánovače procesoru můžeme provést pomocí dvou přepínačů utility vzctl. Pro první možnost použijeme přepínač --cpulimit. Hodnota parametru odpovídá procentu času, po který je procesor přiřazen virtuálnímu serveru a po jehož uplynutí je cpu virtuálnímu serveru odebrán. Odpovídá tedy tvrdému limitu. Chceme-li přidělit virtuálnímu serveru 1919 10% času procesoru, zadáme příkaz následovně: # /usr/sbin/vzctl set 1919 --cpulimit 10% Přidělíme-li virtuálnímu serveru více procesorů (přepínač --cpus utility vzctl s argumentem rovnajícím se počtu přidělených cpu) odpovídá celkový čas cpu násobku počtu procesorů. Například se dvěma procesory má hodnotu 200%.
25
Druhou variantu zvolíme přepínačem --cpuunits. Ten určuje garantovanou hodnotu takzvaných CPU jednotek (tokenů), které budou přiděleny virtuálnímu serveru. Argumentem je kladné nenulové číslo předávané plánovači CPU. Vyšší hodnota zaručuje více času procesoru přiděleného virtuálnímu serveru. Po vyčerpání jednotek nemusí být procesor virtuálnímu serveru odebrán, pokud žádný jiný server na procesor nečeká. Maximální hodnota je 500000, minimální 8. V celém systému se čas procesoru přiděluje podle poměru těchto hodnot pro jednotlivé servery. Implicitní hodnota odpovídá 1000 tokenům. Nastavení potom může vypadat následovně: # /usr/sbin/vzctl set 1919 -–cpuunits 1000 Hodnotu přidělených CPU jednotek --cpuunits můžeme nastavit i pro VE0, tedy samotný hostitelský systém. Přepínačem je --ve0cpuunits a jako číslo VE uvedeme 0. Nastavení tohoto argumentu na příliš nízkou v poměru k hodnotám jiných virtuálních serverů může způsobit nestabilitu celého operačního systému. Autoři doporučují hodnotu mezi 5-10%. Ta se ukládá do souboru /etc/vz/vz.conf (hodnota VE0CPUUNITS) a o její nastavení se stará skript /etc/init.d/vz. Stejně jako u jiných nastavení pomocí utility vzctl jsou nastavené hodnoty implicitně dočasné. Pro jejich trvalé uložení uvedeme přepínač --save. Nastavení se ukládá do souboru /etc/sysconfig/vz-scripts/.conf (hodnoty CPUUNITS a CPULIMIT).
Aktuální hodnoty CPU jednotek zjistíme utilitou vzcpucheck. Jejím výstupem je hodnota spotřebovaných jednotek všemi virtuálními servery a VE0 a maximální možný „výkon“ systému: # vzcpucheck Current CPU utilization: 6667 Power of the node: 73072.5
5.3 Shrnutí Oba systémy umí přidělovat CPU podle spotřebovaných tokenů. OpenVZ umí přidělovat procesor i na základě času v sekundách. Toto nastavení můžeme upravit i v Linux-VServeru pomocí utilit správy výpočetních zdrojů. Přidělení na základě reálného času může být však zavádějící a může záviset na okolnostech. Jeho využívání proto není doporučeno. Výhodou systému CPU i pro hostitelský systém.
OpenVZ
je
možnost
úpravy
konfigurace
přidělování
Naproti tomu prostřednictvím Linux-VServer můžeme měnit konfiguraci plánovače pro spouštěný proces uvnitř kontextu z hostitelského systému. Podobnou službu paravirtualizační nástroje nenabízí, tato patří mezi hlavní výhody Linux-VServeru. Linux-VServer rozlišuje měkký a tvrdý limit. Tvrdý přiděluje CPU procesu maximálně po uvedenou dobu, měkký po vyčerpání tokenů pouze snižuje prioritu. Limit implementovaný v OpenVZ odpovídá měkkému limitu Linux-VServeru.
26
6 Správa výpočetních zdrojů Velmi důležitou součástí administrace virtuálních serverů je správa výpočetních zdrojů. Dovoluje změnit limity či upravit přidělení například virtuální paměti serveru, a to i za běhu. Můžeme tedy dynamicky snížit i zvýšit přidělené množství zdroje. Podobnou úpravu v takové míře nejrozšířenější paravirtualizační nástroj XEN neumožňuje. Linux-VServer i OpenVZ nabízejí utility pro změnu měkkých a tvrdých limitů výpočetních zdrojů, kde tvrdý limit je horním mantinelem rozsahu nastavení měkkého limitu. Tvrdý (hard) limit bývá nastaven z vně virtuálního serveru, měkký (soft) limit je umožněno změnit i privilegovaným procesům příslušného serveru.
6.1 Linux-VServer Linux-VServer rozšiřuje přidělování výpočetních zdrojů z procesů na celé kontexty. Mechanismus vychází z limitů, které můžeme nastavit ve standardním linuxovém prostředí.
6.1.1 Standartní linuxové limity výpočetních zdrojů V následující tabulce je uveden seznam standardních linuxových výpočetních zdrojů. Sloupce mají tento význam: •
ID – číslo zdroje
•
Jméno – označení zdroje
•
proc-fs – označení užívané v /proc/virtual/*/limit
•
ulimit – přepínač pro utilitu ulimit
•
jednotka – odpovídající jednotka
•
popis – textový popis zdroje
27
ID
Jméno
proc-fs ulimit jednotka
popis
0
CPU
-t
ms
Čas CPU
1
FSIZE
-f
KiB
Maximální velikost souboru
2
DATA
-d
KiB
Maximální velikost datového segmentu
3
STACK
-s
KiB
Maximální velikost zásobníku
4
CORE
-c
KiB
Maximální velikost souboru core
5
RSS
RSS
-m
page
Maximální Resident set size
6
NPROC
PROC
-u
1
Maximální počet procesů
7
NOFILE
FILES
-n
1
Maximální počet otevřených souborů
8
MEMLOCK
VML
-l
page
Maximální locked-in-memory adresový prostor
9
AS
VM
-v
page
Maximální adresový prostor
LOCKS -x
1
Maximální počet držených souborových zámků
-i
1
Maximální počet čekajících signálů
12 MSGQUEUE MSGQ -q
Byte
Maximum bajtů v POSIX mqueues
13 NICE
1
Maximální možná hodnota nice prio
1
Maximální realtime priorita
10 LOCKS 11 SIGPENDING
14 RTPRIO
-r
Tabulka 1: Linuxové limity výpočetních zdrojů 6.1.2 Limity Linux-VServeru Linux-VServer rozšiřuje jádro o limity uvedené v následující tabulce: ID
Jméno
proc-fs
jednotka
popis
15 NSOCK
SOCK
1
Maximální počet otevřených soketů
16 OPENFD
OFD
1
Maximální počet otevřených FD
17 ANON
ANON
page
Maximální velikost anonymous memory
18 SHMEM
SHM
page
Maximální velikost sdílené paměti
19 SEMARY
SEMA
1
Maximální počet polí semaforů
20 NSEMS
SEMS
1
Maximální počet semaforů
21 DENTRY
DENT
1
Maximální počet struktur dentry
Tabulka 2: Limity Linux-VServeru Rozlišují se dva typy limitů. Hard limit nastaví hranici, kterou z pohledu virtuálního serveru nelze překonat. Soft limit je hranice nižší nebo rovna hard limitu a pouze privilegované procesy (s povolenou CAP_SYS_RESOURCE capability) jsou oprávněny tento limit změnit. Linuxové limity (vycházející z SVr4, 4.3BSD, POSIX.1-2001) pro virtuální prostředí můžeme měnit v konfiguraci virtuálního serveru. Vytvoříme odpovídající soubor v adresáři /etc/vservers/vserver-name/rlimits. Možné limity jsou: cpu, fsize, data, stack, core, rss, nproc, nofile, memlock, as a locks. Ostatní limity v současných verzích systému není možné
28
upravit. Každý soubor omezuje právě jeden z těchto zdrojů. Může se však vyskytovat ve čtyřech podobách: •
název_zdroje – Obsahuje hard- a soft-limit zdroje.
•
název_zdroje.hard – Obsahuje hard limit zdroje.
•
název_zdroje.soft – Obsahuje soft limit zdroje.
•
název_zdroje.min – Obsahuje minimální garantovanou hodnotu zdroje. Namísto konkrétní hodnoty je možné použít speciální slovo inf, které značí neomezený
zdroj. U běžcích kontextů pro změnu limitů využijeme utilitu vlimit. Její základní syntax je následující: # vlimit -c xid [-a] [[-H|M|S] --resource value] •
Přepínač -c označuje kontextové číslo.
•
Přepínač -a vypíše všechny dostupné limity.
•
Přepínač -H označuje hard limit, -S soft limit a -M minimální garantovanou hodnotu zdroje.
•
--resource značí zdroj a value jeho hodnotu.
Zdroje, které je možné nastavit utilitou vlimit jsou: cpu, fsize, data, stack, core, rss, nproc, nofile, memlock, as, locks, msgqueue, nsock, openfd, anon, shmem, semary, nsems a dentry. Linuxové limity SIGPENDING, NICE a RTPRIO nelze pro kontexty omezit.
6.1.3 Paměťové limity Pro správnou funkčnost paměťových limitů je nutné, aby měl kontext statické číslo. Paměťových limitů se týkají zdroje as a rss. •
Resident Set Size (rss) je počet stránek, které jsou k dispozici v RAM.
•
Address Space (as) je celkový počet stránek, které jsou namapovány v každém procesu kontextu.
Pokud virtuální server přesáhne hard limit rss, OOM killer vybere a zabije proces. Soft limit rss je zobrazen jako maximální dostupná paměť. Po překročení hard limitu as není žádný proces zabit, systém pouze ohlásí chybu. Soft limit as není v současné implementaci využit. Pro správné zobrazování volné paměti z pohledu kontextu musíme vložit do souboru /etc/vservers//flags řádek virt_mem. Rozdílný význam mají hard a soft limit při zvýšení jejich hodnoty. Zvýšíme-li limit rss nad původně zvolenou hodnotu jako hard, je rozdíl vrácen ke swap. Pokud jej zvýšíme jako soft limit, je paměť navrácena k volné RAM.
29
6.2 OpenVZ Parametry pro přidělované systémové prostředky virtuálním serverům OpenVZ můžeme rozdělit do tří kategorií: primární, sekundární a pomocné. Primární slouží k základnímu nastavení a omezení přídělení systémových prostředků. Sekundární jsou na nich závislé. Pomocné pomáhají izolovat běžící aplikace uvnitř VPS a určují způsob, jakým mají aplikace zpracovávat chyby a jakým jim mají být přiděleny systémové prostředky. Tím také umožní nastavit administrátorská pravidla pro spouštěné aplikace. Celkový koncept parametrů OpenVZ je velmi složitý a neprůhledný. Administrátor si musí být vědom, jakého cíle chce dosáhnout, jinak systém nemusí být stabilní. V kontextu OpenVZ je měkký limit označován jako bariéra (barrier) a tvrdý limit jako limit (limit). Následující seznam uvádí systémové prostředky, které můžeme omezit. Jejich hodnoty jsou ukládány v lokálním souboru nastavení VPS /etc/sysconfig/vzscripts/.conf: Primární parametry: •
avnumproc – Průměrný počet procesů a vláken
•
numproc – Maximální počet procesů a vláken, které smí VPS vytvořit.
•
numtcpsock – Maximální počet TCP soketů. Omezíme tak počet klientů, které může server obsloužit.
•
numothersock – Maximální počet jiných než TCP soketů
•
vmguardpages – Maximální počet stránek, které jsou aplikaci běžící ve VPS zaručeny.
Sekundární parametry: •
kmemsize – Velikost neswapované paměti alokované jádrem. Vztahuje se k počtu procesů (numproc). Každý zabírá minimálně 24 KiB, typicky 40 – 60 KiB, avšak i mnohem více. Pokud bude kmemsize nastaven na příliš nízkou hodnotu, nemusí být pro všechny procesy dostačující.
•
tcpsndbuf – Celková velikost bufferů pro posílání TCP soketů. Rozdíl tvrdého a měkkého limitu by měl být větší nebo roven 2,5 KiB násobku numtcpsock. 2,5 KiB odpovídá minimální velikost TCP soketu v systému.
•
tcprcvbuf - Celková velikost bufferů pro přijímání TCP soketů. Rozdíl tvrdého a měkkého limitu by měl být větší nebo roven 2,5 KiB násobku numtcpsock. 2,5 KiB odpovídá minimální velikost TCP soketu v systému.
•
othersockbuf – Velikost bufferů pro posílání jiných než TCP soketů. Rozdíl tvrdého a měkkého limitu by měl být větší nebo roven 2,5 KiB násobku numothersock. 2,5 KiB odpovídá minimální velikost TCP soketu v systému.
30
•
dgramrcvbuf – Velikost bufferů pro přijímání jiných než TCP soketů. Parametr závisí na numothersock. Jeho hodnota nemusí být příliš vysoká v případě, že VPS nebude často posílat velmi velké datagramy.
•
oomguarpages – Takzvaná záruka out-of-memory ve stránkách. Pokud nedojde k vážnému nedostatku paměti, nebude zabit žádný proces, jestliže je současné využití paměti nižší, než měkký limit tohoto parametru. Vztahuje se k vmguardpages.
•
privvpages – Velikost privátní paměti alokované aplikací. Do toho parametru není započítaná paměť, která je sdílena více procesy. Vychází z vmguardpages.
Pomocné parametry: •
lockedpages – Neodswapovatelná paměť ve stránkách.
•
shmpages – Celková velikost sdílené paměti (včetně objektů tmpfs, IPC, ...) alokované procesem VPS ve stránkách
•
numfile – Počet souborů otevřených všemi procesy VPS
•
numflock – Počet souborových zámků vytvořených procesy VPS
•
numpty – Počet pseudoterminálů, například sezení ssh, screen, xterm
•
numsiginfo – Počet struktur siginfo, omezuje velikost fronty signálů
•
dcachesize – Velikost záznamů dentry a záznamů o i-uzlech uzamčených v paměti
•
physpages – Celková velikost využité RAM. Jedná se o informativní parametr. Jeho hodnota bude využívána při zobrazování volné paměti programy ps, top, ...
•
numiptent – Počet záznamů filtru IP paketů
Nastavení těchto parametrů je možné změnit přímo konfiguračním souborem nebo pomocí utility vzctl. Příklad ukazuje změnu nastavení měkkého i tvrdého limitu s trvalým uložením změn: # vzctl set 101 --kmemsize 2211840:2359296 –-save Nastavení limit systémových zdrojů můžeme uvnitř každého VPS získat ze souboru /proc/user_beancounters. Soubor obsahuje aktuální a maximální „zatížení“ zdrojů, bariéru a limit pro každý zdroj. V hardwarovém uzlu tento soubor obsahuje informace napříč všemi VPS. Využití paměti můžeme zjistit pomocí utility vzmemcheck: # vzmemcheck -v Output values in % veid LowMem LowMem RAM MemSwap MemSwap Alloc Alloc Alloc util commit util util commit util commit limit 101 0.19 1.93 1.23 0.34 1.38 0.42 1.38 4.94 1 0.27 8.69 1.94 0.49 7.19 1.59 2.05 56.54
31
Parametrem -v odmítneme zobrazení informací o hardwarovém uzlu. Chceme-li zobrazit absolutní informace v MiB namísto podílů, použijeme přepínač -A. Sloupec util značí využití daného systémového prostředku. Sloupec comit značí, kolik prostředků systém „slíbil“ VPS. Správu systémových prostředků můžeme provádět následujícími způsoby:
1. Pomocí konfiguračních souborů - Při vytváření VPS je pro konfiguraci přidělení systémových prostředků použit soubor ve-name.conf-sample. Standardně jsou k dispozici dva soubory: ve-light.conf-sample – pro vytvoření VPS s limitami ve-vps.basic.conf-sample – pro vytvoření VPS s běžným nastavením Tyto soubory je možné použít i pro změnu nastavení již existujících VPS. Jsou zachovány pouze parametry OSTEMPLATE (označení distribuce), VE_ROOT (adresář se soubory běžícího VPS) a VE_PRIVATE (adresář se soubory zastaveného VPS). Pokud chceme například aplikovat nastavení souboru ve-light.conf-sample: # vzctl set 101 --applyconf light --save
2. Za pomocí speciálních utility vzctl. 3. Přímým
editováním konfiguračního scripts/VPS_ID.conf.
souboru
/etc/sysconfig/vz-
6.2.1 Rovnoměrné rozdělení výkonu hardwarového uzlu Utility systému OpenVZ umožňují vytvoření několika VPS, každého výkonnostně odpovídajícího určitému zlomku hardwarového uzlu. Pro vytvoření konfiguračního souboru pro 20 ekvivalentních VPS použijeme následující příkazy: # cd /etc/sysconfig/vz-scripts/ # vzsplit -n 20 -f vps.equaltest Tím je vytvořen konfigurační soubor ve-vps.equaltest.conf-sample. Tento soubor je potřeba validovat utilitou vzcfgvalidate. Tato utilita kontroluje konfigurační soubor a nabízí doporučení k jeho úpravám.
6.2.2 Validace konfiguračního souboru Mezi hodnotami přidělení jednotlivých systémových prostředků existují důležité závislosti. Vzhledem k jejich počtu a složitosti je velmi obtížné zkontrolovat, zda nedošlo k vážnému narušení těchto provázaností. K tomuto účelu je určena utilita vzcfgvalidate: # vzcfgvalidate /etc/sysconfig/vz-scripts/101.conf Error: kmemsize.bar should be > 1835008 (currently, 25000) Recommendation: dgramrcvbuf.bar should be > 132096 (currently, 65536) Recommendation: othersockbuf.bar should be > 132096 (currently, 65536) Utilita zobrazuje porušení závislostí:
32
•
Recommendation – Jde o doporučení, jak upravit nastavení, které pro VPS a hardwarový uzel není kritické, za předpokladu, že má operační systém dostatek paměti. Konfiguraci je možné použít.
•
Warning – Konfigurace je chybná. VPS a její programy nemusí mít dostatek prostředků pro správný běh.
•
Error – Konfigurace je nepoužitelná. Systém není schopen zajistit dostatečné systémové prostředky pro běh VPS.
6.3 Shrnutí Linux-VServer vychází a rozšiřuje standardní linuxové omezení výpočetních zdrojů. Správce tak pracuje s mechanismy, na které je zvyklý. Naproti tomu OpenVZ implementuje vlastní systém limitů a vztahů mezi nimi. Oba projekty však umí v podstatě omezit stejné zdroje. Poněkud zvláštní je pomocný přepínač OpenVZ physpages, který určuje jaká hodnota má být ve VPS zobrazena jako volná paměť. Jeho hodnota se tak může lišit od skutečné volné paměti, která je pro VPS nastavena. Programy jako ps v kontextech Linux-VServeru zobrazují skutečnou volnou paměť kontextu. Linux-VServer umožňuje nastavit minimální garantovanou hodnotu pro každý zdroj. OpenVZ dovoluje garantované hodnoty pouze pro určité zdroje. OpenVZ nabízí nástroje pro zkontrolování nakonfigurovaných limitů podle vnitřních souvislostí. Pokud konfigurační soubor projde testem, nemělo by dojít k selhání nebo nefunkčnosti příslušného virtuálního serveru. Prostřednictvím těchto nástrojů můžeme rozdělit výkon hardwarového uzlu na stejně výkonné jednotky. Systémy umožňují na rozdíl od paravirtualizačních nástrojů dynamické změny hodnot všech limitů. Tato vlastnost patří k největším výhodám užívání virtualizace na úrovni jádra. Linux-VServer ani OpenVZ prozatím neobsahují nástroj pro monitorování aktivity a využívání systémových prostředků virtuálních serverů. Oba projekty však takové utility vyvíjejí.
33
7 Virtuální systém /proc Virtuální systém /proc obsahuje vždy informace k virtuálnímu serveru, v němž se nachází. Z bezpečnostních důvodů je v tomto systému omezena viditelnost souborů a adresářů. Virtuální servery tak nemohou sledovat údaje o ostatních běžících serverech a nemůže dojít k jejich vzájemnému ovlivnění. Neviditelnost některých položek však nemusí být žádoucí, protože mohou být nutné pro běh některých programů a serverů (například démon souborového systému AFS vyžaduje přístup k /proc/fs/nfs/exports). V Linux-VServeru proto můžeme viditelnost upravit.
7.1 Linux-VServer V systému jsou implicitně viditelné následující soubory a adresáře: cpuinfo kmsg crypto loadavg devices locks execdomains meminfo filesystems misc interrupts modules iomem mounts ioports net kcore pci Systém povoluje změnu viditelnosti.
self slabinfo stat swaps sys sysvipc tty uptime version
7.1.1 Nastavení viditelnosti v /proc Systém ochran implementuje tři příznaky: admin, watch a hide. K vypsání nebo nastavení jsou nutné utility showattr resp. setattr. Následující tabulka ukazuje význam příznaků: Příznak Význam admin
Vždy viditelný v hostitelském serveru
watch
Vždy viditelný ve virtuálním serveru
hide
Skrytý
Tabulka 3: Příznaky viditelnosti souborů v proc-fs V následující tabulce jsou vypsány možnosti použití (a – admin, w – watch, h – hidden; málý znak – vypnutí volby, velký znak – zapnutí volby):
34
Příznak Viditelnost **h
Viditelné odkudkoliv
AwH
Viditelné pouze v hostitelském serveru
aWH
Viditelné pouze ve virtuálním serveru
AWH
Viditelné v kontextu v hostitelském serveru i ve virtuálním serveru
awH
Neviditelné, nezvratné bez restartování systému
Tabulka 4: Nastavení příznaků viditelnosti v proc-fs Standardně je viditelnost nastavena na A W H. Utilita showattr může mít například na souboru /proc/interrupts následující výstup: Awh-ui- /proc/interrupts Jednou z možností, jak změnit nastavení příznaků, je spuštění utility setattr z hostitelského serveru s odpovídajícími parametry. Znak ~ před příznakem značí vypnutí tohoto příznaku. Například ke zpřístupnění /proc/loadavg odkudkoliv: # setattr --~hide /proc/loadavg (Příznaky admin a watch mohou být nastaveny jakkoliv.) Abychom zabránili virtuálním serverům číst informace o přerušení, zamezíme jim v přístupu k souboru /proc/interrupts. Aby byl viditelný pouze z hostitelského serveru, nastavíme příznaky následovně: # setattr --hide --admin --~watch /proc/interrupts Změny provedené utilitou settattr jsou dočasné a platné pouze do restartu virtuálního serveru. Pro trvalé nastavení viditelnosti, tedy vypnutí příznaku hide, slouží soubor /etc/vservers/.defaults/apps/vprocunhide/files. Jeho vytvořením nahradíme nastavení ze souboru /usr/lib/util-vserver/defaults/vprocunhide-files. Vložíme do něj soubory a adresáře, u kterých chceme změnit viditelnost. Například změnu viditelnosti /proc/fs/nfs/exports provedeme zapsáním následujících řádků: /proc/fs/ /proc/fs/nfs/ /proc/fs/nfs/exports Chceme-li nějaký soubor z přístupného adresáře zneviditelnit, uvedeme cestu k tomuto souboru do /etc/vservers/.defaults/apps/vprocunhide/files za znak –. K nastavení viditelnosti při startu systému slouží skript /usr/local/etc/init.d/vprocunhide.
7.2 OpenVZ OpenVZ rozšiřuje standardní systém linuxový proc-fs o vlastní soubory sloužící ke správě VPS. Podadresář vz obsahuje souhrnné informace o běžícím VPS, například číslo VPS, IP adresu
35
a informace o diskových kvótách. Soubor user_beancounters obsahuje informace o limitách systémových prostředků, včetně jejich aktuálních stavů. Jsou viditelné tyto položky: cmdline meminfo sysvipc cpuinfo modules uptime filesystems mounts user_beancounters fs net version kmsg self vmstat loadavg stat vz locks sys Systém neumožňuje úpravu viditelnosti souborů a adresářů.
7.3 Shrnutí Oba systémy omezují viditelnost položek v proc-fs. Soubory, které jsou viditelné, byly zvoleny autory projektů jako bezpečné. Viditelnost by neměla být z tohoto důvodu rozšiřována, avšak některé programy a démony vyžadují přístup k implicitně neviditelným položkám. Linux-VServer, narozdíl od OpenVZ, změnu viditelnosti umožňuje. Nové nastavení se projeví ve všech virtuálních serverech.
36
8 Zařízení v adresáři /dev Oba projekty nabízí jiné položky přístupné implicitně v adresáři /dev, stejně jako jiné
přístupy k vytváření dalších speciálních souborů.
8.1 Linux-VServer Po instalaci základní kostry systému obsahuje virtuální server následující položky: full log null ptmx
pts random tty urandom
zero
Vytvoření dalších souborů není z virtuálního serveru možné. V kontextech není povolena capability CAP_MKNOD ani pro uživatele root a samotný Linux-VServer nenabízí nástroj, který by byl obdobou mknod. Speciální soubory lze vytvářet pouze z hostitelského systému.
8.2 OpenVZ Viditelnost speciálních souborů se mění podle konfigurace počítače. Obecně jsou vytvořené soubory a adresáře: console log ram core mem random fd null shm full port tty initctl ptmx urandom kmem pts zero OpenVZ umožňuje vytváření dalších speciálních souborů prostřednictvím svých utilit.
8.2.1 Vytváření speciálních souborů Zařízení v adresáři /dev ve VPS zpřístupníme z hardwarového uzlu pomocí utility vzctl: # vzctl set VPS_ID --devnodes device:r|w|rw|none --save Příkaz zpřístupní zařízení device s přístupovými právy (r – čtení, w – zápis, rw – čtení a zápis, none – žádný přístup) s trvalým uložením změn v konfiguraci (parametr --save). Další možností je povolení capability CAP_MKNOD ve VPS z hostitelského serveru: # vzctl set VPS_ID --capability CAP_MKNOD:on --save Poté je možné ve VPS vytvářet speciální soubory pomocí mknod. Tato volba však může být možnou bezpečnostní slabinou.
37
8.3 Shrnutí V této oblasti zvolili autoři obou systémů rozdílný přístup. Zatímco Linux-VServer volí poměrně konzervativní metodu vytváření speciálních souborů pouze z hostitelského systému pomocí mknod, OpenVZ ponechává nastavení odpovídající capability CAP_MKNOD ve VPS na administrátoru systému. OpenVZ také umožňuje trvalé uložení pravidel vytváření speciálních souborů.
38
9 Sdílení souborových systémů Pro připojení dalších souborových systémů, které budou sdíleny více virtuálními servery, využívají OpenVZ a Linux-VServer utilitu mount s volbou --bind. Máme-li například v případě Linux-VServeru na hostitelském systému připojenou diskovou oblast v adresáři /mnt/disk, kterou chceme zpřístupnit i z virtuálního serveru test, můžeme ji připojit do adresáře tohoto serveru /vservers/test/mnt/disk. Zadání příkazu mount pak může vypadat takto: # mount -–bind /mnt/disk /vservers/test/mnt/disk Použití v případě OpenVZ je obdobné.
9.1 Shrnutí Systémy pro sdílení souborových systémů nezavádějí nové funkce, ale využívají již existující utilitu Linuxu mount.
39
10 Unifikace souborového systému V případě, že provozujeme více stejných nebo alespoň podobných virtuálních serverů, zbytečně uchováváme více instancí stejných souborů. Linux-VServer nabízí řešení, kterou je unifikace.
10.1 Linux-VServer Původní návrh autorů Linux-VServeru předpokládá snížení celkové zátěže systému kdekoliv je to možné. Proto od verze 2.1.0 Linux-VServer implementuje mechanismus, který šetří místo zabrané virtuálním serverem na pevném disku. Algoritmus vychází z faktu, že všechny virtuální servery spustitelné pod Linux-VServerem jsou linuxovými distribucemi, které se navzájem příliš neliší nebo jsou naprosto shodné. Jednotlivé virtuální servery používají mnohokrát stejné programy, knihovny a jiné soubory, jejichž obsah se nemění příliš často, avšak jsou uloženy na pevném disku vícekrát. Pokud bychom použili služby, které nám poskytují pevné odkazy na soubory, mohli bychom ušetřit značný diskový prostor. Linux-VServer poskytuje mechanismus, který umí automaticky vyhledat shodné soubory v jednotlivých virtuálních serverech a vytváří pevné odkazy takových souborů do speciálního adresáře. Tímto se z pohledu hostitelského systému snižuje využitá paměť pevného disku. Autoři systému rozšířili služby jádra tak, aby nedošlo k nechtěným nebo záměrným modifikacím nebo smazáním sdílených souborů. Taková chyba uživatele jednoho virtuálního serveru by ovlivnila chování a funkce ostatních serverů. Tyto služby dovolují označit soubory jako copy-on-write. Souboru je přidán příznak IMMUTABLE-LINK-INVERT. Pokud takový soubor pozměníme, zkopíruje se sdílený soubor do privátního prostoru uživatelova serveru a ten pracuje s vlastní kopií tohoto souboru. Při mazání dojde k odstranění pevného odkazu. Proces vytváření těchto pevných odkazů se nazývá unifikace. Obvyklá velikost virtuálního serveru je přibližně 500MiB. Deset takových serverů po unifikaci zabírá dohromady okolo 700MiB[17]. Soubory jsou porovnávány na základě hašovací funkce, která vychází z názvu, velikosti a obsažených dat. Jejich velikost musí být větší, než 16B. Pravidla jsou pro soubory, které nemají být unifikovány, určena pro všechny virtuální servery společně. Uvádíme je v souboru /usr/lib/util-vserver/defaults/vunify-exclude. Na každý řádek zapíšeme adresář, který nemá být unifikován. Pokud uvedeme podadresář nebo soubor takového adresáře se znakem + , pak unifikován bude. Adresář či soubor na řádku začínajícím znakem - unifikován nebude. Příklad vytvoření adresáře pro unifikovaný souborový systém: # mkdir -p /etc/vservers/.defaults/apps/vunify/hash # ln -s /vservers/.hash /etc/vservers/.defaults/apps/vunify/hash/0 Pro každý virtuální server, který má být unifikován provedeme: # mkdir -p /etc/vservers//apps/vunify
40
# vserver hashify
10.2 Shrnutí Funkce implementovaná pouze v Linux-VServeru využívá pevných odkazů na soubory. Vyhledává identické soubory napříč všemi kontexty, uchová pro každý nalezený pouze jednu jeho instanci a vytvoří se na něj tvrdé odkazy z ostatních serverů. Při zápisu se soubor zkopíruje do privátní oblasti kontextu. Výrazně tak snižuje prostorovou zátěž sekundární paměti. V OpenVZ se s podobnou službou nepočítá.
41
11 Změna runlevel Oba systémy přistupují odlišně ke změně implicitní runlevel, ve které se má virtuální server spustit nebo která má ukončit systém.
11.1 Linux-VServer Autoři systému zvolili změnu runlevel pouze z hostitelského systému. Na změnu v konfiguračních souborech uvnitř kontextu se nebere ohled.
11.1.1 Změna startovacího a ukončovacího skriptu Chceme-li zvolit jinou startovací a ukončovací runlevel virtuálního serveru, vložíme její číslo do souboru runlevel.start resp. runlevel.stop v adresáři /etc/vserver//apps/init/. Standardně se používá runlevel 3 pro start a 6 pro vypnutí systému. Například: # echo "4" > /etc/vservers/vserver-name/apps/init/runlevel.start
11.2 OpenVZ Runlevel můžeme změnit jako uživatel root ve VPS. Změnu tedy můžeme provést stejně jako v nevirtualizovaném prostředí. Například startovací runlevel upravíme v souboru /etc/inittab.
11.3 Shrnutí Oba projekty volí opět dvojí přístup. Konzervativní v podobě Linux-VServeru, který nedovoluje úpravu runlevel z virtuálního serveru, a liberální OpenVZ, který umožňuje správci VPS upravit runlevel podle potřeby.
42
12 Přiložené Live-CD Linux-VServeru Přílohou této bakalářské práce je cd s live distribucí Linuxu, která obsahuje instalaci LinuxVServeru se dvěma jednoduchými virtuálními servery, u nichž je možné měnit nastavení plánovače CPU, přidělení systémových zdrojů a migraci procesů z hostitelského kontextu. Nemůžeme však využít unifikaci, diskové kvóty, migraci kontextů, síťové funkce a trvale měnit nastavení virtuálních serverů.
12.1 Postup tvorby live distribuce Pro sestavení distribuce byly použity upravené build-scripts pro jádro 2.6.20 a skripty linux live 6.0.7 z projetku Linux Live scripts1. Všechny použité skripty a patche pro úpravu jádra jsou součástí CD v adresáři tools. Ukázkový systém je postaven na jádru 2.6.20, systému Fedora Core 5, Linux-VServeru verze vs2.2.0-rc21 a util-vserver 0.30.212. Základem virtuálních serverů server1 a server2 byla distribuce Fedora Core 5. Upravené Build-scripts dekomprimují zdrojové texty jádra a všechny potřebné soubory do adresáře /usr/src, aplikují související patche, včetně Linux-VServeru a jádro zkompilují. Použijí konfigurační soubor jádra .config umístěný v adresáři kernel-live. Sestavené jádro a jeho moduly jsou umístěny do adresáře /tmp/2.6.20. Jeho obsah zkopírujeme do připraveného adresářového stromu s distribucí s instalovaným Linux-VServerem. Nutnou součástí stromu musí být utilita chroot. Pro vytvoření iso obrazu použijeme linux live 6.0.7. Cestu k předpřipravené adresářové struktuře, název distribuce a verzi jádra nastavíme v souboru .config v hlavním adresáři skriptů. Skript build sestaví výslednou strukturu CD standardně do adresáře /tmp/live_data_$$, kde $$ je náhodné číslo. Spustíme-li poté z podadresáře mylinux této složky skript make_iso.sh, vytvoříme iso obraz distribuce. Každý adresář výsledného systému je na CD komprimován utilitou mksquashfs. Celý adresářový strom získáme dekomprimací všech souborů adresáře Live CD /LinuxVServerlive/base utilitou unsquashfs z podadresáře /tools adresáře skriptů linux live. Například dekomprimaci souboru etc.lzm do adresáře /tmp/distro-root/ provedeme příkazem: # unsquashfs -d /tmp/distro-root //etc.lzm Po úpravách můžeme pomocí linux live opět vytvořit iso obraz CD, pouze v konfiguračním souboru skriptů ./.config nastavíme cestu k adresářovému stromu distribuce.
1
http://www.linux-live.org/
43
13 Budoucí vývoj Linux-VServer i OpenVZ prochází velmi rušnou fází vývoje. S každou verzí se zvyšuje jejich funkčnost. V této kapitole se zaměříme na plány vývojářů a cestu, kterou by se jejich projekty měly ubírat.
13.1 Linux-VServer •
Od verze 2.3+, která je hlavní vývojovou verzí by systém měl podporovat IPv6. Stejná verze by měla opustit původní linuxové kvóty a přijít se zcela novým řešením.
•
V budoucnu by měla být implementována podpora virtuálních síťových zařízení v každém kontextu. V současné době již testovací verze umožňují využití loopback rozhraní virtuálních serverů.
•
Od verze 2.0.2 probíhají úpravy pro spuštění systému OpenVPN1.
•
V budoucí verze util-vserver by měly umožnit provozovat Linux-VServer v LinuxVServeru, tedy nainstalovat util-vserver do kontextu a vytvořit v něm nový virtuální server.
•
Pravděpodobně již od verze 2.3+ by se měla objevit funkce pro vymazání kontextu.
•
Autoři uvažují nad zavedením prioritního přístupu k souborovému systému, k němuž by pak každý z kontextů směl přistupovat jen po určený čas.
•
Do balíku utilit bude přidán nástroj pro snadnou kontrolu a nastavení systémových prostředků pro jednotlivé kontexty.
13.2 OpenVZ Vývoj systému OpenVZ závisí na vývoji komerčního prostředí Virtuozzotm. Z této skutečnosti plyne i zastaralá verze jádra podporovaná projekty, neboť nové verze prochází dlouhou certifikací. Jádra Virtuozzotm prochází dlouhou fází testování a pro SWSoft není žádoucí, aby sesterský projekt podporoval novější jádra. Na druhou stranu vývojáři obou projektů vzájemně spolupracují a lze předpokládat, že implementované návrhy se objeví v obou nástrojích. U OpenVZ se počítá s následujícími úpravami:
1
•
Upravené jádro by mělo být možné provozovat i v systémech VMware a XEN.
•
Systém by měl podporovat VPN.
•
Autoři chtějí vytvořit jednoduchý instalátor a konfigurační nástroj.
•
VPS bude možné sestavit také za pomocí nástrojů apt a smartrpm.
•
Do balíčku utilit bude přidán monitor aktivity serverů vycházející z ps a top.
http://www.openvpn.net
44
Závěr Úkolem této bakalářské práce byla analýza použitelnosti a možnosti nasazení nástrojů virtualizace na úrovni jádra operačního systému pro potřeby ÚVT MU a porovnání dvou zástupců této kategorie – Linux-VServeru a OpenVZ. Jelikož dokumentace k oběma produktům není dostačující, slouží tato práce jako průvodce instalací, konfigurací a správou obou systémů. Ačkoliv oba systémy prochází fází intenzivního vývoje, v některých oblastech mohou konkurovat paravirtualizačním nástrojům, jako je například XEN, zvláště pokud provozujeme více linuxových serverů. Předností nástrojů je velmi snadná dynamická změna konfigurace přidělování systémových zdrojů virtuálním serverům. Užitečnou funkcí, kterou se projekty přibližují možnostem XEN i v oblasti, kde byl tento nástroj dlouho dominantní, je migrace virtuálního na jiný fyzický stroj. Klienti využívající jeho služby zaznamenají pouze krátký výpadek. Linux-VServer umožňuje spouštění procesů ve virtuálním prostředí z hostitelského systému. Podobnou funkci jiné virtuální nástroje neobsahují. Unifikace kontextů Linux-VServeru je mechanismus, který u jiných typů virtualizace není implementován. Napříč kontexty vyhledává identické soubory a pomocí principu pevných odkazů sníží celkový obsazený diskový prostor zabraný virtuálními servery. OpenVZ umožňuje také nastavit síťovým zařízením virtuálních strojů MAC adresu. Umí pracovat s IPv6 a pro každý VPS podporuje loopback a multicast. Referenční instalace Linux-VServer a OpenVZ byla provedena na stroj školitele. Ke každému systému byly sestaveny a zkonfigurovány dva virtuální servery. Instalace slouží k prezentaci funkcí, služeb a nastavení nástrojů. V současnosti nelze jednoznačně říci, který z obou systémů je kvalitnější. Oba projekty nabízejí v podstatě stejné funkce a stejné mechanismy. Pro použití Linux-VServeru na ÚVT rozhodla podpora novějších jader a novějšího hardware. Autoři OpenVZ nabízí lepší, avšak stále slabou, dokumentaci. Každá utilita má své manuálové stránky, což je výhodou pro začátečníka. Konfigurace byla, až na omezení výpočetních zdrojů, jednodušší. Podle postupu instalace a konfigurace popsaných v této práci byl Linux-VServer nainstalován na dva počítače Manwe projektu METACentrum[20]. Rozhodující volbou byla podpora novějšího hardware Linux-VServeru. Počítače disponují osmi dvoujadernými procesory 64 GiB RAM a čtyřmi Gbps Ethernet rozhraními[21]. Projekt OpenVZ se stal součástí distribucí Mandriva[22][23] a Debian[24]. Linux-VServer je základem celosvětové výzkumné sítě PlanetLab[25], která se v současnosti skládá z téměř 800 uzlů na více než 350 fyzických strojích. Účelem projektu je výzkum nových síťových technologií. Nasazení OpenVZ a Linux-VServeru v praxi značí, že oba nástroje již mají dostatečnou kvalitu pro plnohodnotné nasazení, které také pomůže jejich dalšímu rozvoji.
45
Seznam použité literatury 1: E. C. Hendricks and C. Hartmann T., Evolution of a virtual machine subsystem, 1979, url: březen 2007, http://www.research.ibm.com/journal/sj/181/ibmsj1801H.pdf 2: Timothy R. Butler, bochs: The Open Source IA-32 Emulation Project, duben 2007, http://bochs.sourceforge.net/ 3: Sebastian Biallas, PearPC - PowerPC Architecture Emulator, duben 2007, http://pearpc.sourceforge.net/ 4: Fabrice Bellard, QEMU - Open Source Processor Emulator, duben 2007, http://www.qemu.org/ 5: Jay Maynard, The Hercules System/370, ESA/390, and z/Architecture Emulator, duben 2007, http://www.hercules-390.org/ 6: Virtual Iron Software, Inc., Server Virtualization and Virtual Infrastructure Management , duben 2007, http://www.virtualiron.com/ 7: VMware, Inc., Virtualization, Virtual Machine & Virtual Server Consolidation, duben 2007, http://www.vmware.com/ 8: Win4Lin Inc., Powerful Virtual Machine Software for Linux, duben 2007, http://www.win4lin.com/ 9: University of Cambridge Computer Laboratory, The Xen™ virtual machine monitor, duben 2007, http://www.cl.cam.ac.uk/research/srg/netos/xen/ 10: XEN Source, Paravirtualization, březen 2007, http://xensource.com/products/xen/paravirtualization.html 11: LinuxVirt, TechComparison, březen 2007, http://virt.kernelnewbies.org/TechComparison 12: www.wikipedia.org, FreeBSD jail, duben 2007, http://en.wikipedia.org/wiki/FreeBSD_Jail 13: www.wikipedia.org, Solaris Containers, duben 2007, http://en.wikipedia.org/wiki/Solaris_Containers 14: SWsoft, Virtuozzo Server Virtualization, duben 2007, http://www.swsoft.com/en/products/virtuozzo/ 15: SWsoft, OpenVZ, duben 2007, http://openvz.org 16: Linux-VServer, Linux-VServer, duben 2007, http://Linux-VServer.org 17: Stephen Soltesz, Herbert Potzl, Marc E. Fiuczynski, Andy Bavier, and Larry Peterson, Container-based Operating System Virtualization:A Scalable, High-performance Alternative to Hypervisors, duben 2007, http://wireless.cs.uh.edu/presentation/2006/07/Container.pdf 18: www.wikipedia.org, Virtualization, duben 2007, http://en.wikipedia.org/wiki/Virtualization 19: OpenVZ, Introduction to virtualization, březen 2007, http://wiki.openvz.org/Introduction_to_virtualization 46
20: Cesnet, Projekt METACentrum, duben 2007, http://meta.cesnet.cz/cs/about/meta.html 21: Cesnet, Počítače, duben 2007, http://meta.cesnet.cz/cs/resources/hardware.html#manwe 22: Mandriva, Specifications, duben 2007, http://www.mandriva.com/en/linux/corporate/server/specifications 23: SWsoft, Mandriva First Linux to Include Operating System-Level Virtualization Technology, duben 2007, http://openvz.org/news/announcements/mandriva-20060526 24: SWsoft, Debian Linux Adopts OpenVZ Virtualization Software, duben 2007, http://openvz.org/news/announcements/debian-20060803 25: The Trustees of Princeton University, PlanetLab - An open platform for developing, deploying, and accessing planetary-scale services, duben 2007, http://www.planet-lab.org/
47