Ceci est une ancienne révision du document !


Mirroring sur deux serveurs : drbd

Le module drbd est disponible avec le noyau server "de base" depuis Hardy Heron1). Cependant, afin d'avoir un système récent avec un minimum de bug et de faille de sécurité, on passera au noyau server le plus récent.

Mise à jour du système :

Passer à la version du noyau la plus récente. Redémarrer.

Vérification de la présence du module drbd :

cat /proc/drbd
cat: /proc/drbd: Aucun fichier ou répertoire de ce type
modprobe drbd
cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by phil@fat-tyre, 2008-05-30 12:59:17

Sous Hardy Heron, la version du module et des outils est la 8.0.11.

Installation de drbd8-utils version idem à la version du module sans quoi le fonctionnement correct n'est pas garanti.
Un paquet suggéré : heartbeat : tout le monde est sur la même longueur d'onde…

Il faut que le service drbd démarre, sinon le script de démarrage de drbd de heartbeat ne fonctionne pas. Il faut donc lancer la commande
update-rc.d drbd defaults 70

ou simplement copier le lien qui se trouve dans /etc/rc3.d vers /etc/rc2.d si ça ne fonctionne pas.

Finalisation pour faire en sorte que les outils heartbeat fonctionnent :2)

chgrp haclient /sbin/drbdsetup
chmod o-x /sbin/drbdsetup
chmod u+s /sbin/drbdsetup

chgrp haclient /sbin/drbdmeta
chmod o-x /sbin/drbdmeta
chmod u+s /sbin/drbdmeta

Éditer le fichier /etc/drbd.conf :

global {
  usage-count no;
}

common {
  protocol C;
  
  syncer {
    rate 3M;
    verify-alg sha1;
  }
  
  handlers {
    pri-lost-after-sb "reboot -f";
    pri-lost "echo Déconnection des serveurs, vérifier les logs | mail -s 'SERVEUR: Alerte DRBD' admin@domain.fr";
    out-of-sync "echo Désynchronisation des serveurs, vérifier les logs | mail -s 'SERVEUR: Alerte DRBD' admin@domain.fr";
    pri-on-incon-degr "reboot -f";
    outdate-peer "/usr/lib/heartbeat/drbd-peer-outdater -t 5";
    local-io-error "echo o > /proc/sysrq-trigger ; halt -f";
  }
}

resource r0 {
  device    /dev/drbd0;
  disk      /dev/sda6;
  meta-disk internal;
  
  disk {
    on-io-error   detach;
  }
  
  startup {
    wfc-timeout  60;
    degr-wfc-timeout 30;
    become-primary-on serv1;
  }
  
  net {
    after-sb-0pri discard-older-primary;
    after-sb-1pri call-pri-lost-after-sb;
    after-sb-2pri call-pri-lost-after-sb;
  }
  on serv1 {
    address   192.168.214.10:7788;
  }
  on serv2 {
    address   192.168.214.11:7788;
  }
}
Ce fichier de configuration doit être scrupuleusement identique sur les deux serveurs.

À faire sur chaque serveur en même temps

