O čom budeme rozprávať:
Ako rýchlo nasadiť spoločné úložisko pre dva servery založené na riešeniach drbd+ocfs2.
Pre koho to bude užitočné:
Tento tutoriál bude užitočný systémovým administrátorom a všetkým, ktorí si vyberajú spôsob realizácie úložiska alebo chcú vyskúšať riešenie.
Od akých riešení sme upustili a prečo
Často sa stretávame so situáciou, keď potrebujeme zrealizovať na malom webovom klastri spoločné úložisko s dobrými parametrami výkonu pri čítaní a zápise. Skúsili sme rôzne možnosti realizácie spoločného úložiska pre naše projekty, no málo čo nás dokázalo uspokojiť naraz vo viacerých aspektoch. Teraz vám povieme, prečo.
- Glusterfs nás neuspokojilo výkonom pri čítaní a zápise, objavili sa problémy so súbežným čítaním veľkého množstva súborov, bola vysoká záťaž na CPU. Problém s čítaním súborov sa dal vyriešiť priamym prístupom na bricky, ale to nie je vždy aplikovateľné a celkovo to nie je správne.
- Ceph nás nepresvedčil nadmernou zložitostou, ktorá môže byť škodlivá pri projektoch s 2-4 servermi, najmä ak projekt neskôr spravujú. Opäť sú tu vážne obmedzenia výkonu, ktoré vyžadujú budovanie samostatných storage klastrov, podobne ako s glusterfs.
- Používanie jedného nfs servera na realizáciu spoločného úložiska vyvoláva otázky pokiaľ ide o odolnosť voči zlyhaniu.
- s3 — vynikajúce obľúbené riešenie pre niektoré úlohy, ale nie je to ani súborový systém, čo obmedzuje oblasti použitia.
- lsyncd. Ak už hovoríme o „ne-súborových systémoch“, stojí za to sa zamyslieť aj nad týmto populárnym riešením. Nielenže nie je vhodné na obojsmernú výmenu (ale ak veľmi chceš, dá sa to), navyše stabilne nefunguje pri veľkom počte súborov. Príjemným doplnkom je, že je jednofónne. Príčina spočíva v architektúre programu: používa inotify na monitorovanie objektov práce, ktoré pripája pri spustení a pri opätovnom skenovaní. Na prenos sa používa rsync.
Tutoriál: ako nasadiť spoločné úložisko založené na drbd+ocfs2
Jedným z najpohodlnejších riešení pre nás sa stala kombinácia ocfs2+drbdTeraz vám ukážeme, ako rýchlo nastaviť spoločné úložisko pre dvoch serverov na báze riešení databáz. Ale najprv trochu o komponentoch:
DRBD je systém ukladania, ktorý je súčasťou štandardnej dodávky Linuxu a umožňuje replikáciu dát medzi servermi blokmi. Hlavné aplikácie spočívajú v vytváraní vysoko dostupných úložných systémov.
OCFS2 je súborový systém, ktorý umožňuje zdieľané použitie toho istého úložiska viacerými systémami. Je súčasťou dodávky Linuxu a predstavuje modul jadra a nástroje pre prácu so súborovým systémom. OCFS2 môžete použiť nielen na DRBD, ale aj na iSCSI s viacerými pripojeniami. V našom príklade používame DRBD.
Všetky kroky sa vykonávajú na Ubuntu Server 18.04 v minimálnej konfigurácii.
Krok 1. Nastavujeme 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;
}
} meta-disk internal — používať rovnaké blokové zariadenia na uchovávanie metadát
device /dev/drbd0 — používať /dev/drbd0 ako cestu k drbd.
disk /dev/vdb1 — používať /dev/vdb1
syncer { rate 1000M; } — využívať gigabitovú priepustnosť kanála
allow-two-primaries — dôležitá možnosť, ktorá umožňuje prijímať zmeny na dvoch primárnych serveroch
after-sb-0pri, after-sb-1pri, after-sb-2pri — možnosti, ktoré určujú akcie uzla pri zistení rozdelenia. Podrobnosti nájdete v dokumentácii.
become-primary-on both — nastavuje obe uzly ako primárne.
V našom prípade máme dve úplne identické VM, s vyhradenou virtuálnou sieťou s priepustnosťou 10 gigabitov.
V našom príklade sa sieťové názvy dvoch uzlov klastera nazývajú drbd1 a drbd2. Pre správnu funkčnosť je potrebné zodpovedajúco priradiť v /etc/hosts názvy a IP adresy uzlov.
10.10.10.192 drbd1
10.10.10.193 drbd2Krok 2. Nastavujeme uzly:
Na oboch serveroch vykonávame:
drbdadm create-md drbd0 
modprobe drbd
drbdadm up drbd0
cat /proc/drbdZískavame nasledovné:

Môžeme spustiť synchronizáciu. Na prvom uzle je potrebné vykonať:
drbdadm primary --force drbd0Sledujeme stav:
cat /proc/drbd 
Skvele, synchronizácia sa začala. Čakáme na jej dokončenie a vidíme výsledok:

Krok 3. Spúšťame synchronizáciu na druhej node:
drbdadm primary --force drbd0
Získavame nasledovné:

Teraz môžeme zapisovať do drbd z dvoch serverov.
Krok 4. Inštalácia a konfigurácia ocfs2.
Budeme používať dosť 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
Je potrebné zapísať do /etc/ocfs2/cluster.conf na oboch nodoch.
Vytvárame FS na drbd0 na ľubovoľnej node:
mkfs.ocfs2 -L "testVol" /dev/drbd0
Tu sme vytvorili FS s označením testVol na drbd0, pričom sme použili predvolené parametre.

V /etc/default/o2cb je potrebné nastaviť (ako v našej konfiguračnej súbore)
O2CB_ENABLED=true
O2CB_BOOTCLUSTER=ocfs2cluster a vykonať na každej node:
o2cb register-cluster ocfs2clusterPotom zapneme a pridáme do automatického spúšťania všetky potrebné jednotky:
systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2Časť z toho už bude spustená v priebehu konfigurácie.
Krok 5. Pridávame body pripojenia do fstab na oboch nodoch:
/dev/drbd0 /media/shared ocfs2 defaults,noauto,heartbeat=local 0 0Adresár /media/shared musí byť vytvorený vopred.
Tu používame možnosti noauto, čo znamená, že FS nebude pripojená pri štarte (preferujem pripojovať sieťové FS cez systemd) a heartbeat=local, čo znamená používanie služby heartbeat na každej node. Existuje tiež global heartbeat, ktorý je viac vhodný pre väčšie clustre.
Ďalej môžeme pripojiť /media/shared a skontrolovať synchronizáciu obsahu.
Hotovo! Ako výsledok dostávame viac-menej odolné úložisko s možnosťou škálovania a slušnou výkonnosťou.
Zdroj: habr.com
