O čom sa budeme baviť:
Ako rýchlo nasadiť zdieľané úložisko pre dva servery založené na riešeniach drbd+ocfs2.
Pre koho to bude užitočné:
Návod bude užitočný pre systémových administrátorov a každého, kto si zvolí spôsob implementácie úložiska alebo chce riešenie vyskúšať.
Aké rozhodnutia sme odmietli a prečo?
Často sa stretávame so situáciou, keď potrebujeme implementovať zdieľané úložisko s dobrým výkonom čítania a zápisu na malom webovom klastri. Vyskúšali sme rôzne možnosti implementácie zdieľaného úložiska pre naše projekty, no málokto nás dokázal uspokojiť vo viacerých ukazovateľoch naraz. Teraz vám povieme prečo.
- Glusterfs nás neuspokojil výkonom pri čítaní a zápise, problémy so súčasným čítaním veľkého množstva súborov a vysoká záťaž CPU. Problém s čítaním súborov by sa dal vyriešiť priamym prístupom k súborom, ale to nie je vždy použiteľné a vo všeobecnosti je to nesprávne.
- Cephovi sa nepáčila prílišná zložitosť, ktorá môže byť škodlivá na projektoch s 2-4 servermi, najmä ak je projekt následne udržiavaný. Opäť existujú vážne obmedzenia výkonu, ktoré nás nútia vytvárať samostatné klastre úložiska, ako v prípade glusterfov.
- Použitie jedného servera NFS na implementáciu zdieľaného úložiska vyvoláva otázky z hľadiska odolnosti voči chybám.
- s3 je vynikajúce populárne riešenie pre určitý rozsah úloh, ale nie je to súborový systém, čo zužuje jeho rozsah.
- lsyncd. Ak sme už začali hovoriť o „nesúborových systémoch“, potom stojí za to prejsť na toto populárne riešenie. Nielenže nie je vhodný na obojsmernú výmenu (ale ak naozaj chcete, tak môžete), navyše nefunguje stabilne na veľkom počte súborov. Príjemným doplnkom celej veci je, že je jednovláknová. Dôvod je v architektúre programu: na sledovanie pracovných objektov používa inotify, ktoré priraďuje pri štarte a pri opätovnom skenovaní. Ako prenosové médium sa používa rsync.
Návod: ako nasadiť zdieľané úložisko založené na drbd+ocfs2
Jedným z najpohodlnejších riešení pre nás bol odkaz ocfs2+drbd. Teraz vám povieme, ako môžete rýchlo nasadiť zdieľané úložisko pre dva servery na základe databázy riešení. Najprv však niečo o komponentoch:
DRBD - úložný systém zo štandardnej linuxovej distribúcie, ktorý umožňuje replikovať dáta medzi servermi v blokoch. Hlavnou aplikáciou je vytvorenie úložiska odolného voči chybám.
OCFS2 - súborový systém, ktorý poskytuje zdieľané používanie toho istého úložiska niekoľkými systémami. Súčasťou distribúcie Linuxu je modul jadra a nástroje používateľského priestoru na prácu s FS. OCFS2 je možné použiť nielen cez DRBD, ale aj cez iSCSI s viacerými pripojeniami. V našom príklade používame DRBD.
Všetky akcie sa vykonávajú na serveri ubuntu 18.04 v minimálnej konfigurácii.
Krok 1. Konfigurácia DRBD:
V súbore /etc/drbd.d/drbd0.res popisujeme naše virtuálne blokové zariadenie /dev/drbd0:
resource drbd0 {
syncer { rate 1000M; }
net {
allow-two-primaries;
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
}
startup { become-primary-on both; }
on drbd1 {
meta-disk internal;
device /dev/drbd0;
disk /dev/vdb1;
address 10.10.10.192:7789;
}
on drbd2 {
meta-disk internal;
device /dev/drbd0;
disk /dev/vdb1;
address 10.10.10.193:7789;
}
}
interný meta-disk — použiť rovnaké blokové zariadenia na ukladanie metadát
zariadenie /dev/drbd0 — použite /dev/drbd0 ako cestu k zväzku drbd.
disk /dev/vdb1 - použite /dev/vdb1
synchronizátor { rýchlosť 1000M; } — použite šírku pásma gigabitového kanála
povoliť-dve-primárne - dôležitá možnosť, ktorá umožňuje akceptovať zmeny na dvoch primárnych serveroch
po-sb-0pri, po-sb-1pri, po-sb-2pri — možnosti zodpovedné za akcie uzla, keď sa zistí splitbrain. Viac podrobností nájdete v dokumentácii.
stať sa primárnym na oboch — nastaví oba uzly na primárne.
V našom prípade máme dva absolútne identické virtuálne počítače s vyhradenou virtuálnou sieťou so šírkou pásma 10 gigabitov.
V našom príklade sú názvy sietí dvoch uzlov klastra drbd1 a drbd2. Pre správnu činnosť musíte zhodovať mená a IP adresy hostiteľov v /etc/hosts.
10.10.10.192 drbd1
10.10.10.193 drbd2
Krok 2. Nastavenie uzlov:
Na oboch serveroch prevádzkujeme:
drbdadm create-md drbd0
modprobe drbd
drbdadm up drbd0
cat /proc/drbd
Získame nasledovné:
Môžete spustiť synchronizáciu. Na prvom uzle musíte vykonať:
drbdadm primary --force drbd0
Pozrime sa na stav:
cat /proc/drbd
Skvelé, synchronizácia sa začala. Počkáme až do konca a uvidíme obrázok:
Krok 3. Spustite synchronizáciu na druhom uzle:
drbdadm primary --force drbd0
Získame nasledovné:
Teraz môžeme zapisovať do drbd z dvoch serverov.
Krok 4. Nainštalujte a nakonfigurujte ocfs2.
Použijeme pomerne triviálnu konfiguráciu:
cluster:
node_count = 2
name = ocfs2cluster
node:
number = 1
cluster = ocfs2cluster
ip_port = 7777
ip_address = 10.10.10.192
name = drbd1
node:
number = 2
cluster = ocfs2cluster
ip_port = 7777
ip_address = 10.10.10.193
name = drbd2
Treba to zapísať /etc/ocfs2/cluster.conf na oboch uzloch.
Vytvoríme FS na drbd0 na akomkoľvek uzle:
mkfs.ocfs2 -L "testVol" /dev/drbd0
Tu sme vytvorili súborový systém s označením testVol na drbd0 pomocou predvolených parametrov.
V /etc/default/o2cb musíte nastaviť (ako v našom konfiguračnom súbore)
O2CB_ENABLED=true
O2CB_BOOTCLUSTER=ocfs2cluster
a vykonať na každom uzle:
o2cb register-cluster ocfs2cluster
Potom zapneme a pridáme všetky jednotky, ktoré potrebujeme na automatické spustenie:
systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2
Niektoré z nich budú spustené už počas procesu nastavenia.
Krok 5. Pridajte body pripojenia do fstab na oboch uzloch:
/dev/drbd0 /media/shared ocfs2 defaults,noauto,heartbeat=local 0 0
Adresár /media/shared musí byť vytvorený vopred.
Tu používame voľby noauto, čo znamená, že súbor nebude pripojený pri štarte (preferujem pripojenie sieťových súborov cez systemd) a heartbeat=local, čo znamená použitie služby heartbeat na každom uzle. Existuje aj globálny srdcový tep, ktorý je vhodnejší pre veľké klastre.
Ďalej môžete namontovať /media/shared a skontrolujte synchronizáciu obsahu.
Hotovo! V dôsledku toho získame úložisko viac-menej odolné voči chybám so škálovateľnosťou a slušným výkonom.
Zdroj: hab.com