Jak na OpenVZ

Jak na OpenVZ
21.12.2008 23:55 | Recenzie programov | Pavel Šnajdr
OpenVZ je pokročilá virtualizační technologie na úrovni jádra systému. V principu se podobá FreeBSD Jails, nebo kontejnerům v Solarisu. Vytváří v jednom systému, na jednom hardwaru několik oddělených prostředí, která mají svojí distribuci, svoje procesy, paměťový prostor a uživatele. V tomto článku si ukážeme, jak tuto technologii využít.

Představte si, že jsme správci pěti linuxových serverů v malé síti o necelých dvou stech uživatelů. Jelikož nebyly při zakládání těch serverů peníze, jsou sestaveny z desktopového a krajně nespolehlivého postaršího hardwaru. Nyní máme na výběr – postupně upgradovat tyto servery na malinko novější, protože na pět nových serverů prostě nejsou peníze, nebo můžete koupit jeden spolehlivý server, který vyjde cenově rozhodně levněji než pět počítačů. Předpokládejme, že se rozhodneme koupit jeden (relativně) výkonný server, ale nechceme na něm provozovat všechny služby najednou, ať už kvůli přehlednosti, nebo třeba pro to, že chceme, aby se o jednotlivé služby staral pokaždé jiný správce dané služby. V tuhle chvíli nás napadá, že by bylo fajn nějak tu jednu mašinu rozsekat na několik dílčích. V tom nám pomůže fenomén dnešní doby – virtualizace.

Ohledně virtualizace máme na výběr z několika možností, hrubě by se daly rozdělit takto: Virtualizace počítače včetně hardwaru (plná virtualizace) – ať už úplná simulace, nebo jakési „propůjčení hardwaru“ virtuálnímu stroji Virtualizace na úrovni jádra.

Obě možnosti mají své výhody, ale i nevýhody. Co se týče první možnosti, většinou (když opomenu paravirtualizaci), máme svobodu ve volbě operačního systému hosta. Na druhou stranu, jsou zde značné výkonové ztráty, jak při výpočtových, tak při I/O operacích. Druhá možnost oproti tomu nabízí mnohem větší výkon, ale za cenu společného jádra všech virtuálních strojů.

A protože našich pět serverů bylo stavěno na Linuxu, volíme z hlediska výkonu druhou možnost.

Situace jaderné virtualizace dnes by se dala rozdělit na dva konkurenční výtvory:
  • Linux-Vserver
  • OpenVZ

Oba tyto produkty potřebují patchované jádro (lguest v hlavní řadě jádra se mi nejeví zatím jako použitelný). Linux-Vserver upravuje a využívá dosavadních schopností jádra, jako chroot, a obaluje některé funkce pro přístup k paměti, procesům a podobně, kdežto OpenVZ si implementuje chroot svůj, stejně jako další funkce. Takto se dá chroot i quota používat i v jednotlivých virtuálních prostředích. Technologie OpenVZ má podle mě mnohem více možností, stabilnější a více vyvíjená, zaměříme se tedy na ni. Řekli jsme si, že virtuální prostředí – v terminologii OpenVZ jsou to Virtual Environments – VEs – sdílí společné jádro, ale distribuce jednotlivých VE se mohou lišit. My na našich pěti serverech používáme výhradně Debian Stable/Etch, byť jsou dostupné další, jako CentOS, Fedora, Ubuntu, Slackware. Jednotlivým VE můžeme přidělovat a omezovat paměť, diskové místo, procesorový výkon a mnohé další. Zajímavostí je, že každé VE můžeme kdykoliv zmrazit a přenést na jiný fyzický stroj se stejným jádrem (stejnou verzí OpenVZ v jádře). V tomto seriálu si postupně ukážeme, jak vytvořit našich pět serverů, nastavit jim výpočetní prostředky, připojit je k síti a rozběhat na nich SSH.

Instalace Debianu

Jelikož budeme instalovat server od úplného začátku, musíme si objasnit pár věcí dopředu. Za prvé cílovou architekturu. My jsme si pro virtualizaci koupili server s moderními vícejádrovými procesory x86_64, použijeme tedy 64bitovou x86 verzi Debianu; doporučuji stahovat image debian-40r5-amd64-businesscard.iso (33MB), nebudeme toho na hlavní stroj instalovat tolik, aby bylo potřeba stahovat celá DVD. Za druhé je potřeba si ujasnit rozdělení disků. Instalací Debianu Vás provedu jenom letmo, věřím, že s ní máte zkušenosti.

Nabootujeme CD, zvolíme jazyk (není nutné, pokud chcete šetřit místem, můžete zvolit C), Při rozdělování disků doporučuji myslet na spolehlivost (některý RAID) a rozšiřitelnost (LVM2), doporučuji také vytvořit separátní oddíl pro data jednotlivých VE, ty jsou umístěny v /var/lib/vz/.

Při výběru balíků doporučuji zvolit jenom Základní systém – Standard systém (C-lokalizace), víc toho v hlavním nodu nebude potřeba.

Instalace OpenVZ

Tak, předpokládám, že základní Debianní systém máme funkční, nainstalujeme tedy samotné OpenVZ. Funkční OpenVZ se skládá z opatchovaného kernelu a user-space utilit. Naštěstí existuje pro Debian repozitář s předkompilovanými jak utilitami, tak VZ-kernelem.

Ten si do systému přidáme takto:

# echo -e "\ndeb http://download.openvz.org/debian-systs etch openvz" >> /etc/apt/sources.list
# wget -q http://download.openvz.org/debian-systs/dso_archiv_signing_key.asc -O- | apt-key add - && apt-get update

Nyní nainstalujeme kernel a utility:

# apt-get install fzakernel-2.6.18-amd64

Vše potřebné se přidá jako zavislost na virtuálním balíku fzakernel-2.6.18-amd64, je dostupný také kernel fzakernel-2.6.18-686 a fzakernel-2.6.18-686-bigmem. Po instalaci restartujeme systém.

Nyní potřebujeme nakopírovat soubory tzv. „templates“, tedy „vzorů“, jedná se o minimální instalace jednotlivývh distribucí. V repozitáři OpenVz pro Debian jsou dostupné balíky s templates pro Debian 4.0 Stable/Etch a Debian 5.0 Testing/Lenny. Jejich jména jsou: vzctl-ostmpl-4.0-amd64-minimal a vzctl-ostmpl-5.0-amd64-minimal, respektive vzctl-ostmpl-4.0-i386-minimal, vzctl-ostmpl-5.0-i386-minimal.

Na následující adrese naleznete několik dalších templates pro různé distribuce:
http://wiki.openvz.org/Download/template/precreated

Daný archiv je potřeba nakopírovat/stáhnout do adresáře /var/lib/vz/template/cache/.

Tak, teď nám nic nebrání vytvořit první VE, první virtuální stroj. K se správě, vytváření a mazaní VE slouží utilita vzctl. Každé virtuální prostředí, VE, je jednoznačně identifikováno svým číslem, VEID.

Příkaz pro vytvoření VE „test1“ s VEID např. 1 při použití template Debian Etch:

Vytvoření VE a nastavení

# vzctl create 1 --ostemplate debian-4.0-amd64-minimal --hostname test1

Tak, nastavíme parametry VE 1, děje se tak opět pomocí utility vzctl, nezapomeňme vždycky přidat parametr --save, aby se změny, které přenastavením uděláme, uložily.

Heslo uživatele root na „heslo“

# vzctl set 1 --save --userpasswd root:heslo

Limit RAM na 1GB

# vzctl set 1 --save --privvmpages 1024M

Limit diskového prostoru na 10GB

# vzctl set 1 --save --diskspace 10G

Limit CPU na max. 50%

Závisí na počtu procesorů, udává se v %, maximální počet procent je 100% pro jednoprocesorový systém, pro náš čtyřjádrový systém to bude 400%, pokud chceme tedy povolit maximálně polovinu výpočetní kapacit pro VE 1, musíme nastavit cpulimit 200%.

# vzctl set 1 --save --cpulimit 200%

Povolení Iptables modulů pro použití ve VE 1

Můžeme povolit následující moduly Iptables:

iptable_filter, iptable_mangle, ipt_limit, ipt_multiport, ipt_tos, ipt_TOS, ipt_REJECT, ipt_TCPMSS, ipt_tcpmss, ipt_ttl, ipt_LOG, ipt_length, ip_conntrack, ip_conntrack_ftp, ip_conntrack_irc, ipt_conntrack, ipt_state, ipt_helper, iptable_nat, ip_nat_ftp, ip_nat_irc, ipt_REDIRECT, xt_mac, ipt_owner

# vzctl set 1 --save --iptables moduly

Síťování

Je na výběr ze dvou variant, první je jednoduché peer-to-peer spojení s hostitelským systémem, druhá je vytvoření plnohodnotného síťového zařízení, jak na straně hosta, tak hostitele, obě síťovky se pak tváří jako spojené kabelem.

Peer-to-peer

Výhodou je jednoduchost, ale přicházíme tím o pokročilé možnosti konfigurace síťování. IP adresu přidáme našemu VE takto:

# vzctl set 1 --save --ipadd 192.168.1.2

Můžeme jich přidat několik. Když budeme chtít některou z nich odebrat, použijeme příkaz: # vzctl set 1 --save –ipdel 192.168.1.2

Síťové zařízení

Syntaxe příkazu vypadá takto:

# vzctl set 1 --save --netif_add jmeno_zarizeni_host [, mac_host, jmeno_zarizeni_hostitel, mac_hostitel, bridge]

Postupně:
Jméno zařízení a MAC adresa na straně VE,
Jméno zařízení a MAC adresa na straně hostitelského systému
Jméno síťového mostu, jehož konfiguraci řídí startovací skripty OpenVZ, do kterého má být síťovka na straně hostitele přidána. Je nutné nainstalovat balík bridge-utils.

Odebrání síťovky provedeme následovně:

# vzctl set 1 --save –netif_del jmeno_zarizeni_host

nebo všechny síťovky najednou:

# vzctl set 1 --save –netif_del all

Síťování – ostatní parametry

Hostname:

# vzctl set 1 --save --hostname hostname

Jmenný server:

# vzctl set 1 --save --nameserver ip_adresa

Prohledávaná doména:

# vzctl set 1 --save --searchdomain domena

Zjištění stavu

Vypsat všechny běžící VE můžeme takto:

# vzlist

Podívat se, jakou část prostředků spotřebovává dané VE se dá následovně:

# vzcalc VEID

Závěrečná konfigurace

Jsme ve fázi, kdy můžeme konečně vstoupit dovnitř do VE 1 a nastavovat, nejdřív jej ale musíme spustit:

# vzctl start 1
# vzctl enter 1

Pokud jme zvolili plnohodnotná síťová zařízení, nastavíme síťování v souboru /etc/network/interfaces, můžete použít následující vzor, pokud si nevíte rady.

Pro veth:

auto eth0
iface eth0 inet static
        address 10.0.0.33
        netmask 255.255.255.0
        network 10.0.0.0
        broadcast 10.0.0.255
        gateway 10.0.0.1
Pro venet:

auto venet0:0
iface venet0:0 inet static
	address 10.0.0.33
	netmask 255.255.255.0
	etwork 10.0.0.0
	broadcast 10.0.0.255
	gateway 10.0.0.1

Smazání VE

Nejprve musíme daného hosta zastavit:

# vzctl stop 1

Poté ho smažeme:

# vzctl destroy 1

Pokročilé vlastnosti OpenVZ

Checkpointing

Kdykoliv za běhu můžeme udělat tzv. checkpoint, uložení stavu VE, jeho procesů, fronty přenosů a dalších stavových proměnných. Ten spolu se zálohou aktuálního souborového systému VE můžeme použít k obnovení okamžitého stavu VE.

# vzctl chkpnt VEID --dumpfile <cesta>
# vzctl restore VEID --dumpfile <cesta>

Migrace VE mezi různými HW stroji

K těmto účelům slouží nástroj vzmigrate, který se o kompletní přenost zvládne postarat sám, bez nutnosti zastavování přenášeného VE, lze jej tedy použít i pro běžící systém. Vzmigrate přenese celý obraz a zajistí kompletní migraci přes ssh, je tedy potřeba aby na cílovém HW stroji běželo nakonfigurované OpenVZ a byl spuštěn server SSH. Rovněž je potřeba mít nainstalován klient ssh na aktualním HW stroji. Je potřeba zmínit, že vzmigrate nijak nehýbe s nastavením síťování uvnitř VE, je tedy nutné při přenosu mezi různými sítěmi ošetřit změnu adres, brány a DNS.

