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.
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.
pred par mesiacmi som zvolil xen, je openvz menej narocne na hardware ?
Neviem možno sa mýlim - ale nebeží aj na xene len jedno jadro?
tomolc
tomolc
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.
"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
VE mají svůj souborový systém stylem jakoby chrootu ve filesystemu hosta. Mají svojí nainstalovanou distribuci.
http://www.abclinuxu.cz/serialy/virtualizace-na-urovni-jadra
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