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

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 drbd2

Krok 2. Nastavujeme uzly:

Na oboch serveroch vykonávame:

drbdadm create-md drbd0

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

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Získavame nasledovné:

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

Môžeme spustiť synchronizáciu. Na prvom uzle je potrebné vykonať:

drbdadm primary --force drbd0

Sledujeme stav:

cat /proc/drbd

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

Skvele, synchronizácia sa začala. Čakáme na jej dokončenie a vidíme výsledok:

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

Krok 3. Spúšťame synchronizáciu na druhej node:

drbdadm primary --force drbd0

Získavame nasledovné:

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

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.

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

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 ocfs2cluster

Potom 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 0

Adresá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

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster