DRBD

Z Wiki UnArt Slavičín
Skočit na navigaciSkočit na vyhledávání

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