RAID Réseau multi-maîtres avec DRBD 0.8

Posted by

DRBD est un système permettant en quelques sortes de faire du RAID de partitions au travers du réseau en vue de faire un système en haute disponibilité. J’avais déjà joué avec DRBD 0.7 pour faire des serveurs Web et Mails redondants en maitre-esclave, mais dans ce cas, un seul serveur est réellement actif. Depuis la 0.8, il est possible d’avoir une configuration multi-maîtres dans le but de pouvoir faire en plus de l’équilibrage de charge. Voyons comment ça se passe sous Debian!

Tout d’abord, voici la configuration des deux serveurs servant aux tests :
srv1 : Debian lenny avec comme IP 192.168.69.16 et /dev/hda3 comme partition utilisée pour DRBD.
srv2 : Debian lenny avec comme IP 192.168.69.15 et /dev/hda3 comme partition utilisée pour DRBD.

On installe donc ce qu’il faut sur les deux serveurs :

# apt-get install drbd8-utils drbd8-modules-`uname -r`

Ensuite, on créé un fichier /etc/drbd.conf identique sur les deux serveurs. Dans ce fichier, on spécifique qu’on autorise deux serveurs maitres, le protocole de réplication (le protocole C étant celui ayant la plus haute fiabilité), et les hôtes et partitions DRBD réunis autour d’une ressource drbd.

global {
  usage-count yes;
}


common {
  protocol C;
  startup {
    degr-wfc-timeout 120;
    become-primary-on both;
  }
  net {
    allow-two-primaries;
    after-sb-0pri discard-zero-changes;
    after-sb-1pri discard-secondary;
    after-sb-2pri disconnect;
  }
}

resource r0 {
  on srv1 {
    device    /dev/drbd0;
    disk      /dev/hda3;
    address   192.168.69.16:7789;
    meta-disk internal;
  }
  on srv2 {
    device    /dev/drbd0;
    disk      /dev/hda3;
    address   192.168.69.15:7789;
    meta-disk internal;
  }
}
 

Reste plus qu’à démarrer les services sur chaque serveur et créer la ressource drbd nommée r0 dans le fichier de configuration :

srv1:/etc# drbdadm create-md r0
Writing meta data...           
initialising activity log      
NOT initialized bitmap         
New drbd meta data block sucessfully created.
success

Pour le côté didactique, voici les opérations réalisées par les script d’init :

srv1:/etc# drbdadm attach r0
srv1:/etc# drbdadm syncer r0
srv1:/etc# drbdadm syncer r0

Ensuite, on lance la synchro initiale, et la vous pouvez aller prendre un café. On voit l’état de la synchronisation dans le fichier /proc/drbd :

srv1:/etc# drbdadm -- --overwrite-data-of-peer primary r0
srv1:/etc# 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
 0: cs:SyncSource st:Primary/Primary ds:UpToDate/Inconsistent C r---
    ns:5188 nr:0 dw:0 dr:5216 al:0 bm:0 lo:0 pe:1 ua:1 ap:0
        [>....................] sync'ed:  0.2% (5556/5561)M
        finish: 3:57:04 speed: 368 (344) K/sec
        resync: used:0/61 hits:324 misses:1 starving:0 dirty:0 changed:1
        act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0

Au passage, si l’un des noeuds démarre en slave, on peut le passer en maitre via un petit

srv2:/etc# drbdadm  primary r0

.

Il ne reste plus qu’à ajouter un système de fichiers clusturisé type OCFS2 ou GFS2 par dessus car qui dit multi-maitres dit également système permettant de gérer les verrous entre les noeuds sinon dites au revoir à vos données…

2 comments

  1. >Armetiz
    Oui, enfin, rsync n’est pas quand même à jeter aux oubliettes, et DRBD est quand même plus un acteur d’une solution HA, couplé avec Heartbeat par exemple, et pas seulement un outil de réplication de données.

Leave a Reply

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *