GlusterFS
Strategija - turėti dviejuose serveriuose tuos pačius sinchronizuojamus duomenis. Tam tikslui šiame straipsnyje naudosime tinklo skalės pridedamąją failų sistemą GlusterFS, RedHat kuriamą ir tobulinamą tinklo failų sistema užtikrins duomenų sinchronizavimą tarp serverių. GlusterFS funkcionalumas yra gana platus, jis palaiko failais paremtus veidrodžius (ang. mirrors), failais paremtą apkrovos balansavimą, automatinį skirstymą įskaitant numatytąjį disko spartinimą (caching), saugyklos kvotas ir snapshotus.
Diegimas
Abiejuose serveriuose įdiegiame GlusterFS (žiūrime, kad atitiktų versijos):
sudo apt-get install glusterfs-server sudo systemctl start glusterd
Paruošimas
Surašome statinius hostus (į abu serverius) kuriuos naudosime, į /etc/hosts:
x.x.x.x gluster0.domenas.lt gluster0 y.y.y.y gluster1.domenas.lt gluster1
Adresai gali būti vidiniai (jeigu naudojame vidiniame tinkle) arba išoriniai (jeigu naudojama už firewall, būtina praforwardinti portus)
NAT strategija (portu forwardinimas)
- 24007 – Gluster Daemon
- 24008 – Management
- 49152 – Kiekvienas brickas kiekvienam volumui reikalauja individualaus porto. Kiekvienam naujam brickui bus naudojamas naujas portas, pradedant nuo 49152. Jeigu turite voluma su dviem brick'ais, jums reiks atidaryti portus (49152 – 49153).
- 38465 – 38467 – Reikalingi jeigu naudojamas Gluster NFS servisas.
Šie portai yra TCP ir UDP:
- 111 – portmapper
Pratestuojame sujungiamumą
Norint pradėti kurti volumus, pirmiausia reiktų patikrinti sujungiamumą tarp serverių, paleidžiame (iš pirmojo)
gluster peer probe gluster1.domenas.lt
Jeigu matome:
peer probe: success
Komunikavimas pavyko! (lieka tą patį padaryti iš antrojo serverio). O susijungimų statusus galima peržvelgti šia komanda:
sudo gluster peer status
Jeigu reikia išimti peer
gluster peer detach <hostname>
Viskam pavykus ir susijungus, galima pradėti kurti failų sistemos debesį
Failų sistemos debesies kūrimas
Kadangi mes suinteresuoti, kad būtų kuo didesnis duomenų pasiekiamumas, debesį darysim su replikacijos funkcionalumu. Tai leis mums turėti keletą duomenų kopijų, tuo atveju jeigu nubaustų dievas ir atjungtų vieną iš serverių. Taipogi darysime replikacijos nustatymą "2" (nurodymas kiek serverių sujungiame). Tai nurodys, kad norime dviejų identiškų duomenų kopijų kiekviename serveryje, o visas sukūrimo komanda atrodys maždaug taip:
sudo gluster volume create debesis replica 2 gluster0.domenas.lt:/mnt/debesis gluster1.domenas.lt:/mnt/debesis force
Rezultate turime gauti:
volume create: debesis: success: please start the volume to access data
Šie žargonai sukurs voluma pavadinimu debesis. Iš šios direktorijos (/mnt/debesis) failai bus sinchronizuojami palei visus sujungtus serverius, jeigu šį direktorija (/mnt/debesis) neegzistuoja, po pastarosios komandos ji bus sukurta.
Paleidimas
Turime sukurtą volumą, bet jis nėra aktyvus. Suaktyvinti volumą "debesis" galima parašę komandą:
sudo gluster volume start debesis
Jeigu gauname rezultatą:
volume start: debesis: success
Viskas ok ir galime naudoti naujai sukurtą failų sistemą tinkle.
Priėjimo ribojimas (saugumas)
Dabar, kai turime paruoštą ir sutvarkytą GlusterFS būtina pasirūpinti jo saugumu ir užrakinti nuo pašalinių akių. Po defaultu bet koks kompiuteris gali patekti į mūsų debesį, norint duoti priėjimus tik tam tikriems ip (klientams, nodams) reikia rašyti šią komandą (viename iš serverių):
sudo gluster volume set debesis auth.allow gluster0_client_ip,gluster1_client2_ip
Norint vėl grąžinti visą priėjimą rašome:
sudo gluster volume set volume1 auth.allow *
Kitos reikalingos GlusterFS komandos
Kai pradėsite žaisti ir konfigūruoti GlusterFS saugyklą, galite pasimesti tarp galybė komandų bei nuostatų, nors jums reikia paprastų, pvz.: kaip pažiūrėti saugyklos ir volumų info, čia aprašysisu keleta pagalbinių komandų, padedančių geriau pažinti jūsų saugyklą.
- Jeigu norite sužinoti informaciją apie visas saugyklos volumus
sudo gluster volume info
- Norint sužinoti kokie peer'ai (klientai) prisijungę prie saugyklos:
sudo gluster peer status
- Jeigu norite pamatyti detalesnes volumo statistikas iš pažiūrėti kaip jis veikia, pirmiausia įjunkite profiliavimą:
sudo gluster volume profile debesis start
Kai komanda bus baigta galime peržiūrėti surinktus rezultatus, šia komanda:
sudo gluster volume profile debesis info
- Norint pamatyti bendrinę informaciją ir susijusius dalykus, rašome:
sudo gluster volume status
- Taip pat galime patekti i GlusterFS valdymo konsolę (iš ten tiesiogiai galėsime vykdyti šias komandas nesikreipiant į pačią konsolę):
sudo gluster
Toliau galite rašyti help ir t.t.
Klientų pajungimas prie saugyklos
Saugyklą galima naudoti ir klientų kompiuteriuose per fusefs paremtą (vartotojo lygio) failų sistemą, ji bus montuojama kaip papildomas diskas (nereiks pilnos sinchronizacijos kliento kompiuteryje), įdiegiame kliento PĮ:
sudo apt-get install glusterfs-client
Susikuriame kur nors direktoriją kur montuosime nutolusią saugyklą:
sudo mkdir /media/debesis
Montuojame nutolusią saugyklą:
sudo mount -t glusterfs gluster0.domenas.lt:/debesis /media/debesis
Galime patikrinti ar matome failus
ls /mnt/debesis
Performance tuning
gluster volume set <VOLUMAS> performance.cache-size 2GB gluster volume set <VOLUMAS> performance.io-thread-count 16 gluster volume set <VOLUMAS> server.event-threads 4
Perziureti pakeitimus galima komanda:
gluster volume info <VOLUMAS>
Problemų sprendimas
Nesimountina sistemos startavimo metu
kišam šią eilutę į /etc/rc.local
sleep 5;mount -a&
Redaguojam /etc/init/mounting-glusterfs.conf, kad atrodytų taip:
author "Louis Zuckerman <me@louiszuckerman.com>" description "Block the mounting event for glusterfs filesystems until the network interfaces are running" instance $MOUNTPOINT start on mounting TYPE=glusterfs task script if status glusterfs-server; then start wait-for-state WAIT_FOR=glusterfs-server WAIT_STATE=running \ WAITER=mounting-glusterfs-$MOUNTPOINT fi end script
Nestartuoja nginx arba apache po montavimo
Kišam šią eilutę į /etc/rc.local
sleep 3;systemctl restart nginx&
Sinchonizacija is vieno peer'o
gluster volume sync <HOSTNAME> [all|<VOLNAME>] - sync the volume information from a peer