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ů.
Použití
GlusterFS je velmi variabilní a jeho výkon, spolehlivost a kapacita závisí nejenom na hardwarové konfiguraci strojů, ale také na jejich počtu a propustnosti sítě a síťových prvků.
Při návrhu GlusterFS úložiště je třeba vzít v úvahu tyto faktory:
- Jaké jsou možnosti sítě
- Jaký máme k dispozici hardware
- Jaké si můžeme dovolit finanční náklady
V současné době jsou parametry běžných pracovních stanic na takové úrovni, že není nezbytně nutné investovat pro sestavení GlusterFS úložiště do hyper extra výkonných a spolehlivých serverů.
K vytvoření velkého úložiště lze docela dobře využít běžných kancelářských desktopů, ovšem při patřičném zohlednění určitých omezení
- Propustnost sítě
- Dnes se jsou 1Gbitové ethernetové karty zcela běžnou výbavou základních desek. Aby však při komunikaci serverů mohl být využity, musí tomu odpovídat také síťové prvky - kabeláž a switche. Jejich ceny jsou dnes již poměrně přijatelné. Pokud byste chtěli mít síť o propustnosti vyšší, tak už musíte jít minimálně do 10Gbitového ethernetu, kde se ceny pohybují v řádech desetitisíců a u ještě rychlejšího InfiniBandu, v řádech statisíců.
- Kapacita a rychlost disků
- V současné době nezbývá než řešit dilema - zajistit kapacitu menším množstvím velkých, ale pomalých i když poměrně laciných, rotačních disků? Nebo pořídit větší množstvím menších, za to rychlých SSD disků? Větší množství pevných disků sebou přináší další náklady - je třeba pořídit drahé řadiče a také zajistit dostatečné napájení. Za jistý kompromis z hlediska rychlosti lze považovat hybridní SSHD zařízení. Rozhodně se jim však nevyplatí příliš důvěřovat. Nové technologie sice přinesly větší kapacity, ale vykazují větší poruchovost - a zajistit uspokojivou redundanci dat znamená další náklady na hardware.
- Počet serverů
- Vyšší počet serverů umožňuje získat velkou úložnou kapacitu. Také se tím zlepšuje výkon GlusterFS z hlediska přístupových rychlostí k souborům. Ovšem každý stroj má svoje energetické nároky. Aby byl GlusterFS kdykoliv dostupný, musí být udržován pokud možno stále v chodu. Každý pevný disk, každá síťová karta, ale i každý síťový prvek si ukousne svůj díl el. energie. Naštěstí většina moderních strojů má v sobě zabudované mechanismy, které zajišťují snížení odběru el. energie, pokud není stroj zatížený. U strojů zavřených v klimatizované serverovně je třeba také připočítat nároky na el. energii spojené s chlazením.
Instalace
Instalace GlusterFS serveru je u Debianu triviální, neboť je součástí oficiálních repositářů.
apt-get install glusterfs-server
Aktuálně ( tj. k lednu 2015 ) tímto příkazem dojde k nainstalování GlusterFS verze 3.5.2
Verze distribuovaného souborového systému GlusterFS nejsou zpětně kompatibilní a jeho aktualizace nemusí být bezproblémová, proto pokud chcete nainstalovat poslední stabilní verzi GlusterFS (3.6.2), tak musíte použít buď oficiální repozitář Debianu experimental, nebo použít instalační balíčky dostupné v repozitářích webu gluster.org |
Anatomie /var/lib/glusterd
/var/lib/glusterd/
|- geo-replication/
\- gsyncd_template.conf
|- glusterd.info
|- glustershd/
| |- glustershd-server.vol
| \- run/
|- groups/
|- hooks/
|- nfs/
| |- nfs-server.vol
| \- run/
|- options
|- peers/
|- quotad/
|- snaps/
| \- missed_snaps_list
\- vols\
|- <jméno svazku>/
| |- <jméno svazku>.<ip serveru>.<cesta do adresáře (místo lomítek pomlčky)>.vol
| |- ...
| |- trusted-<jméno svazku>-fuse.vol
| |- <jméno svazku>-fuse.vol
| |- quota.conf
| |- quota.cksum
| |- snapd.info
| |- info
| |- rbstate
| |- node_state.info
| \- run/
\- ...
Vytvoření TSP
Vytvoření TSP (Trusted Storage Pools) se na první pohled podobá vytvoření Volume Group u LVM, pouze s tím rozdílem, že se místo lokálních fyzických blokových zařízení PV do skupiny přidávají celé servery. Jejich zařazením ale, na rozdíl od Volume Group, nevzniká žádný datový prostor, který by se následně přerozdělil na logické disky.
Lokální server, ze kterého se začnou do TSP zařazovat další stroje, je automaticky jeho součástí. Každý další se přidá zcela jednoduše:
root@nod1 :~# gluster peer probe SERVER
Pokud se při této operaci vyskytne nějaký problém, tak je třeba zkontrolovat zda..
- Utilita nslookup vrací správně doménové jméno stroje
- V souborech /etc/hosts na serverech jsou v pořádku všechny záznamy. Hodně problémů totiž bývá zaviněno právě špatným záznamem v tomto souboru, proto se moc nedoporučuje jeho využití.
- Je port 24007 průchozí? Ověřit zda je spojení průchozí můžete dotazem přes telnet
- Běží na lokálním i vzdáleném serveru démon pro glusterfs?
Problém se síťovu komunikací při pokusu o přidání serveru je indikován jako chyba č.107 Viz příklad:
root@nod1 :~# gluster peer probe 192.168.0.2
peer probe: failed: Probe returned with unknown errno 107
|
Aby mohl GlusterFS pracovat, musí mít povolené následující porty:
- TCP 24007
- Používá pro svou komunikaci GlusterFS démon
- TCP 24008
- Využívá Infiniband, pokud není k dispozici, tak tento port nemusí být využitý
- TCP 24009 a výše
- Používá pro bricky GlusterFS verze 3.3 a menší
- TCP 49152 a výše
- Používá pro bricky GlusterFS verze 3.4 a vyšší
- TCP,UDP 111
- Se využívá pro mapování portů
- TCP 2049
- Se rovněž využívá pro mapování portů ovšem pouze u GlusterFS verze 3.4 a vyšší
Ve výchozím stavu NFS u GlusterFS neposkytuje konektivitu přes UDP, pouze TCP. Pokud chcete využívat pro NFS komunikaci přes UDP, je třeba zapnout parametr nsf.mount-udp |
Z principu tedy není možné aby byl jeden server integrován do více než jednoho TSP! |
Informace o TSP
root@nod3 :~# gluster pool list
UUID Hostname State
eaa065d3-f713-4c63-9287-0c50bef9ccc0 nod2 Connected
e70dfc34-39e2-4f5f-99b1-7d64a6612462 192.168.0.1 Connected
d1bdbc55-c6c6-461e-b5c9-c0bfa3d39f88 localhost Connected
Zjištění stavu jednotlivých serverů v rámci TSP
root@nod1 :~# gluster peer status
Number of Peers: 2
Hostname: nod2
Uuid: eaa065d3-f713-4c63-9287-0c50bef9ccc0
State: Peer in Cluster (Connected)
Hostname: nod3
Uuid: d1bdbc55-c6c6-461e-b5c9-c0bfa3d39f88
State: Peer in Cluster (Connected)
Chceme-li zjistit jak vidí situaci v TSP jiný z nodů, je třeba použít parametr --remote-host
root@nod3 :~# gluster --remote-host=nod1 peer status
Number of Peers: 2
Hostname: nod2
Uuid: eaa065d3-f713-4c63-9287-0c50bef9ccc0
State: Peer in Cluster (Connected)
Hostname: nod3
Uuid: d1bdbc55-c6c6-461e-b5c9-c0bfa3d39f88
State: Peer in Cluster (Connected)
Vyřazení serveru z TSP
root@nod1 :~# gluster peer detach nod3
Použití parametru force
root@nod1 :~# gluster peer detach nod3 force
Vytvoření svazku - volume
GlusterFS je distribuovaný souborový systém, neposkytuje tedy žádné blokové zařízení, ale tzv. svazky (volumes), které jsou složené z tzv. bricků. Bricky jsou adresáře na jednotlivých serverech v rámci TSP.
Svazek v minimální konfiguraci může být tvořen pouze jedním brickem.
root@nod1 ~# gluster volume create Svazek transport tcp nod1:/blok1
Pokud by adresář /blok1 byl pouze přípojným bodem pro některé z lokálních blokových zařízení serveru nod1, pak by musel být připojen na konec příkazu ještě parametr force
|
Aby bylo možné vytvořený svazek připojit, musí být nejprve aktivován parametrem start
.
root@nod1 :~# gluster volume list
Svazek
root@nod1 :~# gluster volume start Svazek
volume start: Svazek: success
Pokud existuje v rámci TSP svazků více, lze se o každém z nich dozvědět více informací parametrem info
root@nod1 :~# gluster volume info Svazek
Volume Name: Svazek
Type: Distribute
Volume ID: 42ec4023-3304-4901-901e-73e8d1f6582a
Status: Created
Number of Bricks: 1
Transport-type: tcp
Bricks:
Brick1: nod1:/blok1
- Nejprve svazek zastavíme -
gluster volume stop jméno_svazku
- Potom ho zrušíme -
gluster volume delete jméno_svazku
Při zrušení se sice odstraní soubory v adresáři /var/lib/glusterd/vols
, ale uložená data i logy zůstanou - místo se tedy neuvolní. Je tedy třeba provést už na jednotlivých nodech..
- Vymazání dat, případně odpojení a následné zrušení LV oddílu
- Odstranění logu
Distribuovaný svazek
I když svazek může tvořit pouze jeden brick, z praktického hlediska by to nic pozitivního nepřinášelo. Podstata GlusterFS je v tom, že umožňuje svazky pružně sestavovat z mnoha desítek i stovek bricků a tak vytvořit úložiště s parametry, jaké ani není technicky možné na jednom fyzickém stroji dosáhnout.
Pokud k již vytvořenému svazku přidáme další brick, začne GlusterFS rozhazovat soubory rovnoměrně mezi ně. Tím se sníží počet operací se soubory zpracovávaný na jednom serveru a díky tomu bude přístup ke svazku rychlejší, než kdyby se pracovalo s jedním velkým fyzickým blokovým zařízením.
- Použití
- Distribuovaný svazek, který funguje ve své podstatě jako síťový raid0, nemá sice žádnou redundanci dat, ale nabízí vysoký výkon a maximum datového prostoru.
Distribuovaný svazek obvykle zakládáme rovnou přes několik bricků
root@nod1 :~# gluster volume create Svazek nod1:/blok1 nod2:/blok1
Rozšíření svazku o další brick
Když chceme zvýšit jeho kapacitu, můžeme tak učinit velice snadno tím, že jej rozšíříme o další brick
root@nod1 :~# gluster volume info Svazek
Volume Name: Svazek
Type: Distribute
Volume ID: 42ec4023-3304-4901-901e-73e8d1f6582a
Status: Started
Number of Bricks: 1
Transport-type: tcp
Bricks:
Brick1: nod1:/blok1
root@nod1 :~# gluster volume add-brick Svazek nod2:/blok1
volume add-brick: success
root@nod1 :~# gluster volume info Svazek
Volume Name: Svazek
Type: Distribute
Volume ID: 42ec4023-3304-4901-901e-73e8d1f6582a
Status: Started
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: nod1:/blok1
Brick2: nod2:/blok1
Další brick můžeme přidat kupř. pokud plánujeme odstavit některý ze stávajících serverů, aniž by tím došlo k znefunkčnění stávajícího svazku, aby bylo kam uložená data přesunout. |
Informace o stavu svazku
root@nod1 :~# gluster volume status Svazek
Status of volume: Svazek
Gluster process Port Online Pid
------------------------------------------------------------------------------
Brick nod1:/blok1 49154 Y 2400
Brick nod2:/blok1 49154 Y 2614
NFS Server on localhost 2049 Y 16139
NFS Server on nod2 2049 Y 28432
Task Status of Volume Svazek
------------------------------------------------------------------------------
There are no active volume tasks
Redukce svazku
Před redukcí svazku musíme být zajištěna dostatečná datová kapacita zbývajících bricků, aby bylo kam přesunout data svazku z bricku ze serveru, který z nějakého důvodu potřebujeme odstavit - kupř. za účelem aktualizace jeho systému, aj.
Odstavení bricku spočívá ze tří fází:
- Nejprve je třeba zahájit přesun dat (parametr start)
- Teprve jsou-li data odsunuta (stav přesunu lze průběžně ověřovat s parametrem status)..
- je možné parametrem commit operaci dokončit
root@nod1 :~# gluster volume remove-brick Svazek nod1:/blok1 start
volume remove-brick start: success
ID: c6ab64f7-d921-4e07-9350-0524b7d2a613
root@nod1 :~# gluster volume remove-brick Svazek nod1:/blok1 status
Node Rebalanced-files size scanned failures skipped status run time in secs
--------- ----------- ----------- ----------- ----------- ----------- ------------ --------------
localhost 0 0Bytes 0 0 0 completed 0.00
root@nod1 :~# gluster volume remove-brick Svazek nod1:/blok1 commit
Removing brick(s) can result in data loss. Do you want to Continue? (y/n) y
volume remove-brick commit: success
Od verze 3.6, lze brick ze svazku vyhodit bez ohledu na to, jestli na něm ještě nějaká data jsou, či nejsou! |
Stripovaný svazek
U stripovaný svazek se od distribuovaného liší tím, že se do bricků neukládají soubory tak jak jsou, ale jsou rozsekány a mezi bricky rozhozeny po menších částech - stripech. To je výhodné především u velmi velkých souborů ( > než 100GB ) - i když je nutno říct, že pro práci s tak velkými soubory obecně není GlusteFS moc vhodný.
- Použití
- Stripovaný svazek pak nabízí velmi rychlé čtení souborů, ale má extrémně pomalý zápis a navíc žádnou redundanci. Takže při výpadku jednoho bloku je nepoužitelný celý svazek. Proto se používá stripování zpravidla v kombinaci s replikací.
root@nod1 ~# gluster volume create Svazek stripe 2 transport tcp nod1:/blok1 nod2:/blok1
Replikovaný svazek
Svazek, který je vytvořen jako replikovaný, ukládá pro každý soubor jeho kopii do dalšího bricku. Je-li tento brick na jiném serveru, pak bude svazek schopen ustát i výpadek na straně serveru poskytujícího některý s jeho bricků. Tím odstraňuje zásadní nedostatek čistě distribuovaného svazku. Na druhou stranu, daní za tento komfort je snížení využitelného datového prostoru v rámci svazku.
- Použití
- Jsou-li k dispozici alespoň dva bricky, z nichž každý je na jiném serveru tak funguje replikovaný svazek jako síťový raid1. Data však mohou být replikována i přes více bricků( a serverů). Tím je zajištěna redundance ukládaných souborů, proto jde o nejčastější řešení u HA clusterů. Replikovaný svazek je poměrně svižný při rychlé čtení, protože soubory lze načítat paralelně z několika serverů současně, tak jako u distribuovaného svazku. Má však horší výkon při zápisu.
root@nod1 ~# gluster volume create Svazek replica 2 transport tcp nod1:/blok1 nod2:/blok1
Počet replikací závisí od počtu dostupných bricků |
Distribuovaný svazek s replikací
Distribuovaný svazek s replikací spojuje výhody replikovaného svazku s distribucí souborů přes více serverů. Čím větší je počet bricků na samostatných strojích, tím víc je eliminován problém s rychlostí lokálních IO operací a GlusterFS se jeví z hlediska svého výkonu svižnější. Úzkým hrdlem se pak stává propustnost sítě.
K vytvoření takového svazku dojde automaticky, je-li do svazku zařazen dvojnásobný počet bricků, než-li udává hodnota parametru replica
root@nod1 ~# gluster volume create Svazek replica 2 transport tcp nod1:/blok1 nod1:/blok2 nod2:/blok1 nod2:/blok2
Pozor! Při zakládání distribuovaného svazku s replikací záleží na pořadí bricků! Pokud by byly při zakládání svazku předány bricky v následujícím pořadí..
root@nod1 ~# gluster volume create Svazek replica 2 transport tcp nod1:/blok1 nod2:/blok1 nod1:/blok2 nod2:/blok2
..tak by při výpadku serveru nod2, nebo nod1 došlo k tomu, že by došlo k rozbití svazku, neboť by byla k dispozici neúplná data. Viz ilustrační obrázek:
Disperse
Je nový typ svazku, zavedený od GlusterFS verze 3.6 založený na stripování. Využívá se u něj nový překladač vrstvy, založený na matematických transformacích, který je schopen - v případě selhání bricku - rekonstruovat data chybějícího stripu z dat, které jsou součástí dostupných stripů. To, kolik bricků může ze svazku vypadnout, aniž by došlo ke ztrátě dat závisí na hodnotě disperze. Ta udává kolik bricků je potřeba k dopočítání chybějících dat. Jde v podstatě o síťový raid5.
U dispersního svazku lze volit také úroveň redundance, která je ovšem závislá na počtu dostupných bricků.
- Použití
- Dispersní svazek zachovává dostupnost dat i při výpadku serveru (podobně jako je tomu u replikace), ale zároveň při dostatečném počtu serverů významně snižuje hluchý prostor vyhrazený pro data nezbytná pro obnovu chybějícího stripu.
Co ovlivňuje výkon a spolehlivost GlusterFS
Srovnávací tabulka GlusterFS svazku o logické kapacitě 8TB, podle typu a kombinace bricků:
Typ svazku | Konfigurace | Počet bricků | Postradatelných[1] | Kapacita bricku (v TB) | Celková kapacita fyzických zařízení (v TB) | Režie[2] | Data souboru per brick[3] | Data souboru[4] | Traffic souboru per brick[5] | Traffic souboru[6] |
---|---|---|---|---|---|---|---|---|---|---|
replikovaný | 3*8 | 3 | 2 | 8 | 24 | 66.7% | L | 3*L | L | 3*L |
replikovaný | 2*8 | 2 | 1 | 8 | 16 | 50% | L | 2*L | L | 2*L |
dispersovaný | 8+7 | 15 | 7 | 1 | 15 | 46.7% | L/8 | 1.88*L | L/8 | 1.88*L |
dispersovaný | 8+6 | 14 | 6 | 1 | 14 | 42.9% | L/8 | 1.75*L | L/8 | 1.75*L |
dispersovaný | 8+5 | 13 | 5 | 1 | 13 | 38.5% | L/8 | 1.63*L | L/8 | 1.63*L |
dispersovaný | 8+4 | 12 | 4 | 1 | 12 | 33.3% | L/8 | 1.5*L | L/8 | 1.5*L |
dispersovaný | 8+3 | 11 | 3 | 1 | 11 | 27.3% | L/8 | 1.38*L | L/8 | 1.38*L |
dispersovaný | 8+2 | 10 | 2 | 1 | 10 | 20% | L/8 | 1.25*L | L/8 | 1.25*L |
dispersovaný | 8+1 | 9 | 1 | 1 | 9 | 11.1% | L/8 | 1.13*L | L/8 | 1.13*L |
stripovaný | 8 | 8 | 0 | 1 | 8 | 0% | L/8 | L | L/8 | L |
- ↑ Maximální počet bricků, který může vypadnout aniž by došlo k selhání svazku
- ↑ Objem dat vyhrazený pro zajištění redundance
- ↑ Objem dat jaký zabere jeden soubor na jednom bricku
- ↑ Celkově zabraná kapacita fyzických zařízení jedním souborem
- ↑ Počet síťových operací spojených s jedním souborem, připadající na jeden brick
- ↑ Celkový počet síťových operací, spojených s jedním souborem
- počet serverů
- Úzkým hrdlem GlusterFS, které lze eliminovat vyšším počtem serverů jsou souborové operace. Čtení či zápis souborů, nebo jejich části do adresářů bricků sebou nese jistou režii, která - pokud stroj zároveň funguje jako brick - zvyšuje lokální I/O zatížení. Čím větší je serverů, tím lepší je rozložení této zátěže a tím i výkon GlusterFS.
- SSD versus HDD
- samostatné fyzické disky pro bricky
- konektivita
- Vliv 1G sítě, 10G sítě, Infiniband
- typ uložených souborů
- Blokový přístup před BD xtranslator
Připojení svazku
Soubory na svazku, ke kterým se přistupuje přes API GlusterFS - typicky virtuální disky - tímto problémem netrpí, protože se do nich data zapisují po blocích.
Klient totiž nepoužívá pro přístup do souborového systému API, ale jaderný modul fuse, který provádí veškeré operace se soubory v userspace. Tím je ovšem jeho výkon degradován. S čím vyšším počtem souborů pracuje, tím vyšší režii (a nižší rychlosti při zápisu a čtení) to sebou nese.
Tento problém lze do jisté míry obejít, pokud se přistupuje k souboru v GlusterFS svazku přes API, které umožňuje blokový přístup.
S využitím fuse klienta
Aby bylo možné připojit GlusterFS svazek, nemusí být stroj na kterém je nainstalován klient součástí TSP. Klient však musí pro jeho připojení využít některý ze serverů, které do příslušného TSP zapojené jsou.
root@stroj :~# mount -t glusterfs nod1:/Svazek /mnt
Nemusí však jít nutně o server, který funguje zároveň jako brick. Navíc je pro mount k dispozici volba backupvolfile-server
, kterou lze nastavit záložní server, pro případ že by ten původní byl z nějakého důvodu nedostupný.
root@stroj :~# mount -t glusterfs nod2:/Svazek /mnt -o backupvolfile-server=nod1
Serverů může být pochopitelně nastaveno více a místo volby lze alternativně použít následující syntaxi:
root@stroj :~# mount -t glusterfs nod2,nod1:/Svazek /mnt
Přes NFS
Přes CIFS
Snapshotování
Pokusy se snapshotováním nezkoušejte na žádném produkčním svazku! V každém případě doporučuji zvýšenou pozornost při čtení části věnované rekonstrukci svazku. |
Snapshotování svazků lze používat od GlusterFS verze 3.6. Musí být ovšem splněna základní podmínka - a to, že je svazek sestaven z bricků, které jsou nad přírůstkovými logickými LVM oddíly ( Více k vytvoření takového oddílu viz LVM (thin provisioning)
Jakým způsobem snapshotování GlusterFS svazků funguje
Vytvoření snapshotu je jednoduché, ale bohužel tak jak snapshotování GlusterFS svazku funguje, není moc použitelné. A to z následujících důvodů:
- Při snapshotu dojde k přemountování přípojného bodu stávajícího bricku z původního LV oddílu na jakýsi dočasný LV oddíl
- LVM snapshot, je rovněž namountován, a to na nově vytvořený přípojný body v adresáři
/run/gluster/snaps/...
. Bohužel jméno tohoto přípojného bodu není stejné, ale pro každý nod vypadá jinak. - Problém představuje restart nodu. Obsah adresáře
/run
kde se tento přípojný bod nachází, se obvykle nachází v ramdisku. A po restartu nodu přestane existovat. - Další problém může vzniknout, pokud se pro připojení LV oddílu používá jeho jméno (LV name), uuid, nebo jméno souborového systému (LABEL).
- Pokud je v souboru
/etc/fstab
LV oddíl identifikován jménem, nebo hodnotou uuid, nastane po restartu problém v tom, že GlusterFS svazku nebudou sedět atributy u adresáře bricku. Ty "správné" atributy totiž má brick, který je na jiném LV oddíle - tom, který byl založen při snapshotu. - Je-li v souboru
/etc/fstab
LV oddíl identifikován návěštím souborového systému, je situace komplikovaná v tím, že systém při restartu neví, který LV oddíl má vlastně namountovat. Takže se nepřipojí nic!
- Pokud je v souboru
Při odstranění snapshotu dojde ke změně atributů bricku na původním svazku, a je-li takový svazek zastaven, už se jej nepodaří znovu nahodit! |
Vytvoření snapshotu
root@nod1~# gluster snapshot create build1 buildinglab description Testovaci_snapshot
snapshot create: success: Snap build1_GMT-2015.05.26-14.19.01 created successfully
Změna v namountované struktuře..
...
/dev/mapper/ThinGroup-25fa0c73a6b24327927c0dc9f4f08dba_0 80G 29G 50G 37% /srv/buildinglab
...
Místo původního...
...
/dev/mapper/ThinGroup-buildinglab 80G 29G 50G 37% /srv/buildinglab
...
To však není jediná změna. Pro každý brick je vytvořen LVM snapshot, který je posléze namountován na dočasný mountpoint, který je na každém z nodů pojmenován jinak, ale hodnota trusted.glusterfs.volume-id všech objektů je stejná jako u výchozího snapshotovaného bricku.
Stav snapshotu
Přehled o tom, kam jsou tyto LVM snapshoty na jednotlivých nodech připojeny a zda-li je snapshot aktivní se lze dozvědět takto:
root@nod1~# gluster snapshot status
Snap Name : build1_GMT-2015.05.26-14.19.01
Snap UUID : 3b3b8e45-5c81-45ff-8e82-fea05b1a516a
Brick Path : nod1:/run/gluster/snaps/25fa0c73a6b24327927c0dc9f4f08dba/brick1/data
Volume Group : ThinGroup
Brick Running : No
Brick PID : N/A
Data Percentage : 40.80
LV Size : 80.00g
Brick Path : nod2:/run/gluster/snaps/25fa0c73a6b24327927c0dc9f4f08dba/brick2/data
Volume Group : ThinGroup
Brick Running : No
Brick PID : N/A
Data Percentage : 40.75
LV Size : 80.00g
Brick Path : nod3:/run/gluster/snaps/25fa0c73a6b24327927c0dc9f4f08dba/brick3/data
Volume Group : ThinGroup
Brick Running : No
Brick PID : N/A
Data Percentage : 40.82
LV Size : 80.00g
Aktivace a deaktivace snapshotu
Ve výchozím stavu je snapshot neaktivním stavu. To znamená, že jej nelze jako GlusterFS svazek připojit. Aby to bylo možné, musí být nejprve aktivován
root@nod1~# gluster snapshot activate build1_GMT-2015.05.26-14.19.01
Snapshot activate: build1_GMT-2015.05.26-14.19.01: Snap activated successfully
Deaktivaci snaphotu lze provést obdobným způsobem
root@nod1~# gluster snapshot deactivate build1_GMT-2015.05.26-14.19.01
Deactivating snap will make its data inaccessible. Do you want to continue? (y/n) y
Snapshot deactivate: build1_GMT-2015.05.26-14.19.01: Snap deactivated successfully
Výpis existujících snapshotů
Pro připojení snapshotu je důležité jeho jméno. Součástí jména snapshotu je ve výchozím stavu časové razítko, pokud to ovšem nepotlačíme parametrem při vytvoření snapshotu. Následujícím příkazem si můžeme vylistovat seznam všech existujících snapshotů:
root@nod1~# gluster snapshot list
build1_GMT-2015.05.26-14.19.01
Připojení snapshotu
Jako GlusterFS svazek lze připojit pouze aktivovaný snapshot. Ovšem pozor! Pouze pro čtení! Pokud chcete mít ze snapshotu normální GlusterFS svazek, tak ho z něj musíte nejprve naklonovat.
root@nod1~# mount -t glusterfs localhost:/snaps/build1_GMT-2015.05.26-14.19.01/buildinglab /mnt
Povšimněte si, že cesta pro připojení snapshotu je jiná, než u normálního svazku. Její součástí kromě jména snapshotu také název původního svazku! |
Klonování snapshotu
Naklonovat lze pouze aktivní snapshot!
root@nod1~# gluster snapshot clone build-new build1_GMT-2015.05.26-14.19.01
snapshot clone: success: Clone build-new created successfully
root@nod1~# mount
...
/dev/mapper/ThinGroup-build--new_0 on /srv/buildinglab type btrfs (rw,relatime,nodatasum,nodatacow,space_cache,autodefrag)
/dev/mapper/ThinGroup-build--new_0 on /run/gluster/snaps/25fa0c73a6b24327927c0dc9f4f08dba/brick2 type btrfs (rw,relatime,nodatasum,nodatacow,space_cache,autodefrag)
/dev/mapper/ThinGroup-build--new_0 on /run/gluster/snaps/build-new/brick2 type btrfs (rw,relatime,nodatasum,nodatacow,space_cache,autodefrag)
...
Naklonovaný svazek se objeví jako normální GlusterFS svazek, proto jeho jméno nesmí být stejné, jako má některý jiný již existující svazek
Podrobné informace o snapshotu
root@nod1~# gluster snapshot info
Snapshot : build1_GMT-2015.05.26-14.19.01
Snap UUID : 3b3b8e45-5c81-45ff-8e82-fea05b1a516a
Description : Testovaci_snapshot
Created : 2015-05-26 14:19:01
Snap Volumes:
Snap Volume Name : 25fa0c73a6b24327927c0dc9f4f08dba
Origin Volume name : buildinglab
Snaps taken for buildinglab : 1
Snaps available for buildinglab : 255
Status : Stopped
Odstranění snaphotu
root@nod1~# gluster snapshot delete build1_GMT-2015.05.26-14.19.01
Deleting snap will erase all the information about the snap. Do you still want to continue? (y/n) y
snapshot delete: build1_GMT-2015.05.26-14.19.01: snap removed successfully
Rekonstrukce svazku
Vzniku potenciálních problémů se GlusterFS snaží předcházet tím, že pokud nastane situace, která by hrozila vznikem nekonzistence, dovolí k souborům přistoupit pouze v režimu "jen pro čtení" (read-only).
U virtuálního stroje se to projeví tím, že se v jeho logu začnou objevovat zprávy které vypadají jako by byl poškozený souborový systém.
Ve skutečnosti se nic kritického neděje - změny jsou totiž pouze v paměti. Problém je třeba ihned řešit, protože po určité době stroj zaplácne paměť, zkolabuje a změny zahodí. K poškození dat uložených na GlusterFS ale během té doby nedojde.
Příčiny mohou být různé.
- nepřipojený glusterd démon u některého z bricků
- split-brain
Nepřipojený glusterd démon u některého z bricků
Z příčiny mně blíže neznámé nastala situace, kdy u svazku replikovaného na tři nody se démon jednoho z bricků dostal do stavu offline.
Pro bricky ostatních svazků byli démoni OK. Zkusil jsem na stroji nod2 restartovat GlusterFS, ale situace byla stáje stejná. Protože jsem nevěděl co bylo příčinou, zkusil jsem nejprve zjistit, jak je na tom Svazek se zdravím:
Z výše uvedeného výpisu bylo zřejmé, že GlusterFS čeká, až se do souboru disk.img
na bricku stroje nod3 promítnou změny ze zbylých dvou bricků - nod1 a nod2. Jenže díky tomu, že démon bricku stroje nod2 z nějakého důvodu nekomunikoval, nebylo možné operaci dokončit.
Za normálních okolností probíhá tzv. self-healing (samoozdravný proces) automaticky, ale v tomto případě zřejmě potřeboval nakopnout. Zkusil jsem ho tedy aktivovat manuálně.
Aktivace ozdravného procesu
Takto vypadal výpis zdravotního stavu Svazku v průběhu ozdravného procesu. Po dokončení vypadal následovně a bylo s ním možné zase normálně pracovat:
root@nod2 :~# gluster volume heal Svazek info
Brick nod1:/srv/Svazek/data/
Number of entries: 0
Brick nod2:/srv/Svazek/data/
Number of entries: 0
Brick nod3:/srv/Svazek/data/
Number of entries: 0
|
split-brain
Může se stát, že za určitých okolností dojde ke stavu, který se anglicky nazývá split-brain.
Je to situace, kdy se dostanou data či metadata bricků do vzájemné nekonzistence. Důsledkem je, že se pak soubor uložený na glusterfs svazku nedá přečíst, ačkoliv je normálně vidět.
Dříve tato situace vyžadovala práci s rozšířenými atributy na jednotlivých nodech. U novějších verzí GlusterFS to není třeba. Následující příklad demonstruje řešení nekonzistence ( split-brainu ) u souboru disk.img
, který je uložen v rámci svazku Svazek:
Dotazem na "zdraví" svazku Svazek jsme zjistili, že ze tří bricků je ve stavu split-brain jeden. Abychom mohli provést opravu, je třeba zjistit, který z nich má neplatné atributy, které brání v automatickém "uzdravení" svazku.
Analýza atributů
Správnou kopii určíme porovnáním afr atributů, které zjistíme pomocí příkazu getfattr:
- Každá kopie souboru by měla mít stejný počet afr atributů i jejich jména.
- Jména afr atributů typu klient jsou složená ze jména svazku a pořadových čísel bricků tak jak je vrací následující příkaz:
Z uvedeného výpisu tedy plyne, že...
trusted.afr.Svazek-client-1 == nod1 trusted.afr.Svazek-client-2 == nod3 trusted.afr.Svazek-client-3 == nod2
- Prvních osm deklaruje stav uložených dat
- Dalších osm deklaruje stav metadat
- A posledních osm něco, zatím nevím co
Porovnáním atributů z uvedených výpisů, můžeme konstatovat následující:
- Metadata mají všechny bricky v pořádku (všude jsou samé nuly)
- V atributech souboru
srv/Svazek/data/disk.img
na stroji nod2 chybí záznam pro brick na stroji nod1 (trusted.afr.Svazek-client-1
) - Hodnota atributu
trusted.afr.Svazek-client-2
na nodech nod1 a nod2 signalizuje, že se do kopie souboru na stroji nod3 mají zapsat nějaká data. - Hodnota atributu
trusted.afr.Svazek-client-3
na nodu nod3 signalizuje, že by se měly naopak zapsat nějaká data odsud.
Oprava
U starších verzí GlusterFS bylo nutné před spuštěním samoopravného procesu dát atributy do pořádku jednotlivě na všech nodech postupem, který je popsán popsán níže. U současných verzí to již není nutné. Stačí pouze analýzou atributů zjistit, na kterém bricku se nachází správná kopie souboru.
V předchozím ukázkovém příkladu jsme analýzou atributů zjistili, že správnou verzi souboru obsahuje brick na stroji nod3. Opravu tedy můžeme provést z libovolného nodu následujícím způsobem:
root@nod2 :~# gluster volume heal ganesha split-brain source-brick nod3:/srv/Svazek/data /disk.img
|
Původní postup opravy atributů
U starších verzí bylo třeba úkonů více:
- Doplnit chybějící atribut
trusted.afr.Svazek-client-1
u souboru na nodu nod2 - Vynulovat atribut
trusted.afr.Svazek-client-3
u kopie souboru na stroji nod3
root@nod2 :~# setfattr -n trusted.afr.Svazek-client-1 -v 0x000000000000000000000000 /srv/Svazek/data/disk.img
root@nod3 :~# setfattr -n trusted.afr.Svazek-client-3 -v 0x000000000000000000000000 /srv/Svazek/data/disk.img
|
Pak nahodíme svazek, namountujeme přes FUSE klienta a čtením souboru vyvoláme "samoopravný" proces.
root@nod1 :~# gluster volume start Svazek
root@nod1 :~# mount -t glusterfs localhost:/Svazek /mnt
root@nod1 :~# md5sum /mnt/disk.img
26b727e6761d341e9d28faa2c5286fbb /mnt/disk.img
root@nod1 :~# gluster volume heal Svazek info split-brain
Brick nod1:/srv/Svazek/data/
Number of entries in split-brain: 0
Brick nod3:/srv/Svazek/data/
Number of entries in split-brain: 0
Brick nod2:/srv/Svazek/data/
Number of entries in split-brain: 0
|
Z výsledku kontrolního součtu je zřejmé, že byl problém vyřešen a hodnota odpovídá kontrolnímu součtu souboru na nodech nod1 a nod2 před opravou. A dotazem na "zdravotní" stav svazku zjistíme že není žádná položka svazku ve stavu split-brain
Parametry pro volumes
Pro výpis uživatelsky nastavených parametrů GlusterFS svazku se používá příkaz info (viz příklad výše). Vrací však pouze parametry které byly změněné! Aktuální nastavení všech parametrů lze zjistit pomocí klíčového slova all předaného příkazu get:
root@nod1 :~# gluster volume get Svazek all
Option Value
------ -----
cluster.lookup-unhashed on
...
|
Pokud nás zajímá pouze konkrétní hodnota vybraného parametru, předá se místo klíčového slova all parametr:
root@nod1 :~# gluster volume get Svazek nfs.disable
Option Value
------ -----
nfs.disable on
|
Uživatelsky pozměnněné parametry lze vrátit na jejich výchozí hodnotu pomocí příkazu reset. Viz následující příklad jak vrátit uživatelsky nastavený parametr nfs.disable
na výchozí hodnotu:
root@nod1 :~# gluster volume reset Svazek nfs.disable
volume reset: success: reset volume successful
|
Pokud by mělo být cílem pouze povolení zapnutí NFS serveru, tak by stačilo příkazem set změnit hodnotu blokování spouštění NFS serveru z on na off |
Nastavení jiné než výchozí hodnoty parametru se provádí příkazem set takto:
V následujícím příkladu je vypnut přístup ke svazku Svazek přes NFS
root@nod1 :~# gluster volume set Svazek nfs.disable on
volume set: success
root@nod1 :~# gluster volume info Svazek
Volume Name: Svazek
Type: Replicate
Volume ID: 7fde9b2c-b50f-4e54-bb4b-388450dddbcc
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: nod1:/srv/blok1
Brick2: nod2:/srv/blok1
Options Reconfigured:
nfs.disable: on
|
Tabulka parametrů
Parametr | Popis | Výchozí hodnota | Použitelná hodnota |
---|---|---|---|
Přístup klientů ke GlusterFS svazku | |||
auth.allow | IP adresy strojů které mohou ke svazku přistupovat | * (přístup povolen všem bez omezení) | IPv4 adresa, u které lze za pomoci znaku '*' vymezit širší rozsah např. 192.168.1.* |
auth.reject | IP adresy strojů kterým má být přístup ke svazku odepřen | NONE (nikomu nemá být přístup odepřen) | IPv4 adresa, u které lze za pomoci znaku '*' vymezit širší rozsah např. 192.168.1.* |
client.grace-timeout | Specifikuje čas, po který se má podržet zámek pro spojení s klientem v případě jeho přerušení. Pokud dojde k obnovení spojení před uplynutím tohoto intervalu, zůstane spojení zachováno. | 10 | 10 - 1800 sekund (30 minut) |
network.frame-timeout | Časový interval, během kterého musí dojít ke zpracování dílčí operace. Pokud během něj nedojde odpověď, že byla operace zpracovaná, je spojení s nodem prohlášeno za mrtvé. | 1800 (30 minut) | Není žádný limit |
network.ping-timeout | Čas, po jehož uplynutí je považováno spojení mezi nody za přerušené. Pokud se tak stane, tak se před navázáním nového spojení nejprve aktualizují zámky a teprve pak se pokračuje v dílčích operacích. Toto je však z hlediska systémových prostředků náročná operace, které je třeba se pokud možno vyhnout. Na druhou stranu se tím prodlužuje čas, než je navázáno spojení s GlusterFS svazkem přes alternativní nod. | 42 sekund | Není žádný limit |
Nastavení GlusterFS nodu | |||
server.allow-insecure | Tímto parametrem lze povolit připojení GlusterFS klienta na neprivilegovaném portu. Jinak se používají pouze privilegované porty (do portu 1024), ke kterým může přistupovat pouze root. | on | on/off |
server.grace-timeout | Specifikuje čas, po který se má podržet zámek pro spojení s nodem v případě jeho přerušení. Pokud dojde k obnovení spojení před uplynutím tohoto intervalu, zůstane spojení zachováno. | 10 | 10 - 1800 sekund (30 minut) |
server.statedump-path | Cesta kam se ukládá soubor s výstupem příkazu statedump. Název souboru je sestaven ze skutečné cesty do adresáře bricku (lomítka jsou nahrazena pomlčkami), přípony .dump a časového razítka.
|
Adresář /run/glusterfs na stroji kde se nalézá brick. U starších verzí GlusterFS než 3.6 se dump soubor ukládal do adresáře /tmp a jeho jméno bylo sestaveno z cesty k bricku, čísla lokálního procesu a přípony .dump
|
Cesta do adresáře kam se zapíše výstup do souboru. |
server.ssl | Šifrování komunikace mezi nody přes SSL | off | on/off |
Nastavení úložiště bricku | |||
storage.health-check-interval | Interval, v jakém má být prováděna kontrola stavu souborů uložených v rámci bricku | 30 sekund | Je-li nastaven počet sekund na 0, bude tato kontrola vypnuta |
storage.linux-aio | Používat nativní linuxové AIO (asynchronní IO) na straně úložiště | off | on/off |
storage.owner-uid | UID pro soubory bricku na straně úložiště | Není žádná hodnota | Číselná hodnota UID |
storage.owner-gid | GID pro soubory bricku na straně úložiště | Není žádná hodnota | Číselná hodnota GID |
Diagnostika GlusterFS | |||
diagnostics.brick-log-level | Nastavení úrovně logovaných zpráv týkajících se bricku | INFO | DEBUG/WARNING/ERROR/CRITICAL/NONE/TRACE |
diagnostics.client-log-level | Nastavení úrovně logovaných zpráv týkajících se klienta | INFO | DEBUG/WARNING/ERROR/CRITICAL/NONE/TRACE |
diagnostics.count-fop-hits | Sledování počtu souborových operací io-stat modulu v rámci datové struktury GlusterFS | on/off | |
diagnostics.dump-fd-stats | Sledování souborových operací v rámci datové struktury GlusterFS | off | on/off |
diagnostics.latency-measurement | Sledování latence zpracovávaných operací v rámci datové struktury GlusterFS | off | on/off |
Nastavení GlusterFS clusteru | |||
cluster.background-self-heal-count | Počet bloků, který se může zpracovávat na pozadí, aniž by to vyžadovalo zablokování zpracování datových operací | 0 - číslo bez omezení | |
cluster.choose-local | Parametr dovolí použít při čtení svazku lokální brick, není-li explicitně nastaven parametr cluster.read-subvolume | false | true/false |
cluster.data-change-log | Pokud bude tento parametr ve stavu off, nebudou datové operace typu write/truncate při AFR transakcích, které oznamují počet selhání při zápisu, volat operace pre/post, které by se jinak zapisovaly do logu. | on/off | |
cluster.data-self-heal-algorithm | Při nastavení full se kopíruje celý soubor ze zdroje na kopie. Při nastavení diff se na kopie kopírují pouze ty bloky, jejichž kontrolní součet není shodný se zdrojem. Při nastavení reset se kopírují bloky podle následujícího heuristického modelu. Pokud soubor neexistuje, nebo má nulovou velikost, je zkopírován celý soubor. Je-li velikost souboru stejná, pak se data zdrojového souboru postupně po kouscích čtou a zapisují do kopie, což je rychlejší proces, než pokud by se měly navíc dělat kontrolní součty. | reset | full/diff/reset |
cluster.data-self-heal-window-size | Maximální počet bloků na soubor, které může samoopravný mechanismus zpracovávat současně. | 1 - 1024 | |
cluster.eager-lock | on/off | ||
cluster.ensure-durability | Tento parametr zajišťuje, že na data i metadata jsou aktivovány mechanismy, které zajišťují konzistenci uložených dat při náhlém výpadku bricku | on | on/off |
cluster.entry-change-log | on/off | ||
cluster.heal-timeout | 600 sekund | 60 - libovolné kladné číslo | |
cluster.iam-self-heal-daemon | on/off | ||
cluster.metadata-change-log | on/off | ||
cluster.min-free-disk | Parametr určuje kolik procent diskového prostoru v rámci souborového systému na kterém se nachází brick má zůstat volných. Tato volba je použitelná především s situaci, kdy mají disky s bricky různou kapacitu. | 10% | Procentuálně určená velikost volného místa |
cluster.min-free-inodes | % procenta | ||
cluster.nufa | on/off | ||
cluster.pop-op-delay-secs | číslo | ||
- cluster.quorum-count | Počet svazků, které musí být přítomny aby bylo zachováno fórum. Pokud není nastavená žádná hodnota, má parametr 'cluster.quorum-type automaticky hodnotu fixed | 0 | |
- cluster.quorum-type | Parametr nastavuje, jaký typ metody se má použít pro zachování fóra. None znamená, že se žádné fórum používat nemá. Auto znamená, že je na fórum brán zřetel za předpokladu, že je dostupná alespoň polovina bricků svazku. Resp. polovina bricků prvního svazku v seznamu. Fixed znamená, že je pro zachování fóra vyžadován počet bricků uvedených v parametru cluster.quorum-count. Není-li možné zachovat fórum, pak bude končit zápis příznakem EROFS - což by mělo zabránit tomu, aby nastal "split brain", tj. stav kdy na každém bricku je zapsán do stejného místa jiný kus dat. | None | None/Auto/Fixed |
cluster.read-hash-mode | 0 - 2 | ||
cluster.rebalance-stats | on/off | ||
cluster.readdir-failover | on/off | ||
cluster.readdir-optimize | on/off | ||
cluster.read-subvolume | Tímto parametrem lze nastavit u replikovaného svazku, že se budou inody načítat pouze z jednoho bricku. Hodnotou parametru může být pouze jeden z xlator názvů potomka. Např. Svazek-client-0 | Jméno svazku -client- počet bricků - 1
| |
cluster.read-subvolume-index | -1 - <počet replikací -1> | ||
cluster.self-heal-daemon | Parametr dovoluje vypnout samoopravné mechanismy při replikaci | on | on/off |
cluster.self-heal-readdir-size | 1024 - 131072 | ||
cluster.self-heal-window-size | Parametr určuje maximální počet bloků z jednoho souboru, který se může souběžně kontrolovat během samoopravného procesu. | 16 | 0 - 1025 bloků |
cluster.strict-readdir | on/off | ||
cluster.stripe-block-size | Nastavení velikosti stripu - bloku dat dat který GlusterFS pracuje. Tuto velikost lze nastavovat také individuálně podle jména souboru <filename-pattern:blk-size> | 128 KB (hodnota platná pro všechny soubory) | Libovolná velikost v bajtech |
Parametry ovlivňující výkon GlusterFS | |||
performance.cache-max-file-size | |||
performance.cache-min-file-size | |||
performance.cache-refresh-timeout | |||
performance.cache-size | |||
g performance.enable-least-priority | on/off | ||
performance.flush-behind | on/off | ||
g performance.force-readdirp | on/off | ||
g performance.high-prio-thread | 1 - 64 | ||
performance.io-thread-count | |||
performance.least-prio-threads | 1 - 64 | ||
performance.least-rate-limit | číslo | ||
performance.low-prio-threads | 1 - 64 | ||
performance.normal-prio-threads | 1 - 64 | ||
performance.strict-o-direct | on/off | ||
performance.strict-write-ordering | on/off | ||
performance.write-behind-window-size | |||
Připojení ke GlusterFS svazku přes NFS v3 | |||
nfs.addr-namelookup | Pomalé odpovědi z DNS mohou způsobovat prodlevu během mountu. Tímto parametrem lze ověřování adres v DNS vypnout. Ovšem pozor! Pro připojení pak musíte využívat IPv4 adresy. | on | on/off |
nfs.disable | Zablokovat spuštění NFS serveru | off (NFS server je zapnutý) | on/off |
nfs.enable-ino32 | Je-li povolen tento parametr, budou ke 32-bitovým NFS klientům, které nemají podporu pro 64bitová čísla a velké soubory převáděna čísla inodů na 32bitová. Tento parametr je klíčový, pokud má být GlusterFS svazek exportován přes NFS server, neboť 64bitová čísla inodů mohou vést k tomu, že některé věci nebudou "záhadným způsobem" fungovat! |
off | on/off |
nfs.export-dir | Tento parametr umožňuje publikovat přes NFS server pouze vybrané podadresáře GlusterFS svazku. Vypublikovaná je vždy absolutní cesta k podadresáři a za ní mezerami oddělený seznam IPv4 adres (nebo doménových jmen) strojů, které mají k němu mít přístup. Místo doménových jmen je lepší použít IPv4 adresy, protože pak nevznikají problémy v případě nedostupnosti DNS serveru. | Ve výchozím stavu se neexportuje nic | Seznam exportovaných položek, vzájemně oddělených čárkou. |
nfs.export-volumes | Tímto parametrem lze vypnout globální NFS export celého GlusterFS svazku. Hodí se, pokud chcete povolit pouze připojení adresářů exportovaných přes parametr nfs.export-dir | on | on/off |
nfs.port <PORT> | Prostřednictvím tohoto parametru lze změnit výchozí číslo portu pro NFS (2049) pro NFS server GlusterFS svazku na jiné. | NA | 38465 - 38467 |
nfs.ports-insecure | Tímto parametrem lze povolit připojení klienta na neprivilegovaném portu. Jinak se používají jen privilegované porty (do portu 1024), ke kterým má přístup pouze root. | off | on/off |
nfs.register-with-portmap | Na strojích, které spouští více NFS serverů je třeba zabránit tomu, aby se nepraly o službu portmap, proto je v takovém případě potřeba registraci služby portmap pro GlusterFS NFS vypnout. | on | on/off |
nfs.rpc-auth-allow <IPv4 adresa> | Je-li parametr nastaven, tak GlusterFS NFS bude akceptovat pouze připojení ze strojů které jsou v uvedeném seznamu IPv4 adres. Místo IPv4 adres mohou být použita také doménová jména. Toto nastavení bude akceptováno pro připojení všech adresářů exportovaného svazku. | Není-li uvedena žádná hodnota, nebude možné se připojit z žádného stroje. | Seznam IP adres, nebo doménových jmen. Položky odděleny čárkou. |
nfs.rpc-auth-null | Parametrem lze vypnout ověřování typu AUTH_NULL. Měnit výchozí hodnotu tohoto parametru se nedoporučuje. | on | on/off |
nfs.rpc-auth-reject <IPv4 adresa> | Je-li parametr nastaven, tak GlusterFS NFS odmítne připojení ze strojů které budou v uvedeném seznamu IPv4 adres. Místo IPv4 adres mohou být použita také doménová jména. | Není-li uvedena žádná hodnota, budou odmítnuty všechy stroje. | Seznam IP adres, nebo doménových jmen. Položky odděleny čárkou. |
nfs.rpc-auth-unix | Parametrem lze v případě potřeby vypnout ověřování typu AUTH_UNIX. | on | on/off |
nfs.server-aux-gids | Tento parametr povolí nastavení GID a UID souboru na GlusterFS svazku přes NFS klienta. To však nemusí být bezpečné, pokud nejsou uživatelé synchronizováni napříč nody. V takovém případě by se mohlo stát, že by získal k souboru přístup neoprávněný uživatel. | off | on/off |
nfs.trusted-write | Parametr, který může za určitých okolností zlepšit výkon při přístupu ke GlusterFS svazku přes NFS. Je-li povolen, tak server odesílá ke klientovi potvrzení, že požadavek už byl zpracovaný aby zbytečně neposílal požadavek na COMMIT | off | on/off |
nfs.trusted-sync | Všechny NFS požadavky jsou vyřizovány v asynchronním režimu. To znamená, že uložení na GlusterFS svazek není nijak zaručené. Na druhou stranu je při asynchronním zpracování NFS protokolu výrazně zvýšen výkon NFS. Pozn. je-li aktivován tento parametr, je tím zároveň automaticky nasten parametr nfs.trusted-write na on | off | on/off |
nfs.volume-access | Tímto parametrem lze změnit přístup ke GlusterFS svazku tak, aby byl přes NFS dostupný pouze pro čtení | read-write | read-write/read-only |
Výkon NFS | |||
performance.nfs.io-cache | Aktivuje kešování IO operací na straně NFS serveru | on | on/off |
performance.nfs.io-threads | Aktivuje io-threads na straně NFS serveru | on | on/off |
performance.nfs.quick-read | Aktivuje zrychlené načítání z NFS serveru | on | on/off |
performance.nfs.read-ahead | Aktivuje predikci načítání souborů z GlusterFS svazku do paměti NFS serveru | on | on/off |
performance.nfs.stat-prefetch | Aktivuje stat-prefetch/md-cache na straně NFS serveru | on | on/off |
performance.nfs.write-behind | Aktivuje zpožděný zápis dat z paměti na GlusterFS svazek na straně NFS serveru | on | on/off |
Doplňkové parametry GlusterFS | |||
features.grace-timeout | Čas, po který je uchováván zámek procesu samoopravného mechanismu. | 10 - 1800 seund | |
features.quota-timeout | Nastavení časové kvóty pro keš na straně klienta. Nastavením časového limitu lze určit po jak dlouhé době se mají data ve vyrovnávací paměti považovat za platné a uložit na svazek. Ve výchozím stavu se ukládají ihned. | 0 | 0 - 3600 sekund |
features.lock-heal | Povoluje spuštění samoopravného mechanismus na zámky, v situaci kdy dojde k rozpadu síťového připojení. Velice dobře tento parametr funguje v kombinaci s features.grace-timeout | on | on/off |
features.read-only | Umožňuje přepnout celý GlusterFS svazek do režimu jen pro čtení (Týká se i připojení přes NFS) | off | on/off |
features.worm | Při aktivaci tohoto parametru na svazek přijde na každou operaci open() odpověď s EROFS (Souborový systém jen pro čtení) | on/off | |
Geo-replikace GlusterFS | |||
geo-replication.indexing | Je-li tento parametr aktivován, tak se provádí synchronizace změn z nodu Master na Slave automaticky. | off | on/off |
Odkazy
- http://www.gluster.org/community/documentation/ GlusterFS - dokumentace
- https://raobharata.wordpress.com/2013/11/27/glusterfs-block-device-translator/ GlusterFS - BD translator
- https://raobharata.wordpress.com/2012/10/29/qemu-glusterfs-native-integration/ GlusterFS a jeho integrace v Qemu
- http://blog.gluster.org/2013/11/a-gluster-block-interface-performance-and-configuration/ GlusterFS - výkon a konfigurace
- http://funwithlinux.net/2013/02/glusterfs-tips-and-tricks-centos/ GlusterFS na více rozhraních
- http://www.ovirt.org/Change_network_interface_for_Gluster GlusterFS - změna síťového rozhraní
- http://www.gluster.org/community/documentation/index.php/Gluster_3.2:_Setting_Volume_Options
- http://www.gluster.org/community/documentation/index.php/Documenting_the_undocumented#Not_available_through_CLI