Klastrové úložisko pre malé webové klastre založené na drbd+ocfs2

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

Klastrové úložisko pre malé webové klastre založené na drbd+ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Získame nasledovné:

Klastrové úložisko pre malé webové klastre založené na drbd+ocfs2

Môžete spustiť synchronizáciu. Na prvom uzle musíte vykonať:

drbdadm primary --force drbd0

Pozrime sa na stav:

cat /proc/drbd

Klastrové úložisko pre malé webové klastre založené na drbd+ocfs2

Skvelé, synchronizácia sa začala. Počkáme až do konca a uvidíme obrázok:

Klastrové úložisko pre malé webové klastre založené na drbd+ocfs2

Krok 3. Spustite synchronizáciu na druhom uzle:

drbdadm primary --force drbd0

Získame nasledovné:

Klastrové úložisko pre malé webové klastre založené na drbd+ocfs2

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.

Klastrové úložisko pre malé webové klastre založené na drbd+ocfs2

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

Pridať komentár