RAID Réseau multi-maîtres avec DRBD 0.8
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…