Drbd est une sorte de raid over ip, il vous permettra de faire un réplication parfaite entre deux ou plusieurs serveurs selon la version de Drbd que vous utiliserez.

Pour Drbd il existe deux mode d'utilisation le mode Actif/Actif ou l'ont peut écrire sur les deux nœuds (ou plus) en même temps, et Actif/Passif, il est indépendant du type de système de fichiers utilisé sur le serveur ou les serveurs.

Vous pouvez utiliser n'importe quel système de fichiers si vous etes en mode Actif/Passif, par contre en mode Actif/Actif il vous faudra un système tel que GFS ou OCFS.

Le scenario est simple deux serveurs Centos 5.5 avec chacun une partition de 512mo vierge, encore une fois je sais qu'il y a beaucoup de gens louches qui utilisent Debian voir Ubuntu serveur, un jour peut être mon Kvm sera souillé par un tel système... Quoi qu'il en soit c'est la même démarche seul les noms de paquets divergent un peu.

A savoir : pour l'instant la série de version de Drbd est la 0.8, avec la 0.9 nous aurons la possibilité d'avoir plus de 2 nœuds.

Pour une simple synchronisation préférez Rsync...

Installation :

Deux possibilités les paquets de votre distribution ou compiler la dernière version, le mieux est d'aller jeter un coup d'œil par la :

http://www.drbd.org/download/packages/

A savoir : les trois versions disponibles sur Centos et Redhat sont compatible entre elles, pour ces tests j'ai utilisé les versions :

[root@centos1 /]# rpm -qa | grep drbd
drbd83-8.3.2-6.el5_3
kmod-drbd83-8.3.2-6.el5_3

sur le premier nœud (serveur).

et

[root@centos2 ~]# rpm -qa | grep drbd
kmod-drbd-8.0.16-5.el5_3
drbd-8.0.16-5.el5.centos

sur le deuxième.

Compilation :

cd /opt/SOURCES
wget http://oss.linbit.com/drbd/drbd-latest.tar.gz
tar xzvf drbd-8.3.8.tar.gz
cd drbd-8.3.8
cd drbd
make
cd ..
make tools
make install
make install-tools
modprobe drbd

Avec les paquets :

Centos/Redhat

yum install drbd83 kmod_drbd83
modprobe drbd

Debian/Ubuntu

aptitude install drbd

Un petit : lsmod pour vérifier que le module est bien chargé ?

Avec un netstat -ntlpu vous pouvez voir que le module écoute sur un port.

exemple :

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 192.168.1.248:7777          0.0.0.0:*                   LISTEN      -

Pensez à remplir convenablement votre fichier /etc/hosts.

Pré-requis :

  • Deux disques/partitions identiques.
  • mkdir /data

Passons maintenant à la configuration de drbd !

Le mode Actif/Passif :

Dans ce mode vous pouvez utiliser ext3 ou ext4.

Contenu du fichier de configuration /etc/drbd.conf :

global { usage-count no; }
common { syncer { rate 33M; } }
resource data {
        protocol C;
        net {
                 cram-hmac-alg sha1;
                 shared-secret "AllezBourgoin!!!";
            }
 on centos1 {
    device     /dev/drbd0;
    disk       /dev/hda1;
    address    192.168.1.248:7788;
    flexible-meta-disk  internal;
  }
  on centos2 {
    device     /dev/drbd0;
    disk       /dev/hda1;
    address    192.168.1.240:7788;
    flexible-meta-disk  internal;
  }
}

Le mode Actif/Actif :

Contenu du fichier de configuration /etc/drbd.conf :

global { usage-count no; }
common { syncer { rate 33M; } }
resource data {
        protocol C;
        net {
                 cram-hmac-alg sha1;
                 shared-secret "AllezBourgoin!!!";
                 allow-two-primaries;
            }
         startup {
             become-primary-on both;
            }
 on centos1 {
    device     /dev/drbd0;
    disk       /dev/hda1;
    address    192.168.1.248:7788;
    flexible-meta-disk  internal;
  }
  on centos2 {
    device     /dev/drbd0;
    disk       /dev/hda1;
    address    192.168.1.240:7788;
    flexible-meta-disk  internal;
  }
}

Go tout the cambouis :

drbdadm create-md data
drbdadm attach data
drbdadm connect data

Puis sur des deux serveurs :

drbdadm -- --overwrite-data-of-peer primary data

Démarrage :

/etc/init.d/drbd start

Vous suivez la synchro via

cat /proc/drbd 
ou
/etc/init.d/drbd status

Formatage du nouveau périphérique :

Vous faites de l'actfi/Passif :

mkfs.ext3 /dev/drbd0

Vous faites de l'Actif/Actif :

mkfs.gfs /dev/drbd0

Attention :

N'oubliez pas les scripts d'init au démarrage !

Pour Redhat/Centos :

chkconfig --add drbd 
chkconfig --level 35 drbd on

Pour Debian/Ubuntu :

rc-update

En cas de problème :

Passer un disque secondaire en primary :

drbdsetup /dev/drbd0 primary -0

Test de bon fonctionnement de drbd en mode Actif/Passif :

Simuler une panne sur le nœud/serveur primary et passer le secondary en primary :

umount /data
drbdadm primary data 
mount /data

Désactiver/Détruire un nœud :

umount data     -> démonte les données
drbdadm down data     -> déconnecte le nœud
drbdadm invalidate data     -> détruit les données

Activé/Régénérer un nœud :

drbdadm up data
drbdadm connect data

Vérifier l'avancement avec :

watch cat /proc/drbd

Test de bon fonctionnement de drbd en mode Actif/Actif :

Créer un fichier sur un nœud et vérifiez qu'il soit bien vu sur l'autre nœud et inversement proportionnel ou égal :p.


A garder à l'esprit si vous désirez faire du Actif/Actif appelé aussi Primary/Primary utilisez bien la version actuel stable en 8.3 car elle gère mieux les problèmes de coupure réseau.

Bon à savoir il existe un console d'administration open-source : http://www.drbd.org/mc/drbd-mc-is-open-source/

Bon bidouillage à tous !