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
modprobe drbd
drbdadm up drbd0
cat /proc/drbd
Získáme následující:
Můžete spustit synchronizaci. Na prvním uzlu musíte provést:
drbdadm primary --force drbd0
Podívejme se na stav:
cat /proc/drbd
Výborně, synchronizace začala. Počkáme až do konce a uvidíme obrázek:
Krok 3. Spusťte synchronizaci na druhém uzlu:
drbdadm primary --force drbd0
Získáme následující:
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ů.
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