Migraci potom provedeme takto:

# vzmigrate [-r] [--ssh=volby_ssh] [--keep-dst] [--online] [-v] cílová_adresa VEID

Volby:
-r smaže zdrojový systém po úspěšné migraci
--ssh=volby_ssh jsou volby předané klientu ssh
--keep-dst zachová přenesená data v cílovém systému v případě nějaké chyby. To je užitečné při přenášení velkého množství dat.
--online značí přenos za chodu, tj. nulový čas odstávky
-v zapne upovídan režim
cílová adresa je asdresa systému, na který se bude přenášet
VEID je ID přenášeného hosta

příklad přenosu VE 1 na stroj 192.168.1.3 za chodu:

# vzmigrate --online 192.168.1.3 1

Závěrem

V tomto článku jsme si ukázali základní ovládání OpenVZ, nyní byste měli být schopní si postavit vlastní konsolidační řešení. Někdy příště si můžeme ukázat třeba jak postavit webové rozhraní pro OpenVZ, nebo další technologie, jako Linux-Vserver; pokud bude zájem.

Mali by ste záujem o pokračovanie?

100 %
2 %
    • Bez technických detailů 22.12.2008 | 01:21
      Avatar Pavel Šnajdr Debian  Používateľ
      Omlouvám se těm, kteří by rádi věděli, jak to funguje;
      chtěl jsem napsat co nejpřímočařeji jak to rozchodit a nezatěžovat čtenáře detaily.
      Pokud by měl někdo zájem, můžu o tom někdy napsat víc.
      • Re: Bez technických detailů 22.12.2008 | 02:54
        Avatar Samuel BWPOW Kupka CentOS, Mandriva  Používateľ
        Jo, rozhodne zajem je.
        Strach dát najevo své pocity a zjednat si u druhých respekt je jedním z problémů civilizovaného člověka, který se naučil zpochybňovat svou vlastní pravdu pro zdání objektivity
      • Re: Bez technických detailů 22.12.2008 | 20:10
        Avatar lime Debian, Red Hat, Fedora Core 3  Používateľ
        Vyzera to dobre, kludne pokracuj.
        Prejdite z modrej obrazovky k linuxu :))
      • Re: Bez technických detailů 22.12.2008 | 21:19
        Avatar samox86 arch, debian  Administrátor
        super clanok :)
        pred par mesiacmi som zvolil xen, je openvz menej narocne na hardware ?
        lnx.sk - virtualne servery; Lnx@Lnx.sk
        • Re: Bez technických detailů 22.12.2008 | 22:14
          Avatar Pavel Šnajdr Debian  Používateľ
          Určitě, neřeknu ti přesně o kolik, ale už z principu, že ti běží na hardwaru jenom jedno jádro, to vyplývá.
          • Re: Bez technických detailů 27.12.2008 | 01:00
            Avatar Tomáš Lehocký Lubuntu  Používateľ
            Zdravím

            Neviem možno sa mýlim - ale nebeží aj na xene len jedno jadro?

            tomolc
            tomolc
            • Re: Bez technických detailů 27.12.2008 | 14:40
              Avatar samox86 arch, debian  Administrátor
              ahoj. nie, na xen-e mas dom0 jadro pre zakladny system a kazda virtualka ma svoje domU jadro (obycajne jadro, akurat jedina podmienka ze musi mat v sebe povolenu podporu pre xen)
              lnx.sk - virtualne servery; Lnx@Lnx.sk
              • Re: Bez technických detailů 27.12.2008 | 15:05
                Avatar Tomáš Srnka Barz čo, už asi všetko  Administrátor
                to plati pre para-virtualizaciu, akonahle mas pod xenom plnu virtualizaciu, tak kazdy system si berie svoje jadro, ale to plati pre akukolvek technologiu (vmware, virtualbox, KVM atd).
                Dlho som robil linuxos.sk, neskôr založil vpsFree.cz, posledných pár rokov ako tech. riaditeľ vo Websupporte
                • Re: Bez technických detailů 27.12.2008 | 17:20
                  Avatar Tomáš Lehocký Lubuntu  Používateľ
                  OpenVZ je teda z tohto pohladu výkonnejšie?

                  tomolc
                  tomolc
                  • Re: Bez technických detailů 30.12.2008 | 15:56
                    Avatar Pavel Šnajdr Debian  Používateľ
                    Z tohohle pohledu rozhodně, režije OpenVZ se puhybuje v jednotkách procent.
      • Re: Bez technických detailů 23.12.2008 | 03:37
        luzr   Návštevník
        Privital by som blizsi popis instalacie systemu bez vyuzitia templates. Ako sa chova migracia ziveho systemu? Da sa to aj bez diskoveho pola? Nedochadza k nekonzistencii dat?
        • Re: Bez technických detailů 23.12.2008 | 11:14
          Avatar Pavel Šnajdr Debian  Používateľ
          Ok, instalaci bez template probereme v dalším článku, stejně jako detaily, jak openvz funguje. Nemůžu slíbit, kdy přesně to bude, mám teď dost jiných věcí, bež je psaní článku.
          K migraci: vzmigrate se nestará o vrstvy pod souborovým systémem, je tedy jedno co bude pod doporučeným ext3. K nekonzistenci dat by mohlo dojít, v podobě nedokončeného požadavku na uložení nějakých dat; když hrozí něco takového, nedoporučuju migraci za běhu VE. Ale pokud probíhají jenom nějaké procesy uvnitř, k nekonzistenci dat nedojde, jelikož těsně před migrací dojde k jakémusi "zmražení" stavu.
    • ktoru variantu siete? 29.12.2008 | 19:56
      Avatar milossramek kubuntu, debian  Používateľ
      Rad by som sa spytal k vyberu variantu siete:
      "Je na výběr ze dvou variant, první je jednoduché peer-to-peer spojení s hostitelským systémem, druhá je vytvoření plnohodnotného síťového zařízení, jak na straně hosta, tak hostitele, obě síťovky se pak tváří jako spojené kabelem."

      Vlastne mi nie je jasne, aky je tu vlastne rozdiel. Preco vlastne by som mal to"plnohodnotne" zariadenie potrebovat?

      Nad nejakou formou virtualizacie uz dlhsie rozmyslam. Ide mi o oddelenie viacerych sluzieb - ak pokazim jednu, nech ostatne funguju dalej. Mam vsak k dispozicii len jednu IP-cku. Da sa system nakonfigurovat tak, ze napr. sluzba
      www.example.com/sluzba1 bude bezat v prvom VE, sluzba2 v druhom a tak podobne? Pripadne na VE3 bude bezat www.example.com:8088 a na VE4 www.inadomena.sk? Ak ano, budes o tom pisat?


      Este jedna otazka - VE maju instalovany vlastny operacny system? Alebo zdielaju ten zakladny? Alebo nejaky zaklad zdielaju a zvysok maju vlastny?

      Vopred vdaka
      milos
      • Re: ktoru variantu siete? 30.12.2008 | 15:58
        Avatar Pavel Šnajdr Debian  Používateľ
        Rozdíly pro běžné alikace jsou zanedbatelné, veth se může hodit, když potřebujete dělat psí kusy jako nastavovat MTU, mít svojí MAC adresu a podobně.
        VE mají svůj souborový systém stylem jakoby chrootu ve filesystemu hosta. Mají svojí nainstalovanou distribuci.
      • Re: ktoru variantu siete? 30.12.2008 | 16:00
        Avatar Pavel Šnajdr Debian  Používateľ
        Při jedné IP musíš použít NAT a forwardovat jednotlivé porty na veřejnou IP hosta. OK, pokud máš zájem, můžu o tom napsat. Jenom opravdu nevím kdy to budu mít hotové, mám toho teďka fakticky moc.
    • ina verzia 08.01.2009 | 16:16
      stavbar   Návštevník
      nasiel som inu verziu

      http://www.abclinuxu.cz/serialy/virtualizace-na-urovni-jadra
    • spokojnost nadovsetko :D 06.02.2009 | 21:56
      hahiho   Návštevník
      naozaj velmi dobry podrobny navod instalacie ze som ho zvladol i ja :D
      sietovanie som sice robil podla ineho navodu lebo ten tu popisany sa mi nedarilo ani po asi styroch hodinach spojazdnit, a chcel som aby kazde VE malo svoju ip.
      jedina nevyhoda tohto programu je nemoznost instalacie virtualneho windowsu
      ale i tak vrela vdaka