Introduction

DRBD est un système de réplication de disque au travers d’un réseau. Il permet de « recopier » le contenu d’un disque vers un serveur distant.

Ceci est particulièrement intéressant (et utilisé) dans les architectures hautement disponibles (Architectures « HA »).

Principe

DRBD est un module noyau qui se comporte comme un driver de système de fichier. Toutes modification est « interceptée » et envoyée au miroir via le réseau.

Par défaut, DRBD fonctionne en mode Primaire / Secondaire. Ceci signifie que l’un des disques supporte les lectures / écritures, mais que le second n’accepte que les opérations en lecture.

Dans les dernières version de DRBD, il est possible d’obtenir des disques répliqués en mode primary / primary. Cela signifie que les 2 disques supportent les écritures. Encore faut-il un système de fichier qui le supporte. Ce n’est pas le cas de systèmes de fichiers « classiques » tels que EXT2/3/4, ReiserFS, …

Néanmoins, ce système est intéressant dans le cas du fail-over IP: vous n’aurez pas besoin d’activer les écriture sur le disque de secours, c’est déjà fait ! Par exemple, DRBD en mode primary / primary est très intéressant pour la virtualisation avec, par exemple, Xen.

Configuration

Globalement, tout se passe dans le fichier /etc/drbd.conf sous GNU/Debian Linux.

La configuration suivante suppose:

  • 2 PC avec 1 interface réseau Giga dédiée. Le premier a l’IP 192.168.0.0/31, le second 192.168.0.1/31
  • Un disque configuré en LVM avec un VG test_vg.

Ceci définit le comportement global de DRBD:

Configuration de DRBD: /etc/drbd.conf
global {
	usage-count no;
	minor-count 16;
    # disable-ip-verification;
}

common {
	syncer {
		rate 33M;
	}
	protocol C;
}

Pour chaque ressource DRBD:

Configuration de la ressource DRBD: à ajouter dans /etc/drbd.conf
resource lv_test {
  on node1 {
    device /dev/drbd1;
    disk /dev/test_vg/lv_test;
    meta-disk internal;
    address 192.168.0.1:7801;
  }
  on node2 {
    device /dev/drbd1;
    disk /dev/test_vg/lv_test;
    meta-disk internal;
    address 192.168.0.0:7801;
  }
  net { 
    allow-two-primaries; 
    after-sb-0pri discard-zero-changes;  
    after-sb-1pri discard-secondary;  
    timeout 60;
    connect-int 10;
    ping-int 10;
    max-buffers 2048;
    max-epoch-size 2048;
  }
  startup { 
    become-primary-on both;
    wfc-timeout 120;
    degr-wfc-timeout 120;
  }
}

Ici, nous définissons le comportement de DRBD pour une ressource. DRBD va créer un device /dev/drbd1 qui s’appuiera sur /dev/test_vg/lv_test

La réplication s’eefectuera entre le node1 (IP 192.168.0.1:7801) et le node2 (IP 192.168.0.0:7801)

Résumé des principales commandes

Une fois la ressource définie, voici les commandes à exécuter sur les nodes:

Commandes à exécuter sur chaque node Xen
drbdadm create-md lv_test drbdadm attach lv_test drbdadm syncer lv_test drbdadm connect lv_test
Commandes à exécuter sur le noeud défini pour être primaire de la ressource DRBD
drbdadm -- --overwrite-data-of-peer primary lv_test

Une fois la synchro terminée, on peut activer le mode primary/primary sur le noeud secondaire.

Activation du mode primary/primary sur le node secondaire
drbdadm primary lv_test

À chaque étape, à partir du moment où DRBD est actif, vous pouvez contrôler l’état de DRBD.

Exemple de contrôle de DRBD
cat /proc/drbd
version: 8.0.14 (api:86/proto:86)
GIT-hash: bb447522fc9a87d0069b7e14f0234911ebdab0f7 build by phil@fat-tyre, 2008-11-12 16:40:33

 1: cs:Connected st:Primary/Primary ds:UpToDate/UpToDate C r---
    ns:102684032 nr:483328 dw:103167360 dr:25266000 al:5386 bm:116 lo:0 pe:0 ua:0 ap:0
	resync: used:0/61 hits:30150 misses:58 starving:0 dirty:0 changed:58
	act_log: used:0/127 hits:25665622 misses:5577 starving:0 dirty:191 changed:5386

Voilà, notre « disque » répliqué est prêt. À partir d’ici, il n’y a plus de primaire ou de secondaire. Il y a 2 noeud DRBD primaires ! Le premier qui écrit gagne 😉