Si vous vous êtes dit que vous alliez tout installer sur un serveur puis cloner le premier serveur pour en obtenir un second identique (ce qui peut engendrer d'autres problèmes FIXME (interface réseau via udev, fstab,…)), c'est là qu'il faut que vous sachiez que les instructions qui suivent doivent être lancées sur chacun des 2 serveurs, à moins de n'utiliser dd pour l'ensemble du/des disque(s) dur(s). Ce qui peut prendre pas mal de temps
Sinon, il faut répéter tout ce qui vient d'être fait sur le second serveur avant d'aller plus loin.
En même temps signifie simplement que la commande doit être lancée sur les 2 serveurs et que la suivante ne peut être lancée sur quelque serveur que ce soit que si la précédente a terminé sans erreur sur les 2 serveurs.

Lancer :

drbdadm create-md r0
v08 Magic number not found
md_offset 1093922816
al_offset 1093890048
bm_offset 1093853184

Found some data
 ==> This might destroy existing data! <==

Do you want to proceed?
[need to type 'yes' to confirm] 

Taper yes. Il est possible qu'une autre question demandant confirmation de destruction des données de la partition soit posée, répondez yes si vous êtes sur de ce que vous faites.

v07 Magic number not found
v07 Magic number not found
v08 Magic number not found
Writing meta data...
initialising activity log
NOT initialized bitmap
New drbd meta data block sucessfully created.
success
Il se peut qu'un message disant que cette partition contient des données vous empêche de continuer, il faut alors lancer la commande
shred -zvf -n 1 /dev/sda6

afin de remplir la partition avec des zéros, puis de relancer la commande.

Si le module drbd n'est pas chargé :

modprobe drbd

Puis :

drbdadm up r0

La commande suivante doit donner quelque chose du genre :

# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by phil@fat-tyre, 2008-05-30 12:59:17
 0: cs:Connected st:Secondary/Secondary ds:Inconsistent/Inconsistent C r---
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 oos:149134808

Puisque drbd est lancé mais aucun serveur primaire n'est déclaré. On le voit car après st:, il est indiqué Secondary/Secondary ce qui signifie que le nœud sur lequel la commande est exécuté est secondaire (le premier avant le /) et que l'autre l'est aussi (le second après le /).
Pour ne connaître que l'état de la grappe drbd, la commande suivante suffit :

drbdadm state r0
Secondary/Secondary

À ne faire que sur le serveur primaire

Il s'agit maintenant de déclarer un des 2 serveurs comm primaire, le serveur secondaire se synchronisera automagiquement3).
Lancer la commande :

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

cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by phil@fat-tyre, 2008-05-30 12:59:17
 0: cs:SyncSource st:Primary/Secondary ds:UpToDate/Inconsistent C r---
    ns:2240 nr:0 dw:0 dr:2240 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 oos:149132568
        [>....................] sync'ed:  0.1% (145637/145639)M
        finish: 17:15:38 speed: 2,240 (2,240) K/sec

On voit que le serveur secondaire se synchronise avec une superbe barre de progression.
Le temps indiqué après finish: est le temps indicatif restant avant la fin de la première synchronisation. Pour diminuer ce temps, il est vivement conseillé de débrider le taux de transfert de la synchronisation en modifiant provisoirement la configuration de drbd. Dans le fichier /etc/drbd.conf, remplacer :

    rate 3M;

par

    rate 100M;

Pour prendre la modification en compte :

drbdadm adjust r0

Le débit ira donc aussi vite qu'il peut. Lire le chapitre concernant les débits à la fin de ce document.

Une fois les serveurs synchronisés,

cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by phil@fat-tyre, 2008-05-30 12:59:17
 0: cs:Connected st:Primary/Secondary ds:UpToDate/UpToDate C r---
    ns:2240 nr:0 dw:0 dr:2240 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 oos:149132568

il est temps de formater la partition drbd (vous avez, bien évidemment pensé à revenir à un débit de synchronisation normal) :

mkfs.ext3 /dev/drbd0

et de monter votre partition. Le montage de la partition doit utiliser /dev/drbd0.

Dans le cas de l'utilisation de drbd avec heartbeat et samba, le montage du disque est géré par heartbeat.

La valeur du paramètre rate est exprimée en Mo/sec (d'où le M), si vous êtes en réseau 100Mbit/s, n'allez pas au dessus de 9M, puisqu'il s'agit (environ) de la valeur maximale de débit. La valeur 3M correspond au tiers de ce débit afin de laisser de la bande passante aux utilisateurs. Le tiers de la bande passante est une valeur conseillée sur le site de drbd.

Si vos serveurs ont une carte réseau Gigabit, vous pouvez optimiser les débits de deux manières :

  • Séparation physique des flux
  • Sous-réseau Gigabit dédié

Séparation physique des flux

Il est tout à fait possible (et conseillé, mais je n'ai pas mis cette solution en place) d'avoir 2 cartes réseau sur les serveurs :

  • une pour la connexion au réseau : cette connexion sert aux utilisateurs pour accéder aux données,
  • une pour une connexion directe (via câble croisé) entre les serveurs : celle-ci pour la synchronisation des données uniquement4).

Sous-réseau Gigabit dédié

Dans le cas où le réseau utilisateur est en 100Mbit/s, il est possible d'utiliser un petit switch Gigabit (de 3 ports minimum) :

  • Port 1 : liaison avec le switch du réseau utilisateur (lien 100Mbit/s)
  • Port 2 : liaison avec un serveur (lien Gigabit)
  • Port 3 : liaison avec l'autre serveur (lien Gigabit)

De cette manière, la synchronisation entre les deux serveurs se fait via un lien Gigabit, et les utilisateurs ne sont pas pénalisés. La valeur du débit peut alors être fixée à 10M.



1)
à vrai dire je ne sais pas si c'était déjà le cas pour les versions précédentes
2)
à faire après l'installation de heartbeat, évidemment
3)
oui je sais, ce terme n'est pas de moi, il est souvent utilisé dans les documentations Debian et dérivés, d'où sa place ici.
4)
il ne faut pas faire passer le signe de vie heartbeat par cette connexion, car le signe de vie doit passer par le lien que les utilisateurs utilisent pour vérifier son bon fonctionnement.
  • utilisateurs/mrwaloo/drbd.1233910730.txt.gz
  • Dernière modification: Le 18/04/2011, 14:42
  • (modification externe)