Klastrové úložiště pro malé webové klastrů na bázi drbd+ocfs2

O čem budeme mluvit:
Jak rychle nasadit sdílené úložiště pro dva servery na bázi řešení drbd+ocfs2.

Pro koho to bude užitečné:
Tento tutoriál bude užitečný systémovým administrátorům a všem, kteří vybírají způsob realizace úložiště nebo chtějí vyzkoušet toto řešení.

Od jakých řešení jsme upustili a proč

Často se setkáváme se situací, kdy je třeba realizovat na malém webovém clusteru sdílené úložiště s dobrou výkonností pro čtení i zápis. Zkoušeli jsme různé varianty realizace sdíleného úložiště pro naše projekty, ale málo co bylo schopno uspokojit nás najednou podle několika ukazatelů. Nyní vám povíme proč.

  • Glusterfs nám nevyhovoval výkonností pro čtení a zápis, objevovaly se problémy s současným čtením velkého počtu souborů, bylo to s vysokou zátěží CPU. Problém s čtením souborů by se dal vyřešit přímým přístupem k brickům, ale to není vždy možné a celkově je to nepřijatelné.

  • Ceph nás neoslovil přehnanou složitostí, která může být škodlivá u projektů se 2-4 servery, servery, zejména pokud projekt pak spravují. Opět jsou zde vážná omezení výkonnosti, která nutí budovat samostatné úložišťové clustery, stejně jako u glusterfs.

  • Použití jednoho nfs serveru pro realizaci sdíleného úložiště vyvolává otázky z hlediska odolnosti proti výpadkům.

  • s3 — skvělé populární řešení pro určité úkoly, ale není to souborový systém, což omezuje oblast použití.

  • lsyncd. Pokud už jsme začali mluvit o „ne-souborových systémech“, stojí za to se podívat i na toto populární řešení. Nejenže není vhodné pro obousměrnou synchronizaci (ale pokud se moc chce, tak to lze), ale také nestabilně funguje na velkém počtu souborů. Příjemným doplněním je, že je jednovláknové. Důvodem je architektura programu: využívá inotify pro monitorování objektů práce, které se zapíná při spuštění a při opětovném skenování. Jako prostředek přenosu se používá rsync.

Tutoriál: jak nasadit sdílené úložiště na bázi drbd+ocfs2

Jedním z nejpohodlnějších řešení pro nás byl spojení ocfs2+drbd. Nyní vám povíme, jak rychle nasadit sdílené úložiště pro dva servery na bázi databázových řešení. Ale nejdříve něco o komponentech:

DRBD — úložný systém z standardní dodávky Linuxu, který umožňuje replikaci dat mezi servery po blocích. Hlavní použití spočívá v budování odolných úložišť.

OCFS2 — souborový systém, který umožňuje sdílené používání stejného úložiště více systémy. Je součástí dodávky Linuxu a představuje jádrový modul a uživatelský nástroj pro práci s FS. OCFS2 lze použít nejen nad DRBD, ale také nad iSCSI s vícero připojeními. V našem příkladu používáme DRBD.

Všechny akce se provádějí na ubuntu serveru 18.04 v minimální konfiguraci.

Krok 1. Nastavujeme DRBD:

V souboru /etc/drbd.d/drbd0.res popisujeme naše virtuální blokové zařízení /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žívat stejné blokové zařízení pro ukládání metadat
device /dev/drbd0 — používat /dev/drbd0 jako cestu k drbd.
disk /dev/vdb1 — používat /dev/vdb1
syncer { rate 1000M; } — používat gigabitovou propustnost kanálu
allow-two-primaries — důležitá volba, která umožňuje přijímat změny na dvou primárních serverech
after-sb-0pri, after-sb-1pri, after-sb-2pri — volby odpovídající za akce uzlu při zjištění splitbrain. Podrobnosti lze nalézt v dokumentaci.
become-primary-on both — nastavuje obě uzly na primární.

V našem případě máme dvě naprosto identické VM s vyhrazenou virtuální sítí s propustností 10 gigabitů.

V našem příkladu jsou síťové názvy dvou uzlů clusteru — drbd1 a drbd2. Pro správnou funkci je nutné přiřadit v /etc/hosts názvy a IP adresy uzlů.

10.10.10.192 drbd1
10.10.10.193 drbd2

Krok 2. Nastavujeme uzly:

Na obou serverech provádíme:

drbdadm create-md drbd0

Klastrové úložiště pro malé webové klastrů na bázi drbd+ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Dostaneme následující:

Klastrové úložiště pro malé webové klastrů na bázi drbd+ocfs2

Můžeme spustit synchronizaci. Na prvním uzlu je potřeba provést:

drbdadm primary --force drbd0

Díváme se na stav:

cat /proc/drbd

Klastrové úložiště pro malé webové klastrů na bázi drbd+ocfs2

Skvěle, synchronizace začala. Čekáme na dokončení a vidíme obrázek:

Klastrové úložiště pro malé webové klastrů na bázi drbd+ocfs2

Krok 3. Spouštíme synchronizaci na druhém uzlu:

drbdadm primary --force drbd0

Dostaneme následující:

Klastrové úložiště pro malé webové klastrů na bázi drbd+ocfs2

Nyní můžeme zapisovat do drbd ze dvou serverů.

Krok 4. Instalace a nastavení ocfs2.

Použijeme dost triviální konfiguraci:

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 potřeba ji zapsat do /etc/ocfs2/cluster.conf na obou nodech.

Vytváříme FS na drbd0 na libovolném nodu:

mkfs.ocfs2 -L "testVol" /dev/drbd0

Tady jsme vytvořili FS s označením testVol na drbd0 s použitím výchozích parametrů.

Klastrové úložiště pro malé webové klastrů na bázi drbd+ocfs2

V /etc/default/o2cb je nutné nastavit (jak v našem konfiguračním souboru)

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

a provést na každém nodu:

o2cb register-cluster ocfs2cluster

Poté zapneme a přidáme k automatickému spouštění všechny potřebné jednotky:

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

Část z toho již bude spuštěna během nastavení.

Krok 5. Přidání mount pointů do fstab na obou nodech:

/dev/drbd0 /media/shared ocfs2 defaults,noauto,heartbeat=local 0 0

Adresář /media/shared musí být vytvořen předem.

Tady používáme volby noauto, což znamená, že FS nebude připojena při startu (preferuji připojovat síťové FS pomocí systemd) a heartbeat=local, což znamená, že používáme službu heartbeat na každém nodu. Existuje také global heartbeat, který je více vhodný pro velké clustery.

Dále můžeme připojit /media/shared a zkontrolovat synchronizaci obsahu.

Hotovo! V důsledku toho získáváme více-méně odolné úložiště s možností škálování a slušným výkonem.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster