DRBD, “Raid 1” de discs per xarxa

Objectiu:

Configurarem dues màquines per a que repliquin els seus discs per xarxa i estiguin en tot moment actualitzats. D’aquesta manera tenim una còpia remota de les dades que podem utilitzar sobre tot en un entorn d’alta disponibilitat.

Per què DRBD?

DRBD s’ha convertit en l’estàndard de lliure distribució en l’àmbit de replicació per xarxa de discs. Existeixen alternatives de pagament, però amb un cost astronòmic.

Utilitzarem aquesta base per a posteriors tutorials d’alta disponibilitat amb heartbeat i Xen.

Obtenció del software necessari:

Per a realitzar la instal·lació del mòdul i de les eines de gestió tenim dues opcions:

  • Utilitzar apt-get
  • Instal·lar des de les fonts tar.gz

Les dues funcionaran correctament però en el nostre cas, ja que utilitzarem Debian Etch, preferim la font per utilitzar la versió 8 i no la 7 dels repositoris. La versió 8 permet l’ús de dos discs primaris, no indispensable en segons quins entorns però si interessant per a entorns de discs en cluster.

Les fonts les podem trobar a la pàgina de descarregues de drbd.

$ cd /usr/src
$ wget http://oss.linbit.com/drbd/8.0/drbd-8.0.11.tar.gz

Instal·lació:

Com s’ha comentat instal·larem drbd sobre Debian Etch. Es suposarà doncs completada una instal·lació com la que s’explica en aquesta entrada.

Els noms de les dues màquines seran:

  • drbd1
  • drbd2

Haurem de configurar, a més, a les dues màquines, una partició o utilitzar un disc extra que és el que replicarem. En el tutorial de Debian vam deixar lliure gran part del disc principal. Allà crearem la partició nova amb fdisk.

La comanda a executar és:

$ fdisk /dev/sda

NOTA: Aquí s’utilitza /dev/sda ja que els discs detectats són SATA però si teniu discs IDE aleshores és probable que surti com a /dev/hda, utilitzeu a la comanda anterior el vostre.

Dins del programa fdisk fem:

  • Nova partició: n
  • Primaria: p
  • Número de partició: 3
  • Primer cilindre (per defecte): Intro
  • Últim cilindre (per defecte): Intro
  • Guardem els canvis al disc: w

Ja tenim la partició llesta que replicarem per xarxa, no estarà disponible fins que reiniciem ja que l’hem creat al mateix disc de sistema.

Abans de reiniciar prepararem la resta de components.

Per poder compilar sense problemes el modul drbd instal·larem les eines necessàries:

$ apt-get install build-essential linux-headers-`uname -r` flex bison

Ja estem preparats per compilar les fonts. Les comandes a executar són les següents:

$ cd /usr/src
$ tar zxvf drbd-8.0.11.tar.g
$ cd /drbd-8.0.11
$ make
$ make install

Habilitem la carrega del mòdul al boot del sistema:

$ update-rc.d drbd defaults

En aquest punt el mòdul encara no està carregat al kernel, ja està bé, primer configurarem l’arxiu /etc/drbd.conf. Tot i que aquest arxiu té un munt d’opcions mostrem aquí un exemple bàsic per a sincronitzar les dues particions que hem creat amb fdisk.

Primer fem una còpia de l’arxiu original per si de cas:

$ cp /etc/drbd.conf /etc/drbd.conf.orig

L’arxiu, després de modicar-lo, podria quedar com ara aquest:

$ cat /etc/drbd.conf
global { 
    usage-count yes; 
}

common { 
    syncer { 
        rate 10M; 
    }
}

resource r0 {
    protocol C;
    handlers {
        pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";
        pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";
        local-io-error "echo o > /proc/sysrq-trigger ; halt -f";
    }

    startup {
        degr-wfc-timeout 120;
    }

    disk {
        on-io-error   detach;
    }

    net {
        after-sb-0pri disconnect;
        after-sb-1pri disconnect;
        after-sb-2pri disconnect;
    }

    syncer {
        rate 10M;
        al-extents 257;
    }

    on drbd1 {
        device     /dev/drbd0;
        disk       /dev/sda3;
        address    ip_drbd1:7788
        flexible-meta-disk  internal;
    }

    on drbd2 {
        device    /dev/drbd0;
        disk      /dev/sda3;
        address   ip_drbd2:7788;
        meta-disk internal;
    }
}

NOTES IMPORTANTS:

  • Aquest arxiu ha d’estar a les dues màquines a /etc/drbd.conf i han d’ésser iguals.
  • Els noms que apareixen a l’arxiu, drbd1 i drbd2, han de ser els noms de les màquines respectives, que s’obtenen d’executar name -n

En aquest punt ja podem reiniciar la màquina.

Un cop reiniciada la màquina procedim a crear les zones de meta-data del disc a replicar:

$ drbdadm create-md r0
$ drbdadm up r0

En aquest punt podem mirar quin estat presenta la replicació de discs:

$ cat /proc/drbd
version: 8.0.11 (api:86/proto:86)
GIT-hash: b3fe2bdfd3b9f7c2f923186883eb9e2a0d3a5b1b build by root@debian1, 2008-04-10 13:28:30
0: cs:SyncSource st:Secondary/Secondary ds:UpToDate/Inconsistent C r---
ns:845824 nr:0 dw:0 dr:845824 al:0 bm:51 lo:0 pe:0 ua:0 ap:0
[==>.................] sync'ed: 15.6% (4500/5326)M
finish: 0:06:00 speed: 12,784 (10,312) K/sec
resync: used:0/31 hits:52812 misses:52 starving:0 dirty:0 changed:52
act_log: used:0/257 hits:0 misses:0 starving:0 dirty:0 changed:0

Com podem veure la situació és que els dos discs es consideren secundaris i que la còpia és inconsistent. Anem a arrencar la primera sincronització.

NOTA IMPORTANT: Amb la comanda següent s’esborraran totes les dades de la partició /dev/sda3 de la màquina drbd2, aneu amb compte.

$ drbdadm -- --overwrite-data-of-peer primary r0

Esperem una estona a que els dos discs estiguin sincronitzats i podem considerar aquest tutorial acabat. La sincronia es pot monitoritzar executant:

$ watch cat /proc/drbd

Tenim un nou dispositiu a /dev/drbd0 amb el que podem treballar (crear sistemes de fitxers, muntar…) com si fos qualsevol altre disc. Totes les dades que es modifiquin a un disc es replicaran a l’altre automàticament.

Es recomana llegir l’excel·lent documentació de LinBit al respecte. Es pot trobar en aquest enllaç (en anglès): Drbd User’s Guide