DRBD
Pro online replikaci dat používáme DRBD.
Vytvoření externího úložiště pro metadata
Při tvorbě DRBD zařízení budete nejčastěji chtít vytvořit jej nad LV, ve kterém už jsou nějaká data. DRBD ale potřebuje o každém svém zařízení udržovat metadata - např. bitovou mapu změn kvůli rychlejší synchronizaci. Metadata může uložit buď interně - přímo do LV, které chcete replikovat, nebo externě (do jiného LV). Interně se metadata ukládají na konec LV, tzn. pokud v něm máte nějaká data, musíte LV nejdříve zvětšit o patřičnou velikost. Externí úložiště je samozřejmě pohodlnější, a pokud bude i na jiném fyzickém disku, bude i rychlejší.
Vytvoříte jej např. takto:
lvcreate -L 256M -n drbd-meta-disk vg_main
Velikost 256MB stačí pro kapacitu 256MB * 32768 = 8 TB, viz návod Estimating meta data size, ale každý DRBD resource musí mít min. 128MB metadat - viz tento report.
Proto jako velikost metadat dejte 128MB * počet DRBD zařízení.
drbd.conf
Příklad:
resource vyuka-system { protocol C; startup { wfc-timeout 0; ## Infinite! degr-wfc-timeout 120; ## 2 minutes. become-primary-on xeric; } disk { on-io-error detach; } net { # allow-two-primaries; } syncer { } on xeric { device /dev/drbd0; disk /dev/vg_main/vyuka-system; address x.y.z.w:7789; meta-disk /dev/vg_main/drbd-meta-disk[0]; } on other-server { device /dev/drbd0; disk /dev/vg_main/vyuka-root; address x.y.z.v:7889; meta-disk /dev/vlam-server/drbd-meta-disk[0]; } }
Pozn.:
- od DRBD 8.3.2 (Debian Squeeze, Ubuntu 10.04..) lze prý místo drbd[0..9]+ psát drbd_{custom device name}. Zkoušel jsem to, ale nefunguje.
- od DRBD 8.4 (Debian Sid?) bude možné tvořit multi volume DRBD resource, tzn. všechny LV půjde synchronizovat přes jediné připojení.
Spuštění synchronizace
Rozchození je jednoduché - nejdřív vytvořte v /etc/drbd.conf popis vašich DRBD zařízení (DRBD target-ů) a pak spusťte tyto 3 příkazy:
Vytvoření DRBD zařízení:
root@xeric:#drbdadm create-md {DRBD_target_z_konfiguraku}
a to samé na druhém serveru:
root@other-server:#drbdadm create-md {DRBD_target_z_konfiguraku}
Podobně na obou serverech spustit:
Připojení storage k DRBD zařízení
drbdadm attach {DRBD_target_z_konfiguraku}
Připojení DRBD zařízení k protějšku na síti:
drbdadm connect {DRBD_target_z_konfiguraku}
Nebo předchozí 2 příkazy najednou:
drbdadm up {DRBD_target_z_konfiguraku}
Na prvním uzlu je potřeba nastavit příznak primary
drbdsetup /dev/drbd2 primary --do-what-I-say
Resp. v Debian Lenny
drbdsetup /dev/drbd2 primary -o
Změna v konfiguraci
Změna protějšího uzlu nebo jeho IP adresy
Na primary uzlu spusťte: odpojení od (staré) protistrany:
drbdadm disconnect nejaky_resource
Reload configurace drbd za provozu:
drbdadm adjust nejaky_resource
Připojení protistrany:
drbdadm connect nejaky_resource
Změna underlying device
Pokud na jednom uzlu změníte underlying blokové zařízení, ale ponecháte původní (externí) metadata, pak DRBD neudělá resync automaticky - musíte ho udělat ručně tak, že na secondary uzlu provedete
drbdadm invalidate nejaky_resource
nebo můžete vytvořit na změněném uzlu metadata znovu:
drbdadm create-md nejaky resource
Změna obsahu underlying device bez vědomí DRBD
Pokud změníte obsah underlying blokového zařízení bez vědomí DRBD, pak DRBD neudělá resync automaticky - musíte ho udělat ručně tak, že na změněném uzlu, který máte samozřejmě secondary, provedete
drbdadm invalidate nejaky_resource
Problém "Secondary/Secondary" po rebootu nebo restartu drbd
Defaultní konfigurace počítá s tím, že o nastavení "Primary" strany se postará HeartBeat. Pokud HeartBeat nemáte, pak vyberte jedno ze zařízení, které po rebootu zkusí být primární, a na oba stroje přidejte do konfiguráku následující řádek:
Resize DRBD resource
Resize drbd resource' resize může být spuštěno poté, co jsou LV na obou nodech resizovaná:
lvresize -L +2G /dev/vg00/example-disk
Zmena velikosti musi byt provadena na primarni node(druhy node musi byt v rezimu secondary)
drbdadm resize resource