Clusterové úložiště pro malé webové clustery založené na drbd+ocfs2

O čem si budeme povídat:
Jak rychle nasadit sdílené úložiště pro dva servery založené na řešení drbd+ocfs2.

Pro koho to bude užitečné:
Tutoriál bude užitečný pro systémové administrátory a každého, kdo volí způsob implementace úložiště nebo chce řešení vyzkoušet.

Jaká rozhodnutí jsme odmítli a proč?

Často se setkáváme se situací, kdy potřebujeme implementovat sdílené úložiště s dobrým výkonem pro čtení a zápis na malém webovém clusteru. Vyzkoušeli jsme různé možnosti implementace sdíleného úložiště pro naše projekty, ale málokdo nás dokázal uspokojit ve více ukazatelích najednou. Nyní vám řekneme proč.

  • Glusterfs nás neuspokojoval výkonem při čtení a zápisu, problémy se současným čtením velkého množství souborů a velká zátěž CPU. Problém se čtením souborů by mohl být vyřešen přímým přístupem z cihly, ale to není vždy použitelné a je obecně nesprávné.

  • Cephovi se nelíbila přílišná složitost, která může u projektů se 2-4 servery škodit, zvláště pokud je projekt následně udržován. Opět existují vážná omezení výkonu, která nás nutí budovat samostatné clustery úložiště, jako je tomu u glusterfů.

  • Použití jednoho serveru NFS k implementaci sdíleného úložiště vyvolává otázky z hlediska odolnosti proti chybám.

  • s3 je vynikající populární řešení pro určitý rozsah úloh, ale nejedná se o souborový systém, což zužuje jeho rozsah.

  • lsyncd. Pokud jsme již začali mluvit o „nesouborových systémech“, pak stojí za to projít toto oblíbené řešení. Nejen, že se nehodí pro obousměrnou výměnu (ale pokud opravdu chcete, tak můžete), také nefunguje stabilně na velkém množství souborů. Příjemným doplňkem celé věci je, že je jednovláknový. Důvod je v architektuře programu: používá inotify ke sledování pracovních objektů, které přiřazuje při spuštění a při opětovném skenování. Jako přenosové médium se používá rsync.

Kurz: jak nasadit sdílené úložiště založené na drbd+ocfs2

Jedním z nejpohodlnějších řešení pro nás byl odkaz ocfs2+drbd. Nyní vám řekneme, jak můžete rychle nasadit sdílené úložiště pro dva servery založené na databázi řešení. Nejprve ale něco o komponentách:

DRBD - úložný systém ze standardní distribuce Linuxu, který umožňuje replikovat data mezi servery v blocích. Hlavní aplikací je vytvořit úložiště odolné proti chybám.

OCFS2 - souborový systém, který poskytuje sdílené používání stejného úložiště několika systémy. Součástí distribuce Linuxu je modul jádra a nástroje uživatelského prostoru pro práci s FS. OCFS2 lze používat nejen přes DRBD, ale také přes iSCSI s více připojeními. V našem příkladu používáme DRBD.

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

Krok 1. Konfigurace 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;
}
}

interní meta-disk — k ukládání metadat použijte stejná bloková zařízení
zařízení /dev/drbd0 — použijte /dev/drbd0 jako cestu ke svazku drbd.
disk /dev/vdb1 - použijte /dev/vdb1
synchronizátor { rychlost 1000M; } — použijte šířku pásma gigabitového kanálu
povolit-dvě primární volby - důležitá možnost, která umožňuje přijímat změny na dvou primárních serverech
po-sb-0pri, po-sb-1pri, po-sb-2pri — možnosti zodpovědné za akce uzlu, když je detekován splitbrain. Více podrobností naleznete v dokumentaci.
stát se primárním na obou — nastaví oba uzly na primární.

V našem případě máme dva naprosto identické virtuální počítače s vyhrazenou virtuální sítí s šířkou pásma 10 gigabitů.

V našem příkladu jsou názvy sítí dvou uzlů klastru drbd1 a drbd2. Pro správnou funkci je třeba, aby se jména a IP adresy hostitelů shodovaly v /etc/hosts.

10.10.10.192 drbd1
10.10.10.193 drbd2

Krok 2. Nastavení uzlů:

Na obou serverech provozujeme:

drbdadm create-md drbd0

Clusterové úložiště pro malé webové clustery založené na drbd+ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Získáme následující:

Clusterové úložiště pro malé webové clustery založené na drbd+ocfs2

Můžete spustit synchronizaci. Na prvním uzlu musíte provést:

drbdadm primary --force drbd0

Podívejme se na stav:

cat /proc/drbd

Clusterové úložiště pro malé webové clustery založené na drbd+ocfs2

Výborně, synchronizace začala. Počkáme až do konce a uvidíme obrázek:

Clusterové úložiště pro malé webové clustery založené na drbd+ocfs2

Krok 3. Spusťte synchronizaci na druhém uzlu:

drbdadm primary --force drbd0

Získáme následující:

Clusterové úložiště pro malé webové clustery založené na drbd+ocfs2

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

Krok 4. Nainstalujte a nakonfigurujte ocfs2.

Použijeme poměrně 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 to zapsat /etc/ocfs2/cluster.conf na obou uzlech.

Vytvoříme FS na drbd0 na libovolném uzlu:

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

Zde jsme vytvořili souborový systém s označením testVol na drbd0 s použitím výchozích parametrů.

Clusterové úložiště pro malé webové clustery založené na drbd+ocfs2

V /etc/default/o2cb musíte nastavit (jako v našem konfiguračním souboru)

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

a spusťte na každém uzlu:

o2cb register-cluster ocfs2cluster

Poté zapneme a přidáme všechny jednotky, které potřebujeme k automatickému spuštění:

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

Některé z nich budou spuštěny již během procesu nastavení.

Krok 5. Přidejte přípojné body do fstab na obou uzlech:

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

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

Zde používáme možnosti noauto, což znamená, že soubor nebude připojen při startu (raději připojuji síťové soubory přes systemd) a heartbeat=local, což znamená použití služby heartbeat na každém uzlu. Existuje také globální srdeční tep, který je vhodnější pro velké clustery.

Dále můžete namontovat /media/shared a zkontrolujte synchronizaci obsahu.

Hotovo! Ve výsledku tak získáme úložiště víceméně odolné proti chybám se škálovatelností a slušným výkonem.

Zdroj: www.habr.com

Přidat komentář