Jak nainstalovat virtualizovaný stroj na GlusterFS

From DCEwiki
Revision as of 16:33, 7 July 2015 by Keny (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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ů.

direction a suivre 3 yve 01.svgČíst dále..

Pro virtualizaci jej lze použít pouze v linuxovém prostředí. A to dvěma způsoby:

  1. 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.
  2. 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:

Poznámka
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.

Poznámka
...
    thinlvm2::volume { "mapserver" :
        group      => 'ThinGroup',
        pool       => 'ThinData',
        size       => '100G',
        format     => 'btrfs',
        mountpoint => '/srv/mapserver',
        options    => 'nodatacow,autodefrag',
        ensure     => 'present',
    }
...

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:

Poznámka
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..

Poznámka
LABEL=mapserver      /srv/mapserver       btrfs   nodatacow,autodefrag        0       2
Poznámka Použití návěští souborového systému LABEL pro připojení má následující výhody:
  1. Nezáleží na tom, jaké je jméno zařízení, které mu přiřadí při startu jádro
  2. Lze stejný řádek použít na všech nodech (což by v případě použití UUID, nebo jména zařízení nešlo)

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ář.

Poznámka
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.

Poznámka
root@nod-1~# gluster volume create mapserver replica 3 transport tcp nod-1:/srv/mapserver/data nod-2:/srv/mapserver/data nod-3:/srv/mapserver/data
volume create: mapserver: success: please start the volume to access data
root@nod-1~# gluster volume set mapserver network.ping-timeout 5
volume set: success
root@nod-1~# gluster volume start mapserver
volume start: mapserver: success

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ů:

Poznámka
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.

Poznámka
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:

Poznámka
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, vytvoření tabulky rozdělení oddílů, naformátování oddílu, nakopírování dat (použití debootstrap), instalace zavaděče
  • Připojení image přes loop - s podporou diskových oddílů
  • Připojení image přes nbd - s podporou diskových oddílů

loop

NBD