Jak nainstalovat virtualizovaný stroj na GlusterFS
GlusterFS je škálovatelný distribuovaný síťový souborový systém, určený pro velká datová úložiště. Aktuálně patří do portfolia produktů fy. Red Hat (stejně jako Ceph, do kterého se dostal tím že Red Hat v r. 2011 spolkl společnost Gluster (založenou v r. 2005) která s jeho vývojem začala. Lze dynamicky zvětšovat, nebo zmenšovat jeho kapacitu, podobně je tomu u LVM, ovšem s tím rozdílem, že základním prvkem zde není lokální blokové zařízení, ale souborové systémy vzájemně komunikujících strojů.
Pro virtualizaci jej lze použít pouze v linuxovém prostředí. A to dvěma způsoby:
- GlusterFS svazek je připojený na virtualizační stroj přes FUSE klienta a uložený disk je předán qemu stejným způsobem, jako by šlo o lokálně uložený soubor s virtuálním diskem.
- Přípojný nod se předá i s cestou k souboru s virtuálním diskem na GlusterFS svazku přímo na příkazové řádce qemu
První způsob sebou prakticky nepřináší žádné výhody. Spíše naopak, neboť musíme zajistit aby vždy přes spuštěním virtualizovaného stroje byl GlusterFS svazek úspěšně namountován.
Druhý způsob je z hlediska využití mnohem zajímavější, neboť umožňuje spuštění virtuálního stroje na libovolném stroji a pokud je qemu zkompilované s podporou sekundárního nodu, lze do určité míry zajistit i bezvýpadkový provoz.
Příprava pro vytvoření GlusterFS svazku
Aby bylo možné využívat snapshotování GlusterFS svazku, musíte použít LVM (thin provisioning), který umožňuje tvořit tzv. virtuální thin LV oddíly. Ty se od normálních LV oddílů liší tím, že nemají pevně daný rozsah extentů, ale jejich extenty mohou být rozptýleny libovolně v rámci tzv. poolu - což je speciální typ LV oddílu, který má kromě datových extentů vyhrazeny extenty také pro metadata. Což jsou v podstatě seznamy jednotlivých extentů.
LVM skupina ThinGroup se zakládá úplně stejně jako běžná LVM skupina. V ní lze pool s názvem ThinData o velikosti 400 tis. extentů, ve kterém se budou zakládat další LV oddíly vytvořit takto:
root@nod-1~# lvcreate -l 400000 --type thin-pool --thinpool ThinData ThinGroup
|
V našem prostředí využíváme pro přípravu bricků budoucího GlusterFS svazku Puppet. Bricky jsou thin LV oddíly, vytvořené v rámci poolu ThinData, LVM skupiny ThinGroup. Každý LV oddíl se jmenuje podle názvu budoucího virtuálního stroje. V následujícím ukázkovém kódu je demonstrováno založení GlusterFS svazku mapserver
, virtualizovaného stroje mapserver.
Výše uvedená deklarace Puppetu na každém z nodů automaticky založí a naformátuje thin LV oddíl. V prostředí, kde nejsou nody spravované přes Puppet, je třeba na každém z nodů provést následující operace:
root@nod-1~# lvcreate --thinpool ThinGroup/ThinData --virtualsize 100G -n mapserver
...
root@nod-1~# mkfs.btrfs -L mapserver /dev/mapper/ThinGroup-mapserver
...
root@nod-1~# mkdir /srv/mapserver
|
A do souboru /etc/fstab
přidat následující řádek, kterým zajistíme automatické připojení LV oddílu po restartu..
LABEL=mapserver /srv/mapserver btrfs nodatacow,autodefrag 0 2
|
Před vytvořením GlusterFS svazku je třeba zajistit, aby byl LV oddíl na všech nodech připojený a pokud si chcete ušetřit problémy s atributy na přípojném bodu, doporučuji vytvořit na připojeném LV oddíle podadresář.
root@nod-1~# mount /srv/mapserver
root@nod-1~# mkdir /srv/mapserver/data
|
Vytvoření GlusterFS svazku
Náš GlusterFS svazek mapserver je replikovaný na třech nodech. Tzn. na každý z nich se replikuje stejný obsah. To dává poměrně vysokou záruku pro zachování dat případě havárie disku či nodu jako takového, neboť prakticky lze v případě nutnosti použít rovnou soubor s virtuálním diskem z libovolného bricku.
Nakopírování již vytvořeného vrtuálního disku
Nejjednodušším způsobem, jak dostat virtuální stroj do GlusterFS svazku, je ho nakopírovat do GlusterFS svazku namountovaného na některém z nodů:
root@nod-1~# mount -t glusterfs nod-1:/mapserver /mnt
|
V ukázkovém příkladu je GlusterFS svazek mapserver namountován do přípojného bodu /mnt
na nodu nod-1. Virtuální disk stroje mapserver, připravený jinde do něj nakopíruje po síti.
Založení nového virtuálního disku
Máme-li GlusterFS svazek namountován, tak jak bylo demonstrováno v předchozím ukázkovém příkladu, lze s ním pracovat jako s lokálním diskem. Takže můžeme pomocí utility qemu-img vytvořit virtuální disk disk.img
a do něj pak systém nainstalovat.
root@nod-1~# qemu-img create -f qed /mnt/disk.img 50G
Formatting '/mnt/disk.img', fmt=qed size=53687091200 cluster_size=65536
|
Při instalaci pak postupujeme, jak je popsáno v kapitole KVM (spuštění virtuálního stroje)
Nový virtuální disk však lze založit nejenom na GlusterFS svazku namountovaném přes FUSE, ale rovnou přes API GlusterFS, se kterým pracuje 'qemu-img:
root@nod-1~# qemu-img create -f qed gluster://snoopy/mapserver/disk.img?s2=linus 50G
Formatting 'gluster://snoopy/mapserver/disk.img?s2=linus', fmt=qed size=53687091200 cluster_size=65536
|
- Připojení image přes loop - s podporou diskových oddílů
- Připojení image přes nbd - s podporou diskových oddílů